/* handle vmalloc and linear addresses */ if (!is_vmalloc_addr(virt) && !virt_addr_valid(virt)) return; ref.paddr = virt_to_paddr(virt); if (unlikely(dma_debug_disabled())) return; check_unmap(&ref);} void debug_dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, int direction){ struct dma_debug_entry ref; if (unlikely(dma_debug_disabled())) return; ref.type = dma_debug_single; ref.dev = dev; ref.dev_addr = dma_handle; ref.size = size; ref.direction = direction; ref.sg_call_ents = 0; check_sync(dev, &ref, true);} void debug_dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, int direction){ struct dma_debug_entry ref; if (unlikely(dma_debug_disabled())) return; ref.type = dma_debug_single; ref.dev = dev; ref.dev_addr = dma_handle; ref.size = size; ref.direction = direction; ref.sg_call_ents = 0; check_sync(dev, &ref, false);} void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, int direction){ struct scatterlist *s; int mapped_ents = 0, i; if (unlikely(dma_debug_disabled())) return; for_each_sg(sg, s, nelems, i) { struct dma_debug_entry ref = { .type = dma_debug_sg, .dev = dev, .paddr = sg_phys(s), .dev_addr = sg_dma_address(s), .size = sg_dma_len(s), .direction = direction, .sg_call_ents = nelems, }; if (!i) mapped_ents = get_nr_mapped_entries(dev, &ref); if (i >= mapped_ents) break; check_sync(dev, &ref, true); }} void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, int direction){ struct scatterlist *s; int mapped_ents = 0, i; if (unlikely(dma_debug_disabled())) return; for_each_sg(sg, s, nelems, i) { struct dma_debug_entry ref = { .type = dma_debug_sg, .dev = dev, .paddr = sg_phys(s), .dev_addr = sg_dma_address(s), .size = sg_dma_len(s), .direction = direction, .sg_call_ents = nelems, }; if (!i) mapped_ents = get_nr_mapped_entries(dev, &ref); if (i >= mapped_ents) break; check_sync(dev, &ref, false); }} void debug_dma_alloc_pages(struct device *dev, struct page *page, size_t size, int direction, dma_addr_t dma_addr){ struct dma_debug_entry *entry; if (unlikely(dma_debug_disabled())) return; entry = dma_entry_alloc(); if (!entry) return; entry->type = dma_debug_noncoherent; entry->dev = dev; entry->paddr = page_to_phys(page); entry->size = size; entry->dev_addr = dma_addr; entry->direction = direction; add_dma_entry(entry);} void debug_dma_free_pages(struct device *dev, struct page *page, size_t size, int direction, dma_addr_t dma_addr){ struct dma_debug_entry ref = { .type = dma_debug_noncoherent, .dev = dev, .paddr = page_to_phys(page), .dev_addr = dma_addr, .size = size, .direction = direction, }; if (unlikely(dma_debug_disabled())) return; check_unmap(&ref);} static int __init dma_debug_driver_setup(char *str){ int i; for (i = 0; i < NAME_MAX_LEN - 1; ++i, ++str) { current_driver_name[i] = *str; if (*str == 0) break; } if (current_driver_name[0]) pr_info("enable driver filter for driver [%s]\n", current_driver_name); return 1;}__setup("dma_debug_driver=", dma_debug_driver_setup);Lines 1501–1670 of 1670. Previous lines
/* handle vmalloc and linear addresses */ if (!is_vmalloc_addr(virt) && !virt_addr_valid(virt)) return; ref.paddr = virt_to_paddr(virt); if (unlikely(dma_debug_disabled())) return; check_unmap(&ref); } void debug_dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, int direction) { struct dma_debug_entry ref; if (unlikely(dma_debug_disabled())) return; ref.type = dma_debug_single; ref.dev = dev; ref.dev_addr = dma_handle; ref.size = size; ref.direction = direction; ref.sg_call_ents = 0; check_sync(dev, &ref, true); } void debug_dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, int direction) { struct dma_debug_entry ref; if (unlikely(dma_debug_disabled())) return; ref.type = dma_debug_single; ref.dev = dev; ref.dev_addr = dma_handle; ref.size = size; ref.direction = direction; ref.sg_call_ents = 0; check_sync(dev, &ref, false); } void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, int direction) { struct scatterlist *s; int mapped_ents = 0, i; if (unlikely(dma_debug_disabled())) return; for_each_sg(sg, s, nelems, i) { struct dma_debug_entry ref = { .type = dma_debug_sg, .dev = dev, .paddr = sg_phys(s), .dev_addr = sg_dma_address(s), .size = sg_dma_len(s), .direction = direction, .sg_call_ents = nelems, }; if (!i) mapped_ents = get_nr_mapped_entries(dev, &ref); if (i >= mapped_ents) break; check_sync(dev, &ref, true); } } void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, int direction) { struct scatterlist *s; int mapped_ents = 0, i; if (unlikely(dma_debug_disabled())) return; for_each_sg(sg, s, nelems, i) { struct dma_debug_entry ref = { .type = dma_debug_sg, .dev = dev, .paddr = sg_phys(s), .dev_addr = sg_dma_address(s), .size = sg_dma_len(s), .direction = direction, .sg_call_ents = nelems, }; if (!i) mapped_ents = get_nr_mapped_entries(dev, &ref); if (i >= mapped_ents) break; check_sync(dev, &ref, false); } } void debug_dma_alloc_pages(struct device *dev, struct page *page, size_t size, int direction, dma_addr_t dma_addr) { struct dma_debug_entry *entry; if (unlikely(dma_debug_disabled())) return; entry = dma_entry_alloc(); if (!entry) return; entry->type = dma_debug_noncoherent; entry->dev = dev; entry->paddr = page_to_phys(page); entry->size = size; entry->dev_addr = dma_addr; entry->direction = direction; add_dma_entry(entry); } void debug_dma_free_pages(struct device *dev, struct page *page, size_t size, int direction, dma_addr_t dma_addr) { struct dma_debug_entry ref = { .type = dma_debug_noncoherent, .dev = dev, .paddr = page_to_phys(page), .dev_addr = dma_addr, .size = size, .direction = direction, }; if (unlikely(dma_debug_disabled())) return; check_unmap(&ref); } static int __init dma_debug_driver_setup(char *str) { int i; for (i = 0; i < NAME_MAX_LEN - 1; ++i, ++str) { current_driver_name[i] = *str; if (*str == 0) break; } if (current_driver_name[0]) pr_info("enable driver filter for driver [%s]\n", current_driver_name); return 1; } __setup("dma_debug_driver=", dma_debug_driver_setup);