1670 lines · 44.0 KB · C
RawDownload
	/* 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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t