• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 Advanced Micro Devices, Inc.
3  *
4  * Author: Joerg Roedel <joerg.roedel@amd.com>
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published
8  * by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18  */
19 
20 #include <linux/scatterlist.h>
21 #include <linux/dma-mapping.h>
22 #include <linux/stacktrace.h>
23 #include <linux/dma-debug.h>
24 #include <linux/spinlock.h>
25 #include <linux/debugfs.h>
26 #include <linux/uaccess.h>
27 #include <linux/export.h>
28 #include <linux/device.h>
29 #include <linux/types.h>
30 #include <linux/sched.h>
31 #include <linux/ctype.h>
32 #include <linux/list.h>
33 #include <linux/slab.h>
34 
35 #include <asm/sections.h>
36 
37 #define HASH_SIZE       1024ULL
38 #define HASH_FN_SHIFT   13
39 #define HASH_FN_MASK    (HASH_SIZE - 1)
40 
41 enum {
42 	dma_debug_single,
43 	dma_debug_page,
44 	dma_debug_sg,
45 	dma_debug_coherent,
46 };
47 
48 enum map_err_types {
49 	MAP_ERR_CHECK_NOT_APPLICABLE,
50 	MAP_ERR_NOT_CHECKED,
51 	MAP_ERR_CHECKED,
52 };
53 
54 #define DMA_DEBUG_STACKTRACE_ENTRIES 5
55 
56 /**
57  * struct dma_debug_entry - track a dma_map* or dma_alloc_coherent mapping
58  * @list: node on pre-allocated free_entries list
59  * @dev: 'dev' argument to dma_map_{page|single|sg} or dma_alloc_coherent
60  * @type: single, page, sg, coherent
61  * @pfn: page frame of the start address
62  * @offset: offset of mapping relative to pfn
63  * @size: length of the mapping
64  * @direction: enum dma_data_direction
65  * @sg_call_ents: 'nents' from dma_map_sg
66  * @sg_mapped_ents: 'mapped_ents' from dma_map_sg
67  * @map_err_type: track whether dma_mapping_error() was checked
68  * @stacktrace: support backtraces when a violation is detected
69  */
70 struct dma_debug_entry {
71 	struct list_head list;
72 	struct device    *dev;
73 	int              type;
74 	unsigned long	 pfn;
75 	size_t		 offset;
76 	u64              dev_addr;
77 	u64              size;
78 	int              direction;
79 	int		 sg_call_ents;
80 	int		 sg_mapped_ents;
81 	enum map_err_types  map_err_type;
82 #ifdef CONFIG_STACKTRACE
83 	struct		 stack_trace stacktrace;
84 	unsigned long	 st_entries[DMA_DEBUG_STACKTRACE_ENTRIES];
85 #endif
86 };
87 
88 typedef bool (*match_fn)(struct dma_debug_entry *, struct dma_debug_entry *);
89 
90 struct hash_bucket {
91 	struct list_head list;
92 	spinlock_t lock;
93 } ____cacheline_aligned_in_smp;
94 
95 /* Hash list to save the allocated dma addresses */
96 static struct hash_bucket dma_entry_hash[HASH_SIZE];
97 /* List of pre-allocated dma_debug_entry's */
98 static LIST_HEAD(free_entries);
99 /* Lock for the list above */
100 static DEFINE_SPINLOCK(free_entries_lock);
101 
102 /* Global disable flag - will be set in case of an error */
103 static u32 global_disable __read_mostly;
104 
105 /* Global error count */
106 static u32 error_count;
107 
108 /* Global error show enable*/
109 static u32 show_all_errors __read_mostly;
110 /* Number of errors to show */
111 static u32 show_num_errors = 1;
112 
113 static u32 num_free_entries;
114 static u32 min_free_entries;
115 static u32 nr_total_entries;
116 
117 /* number of preallocated entries requested by kernel cmdline */
118 static u32 req_entries;
119 
120 /* debugfs dentry's for the stuff above */
121 static struct dentry *dma_debug_dent        __read_mostly;
122 static struct dentry *global_disable_dent   __read_mostly;
123 static struct dentry *error_count_dent      __read_mostly;
124 static struct dentry *show_all_errors_dent  __read_mostly;
125 static struct dentry *show_num_errors_dent  __read_mostly;
126 static struct dentry *num_free_entries_dent __read_mostly;
127 static struct dentry *min_free_entries_dent __read_mostly;
128 static struct dentry *filter_dent           __read_mostly;
129 
130 /* per-driver filter related state */
131 
132 #define NAME_MAX_LEN	64
133 
134 static char                  current_driver_name[NAME_MAX_LEN] __read_mostly;
135 static struct device_driver *current_driver                    __read_mostly;
136 
137 static DEFINE_RWLOCK(driver_name_lock);
138 
139 static const char *const maperr2str[] = {
140 	[MAP_ERR_CHECK_NOT_APPLICABLE] = "dma map error check not applicable",
141 	[MAP_ERR_NOT_CHECKED] = "dma map error not checked",
142 	[MAP_ERR_CHECKED] = "dma map error checked",
143 };
144 
145 static const char *type2name[4] = { "single", "page",
146 				    "scather-gather", "coherent" };
147 
148 static const char *dir2name[4] = { "DMA_BIDIRECTIONAL", "DMA_TO_DEVICE",
149 				   "DMA_FROM_DEVICE", "DMA_NONE" };
150 
151 /*
152  * The access to some variables in this macro is racy. We can't use atomic_t
153  * here because all these variables are exported to debugfs. Some of them even
154  * writeable. This is also the reason why a lock won't help much. But anyway,
155  * the races are no big deal. Here is why:
156  *
157  *   error_count: the addition is racy, but the worst thing that can happen is
158  *                that we don't count some errors
159  *   show_num_errors: the subtraction is racy. Also no big deal because in
160  *                    worst case this will result in one warning more in the
161  *                    system log than the user configured. This variable is
162  *                    writeable via debugfs.
163  */
dump_entry_trace(struct dma_debug_entry * entry)164 static inline void dump_entry_trace(struct dma_debug_entry *entry)
165 {
166 #ifdef CONFIG_STACKTRACE
167 	if (entry) {
168 		pr_warning("Mapped at:\n");
169 		print_stack_trace(&entry->stacktrace, 0);
170 	}
171 #endif
172 }
173 
driver_filter(struct device * dev)174 static bool driver_filter(struct device *dev)
175 {
176 	struct device_driver *drv;
177 	unsigned long flags;
178 	bool ret;
179 
180 	/* driver filter off */
181 	if (likely(!current_driver_name[0]))
182 		return true;
183 
184 	/* driver filter on and initialized */
185 	if (current_driver && dev && dev->driver == current_driver)
186 		return true;
187 
188 	/* driver filter on, but we can't filter on a NULL device... */
189 	if (!dev)
190 		return false;
191 
192 	if (current_driver || !current_driver_name[0])
193 		return false;
194 
195 	/* driver filter on but not yet initialized */
196 	drv = dev->driver;
197 	if (!drv)
198 		return false;
199 
200 	/* lock to protect against change of current_driver_name */
201 	read_lock_irqsave(&driver_name_lock, flags);
202 
203 	ret = false;
204 	if (drv->name &&
205 	    strncmp(current_driver_name, drv->name, NAME_MAX_LEN - 1) == 0) {
206 		current_driver = drv;
207 		ret = true;
208 	}
209 
210 	read_unlock_irqrestore(&driver_name_lock, flags);
211 
212 	return ret;
213 }
214 
215 #define err_printk(dev, entry, format, arg...) do {			\
216 		error_count += 1;					\
217 		if (driver_filter(dev) &&				\
218 		    (show_all_errors || show_num_errors > 0)) {		\
219 			WARN(1, "%s %s: " format,			\
220 			     dev ? dev_driver_string(dev) : "NULL",	\
221 			     dev ? dev_name(dev) : "NULL", ## arg);	\
222 			dump_entry_trace(entry);			\
223 		}							\
224 		if (!show_all_errors && show_num_errors > 0)		\
225 			show_num_errors -= 1;				\
226 	} while (0);
227 
228 /*
229  * Hash related functions
230  *
231  * Every DMA-API request is saved into a struct dma_debug_entry. To
232  * have quick access to these structs they are stored into a hash.
233  */
hash_fn(struct dma_debug_entry * entry)234 static int hash_fn(struct dma_debug_entry *entry)
235 {
236 	/*
237 	 * Hash function is based on the dma address.
238 	 * We use bits 20-27 here as the index into the hash
239 	 */
240 	return (entry->dev_addr >> HASH_FN_SHIFT) & HASH_FN_MASK;
241 }
242 
243 /*
244  * Request exclusive access to a hash bucket for a given dma_debug_entry.
245  */
get_hash_bucket(struct dma_debug_entry * entry,unsigned long * flags)246 static struct hash_bucket *get_hash_bucket(struct dma_debug_entry *entry,
247 					   unsigned long *flags)
248 {
249 	int idx = hash_fn(entry);
250 	unsigned long __flags;
251 
252 	spin_lock_irqsave(&dma_entry_hash[idx].lock, __flags);
253 	*flags = __flags;
254 	return &dma_entry_hash[idx];
255 }
256 
257 /*
258  * Give up exclusive access to the hash bucket
259  */
put_hash_bucket(struct hash_bucket * bucket,unsigned long * flags)260 static void put_hash_bucket(struct hash_bucket *bucket,
261 			    unsigned long *flags)
262 {
263 	unsigned long __flags = *flags;
264 
265 	spin_unlock_irqrestore(&bucket->lock, __flags);
266 }
267 
exact_match(struct dma_debug_entry * a,struct dma_debug_entry * b)268 static bool exact_match(struct dma_debug_entry *a, struct dma_debug_entry *b)
269 {
270 	return ((a->dev_addr == b->dev_addr) &&
271 		(a->dev == b->dev)) ? true : false;
272 }
273 
containing_match(struct dma_debug_entry * a,struct dma_debug_entry * b)274 static bool containing_match(struct dma_debug_entry *a,
275 			     struct dma_debug_entry *b)
276 {
277 	if (a->dev != b->dev)
278 		return false;
279 
280 	if ((b->dev_addr <= a->dev_addr) &&
281 	    ((b->dev_addr + b->size) >= (a->dev_addr + a->size)))
282 		return true;
283 
284 	return false;
285 }
286 
287 /*
288  * Search a given entry in the hash bucket list
289  */
__hash_bucket_find(struct hash_bucket * bucket,struct dma_debug_entry * ref,match_fn match)290 static struct dma_debug_entry *__hash_bucket_find(struct hash_bucket *bucket,
291 						  struct dma_debug_entry *ref,
292 						  match_fn match)
293 {
294 	struct dma_debug_entry *entry, *ret = NULL;
295 	int matches = 0, match_lvl, last_lvl = -1;
296 
297 	list_for_each_entry(entry, &bucket->list, list) {
298 		if (!match(ref, entry))
299 			continue;
300 
301 		/*
302 		 * Some drivers map the same physical address multiple
303 		 * times. Without a hardware IOMMU this results in the
304 		 * same device addresses being put into the dma-debug
305 		 * hash multiple times too. This can result in false
306 		 * positives being reported. Therefore we implement a
307 		 * best-fit algorithm here which returns the entry from
308 		 * the hash which fits best to the reference value
309 		 * instead of the first-fit.
310 		 */
311 		matches += 1;
312 		match_lvl = 0;
313 		entry->size         == ref->size         ? ++match_lvl : 0;
314 		entry->type         == ref->type         ? ++match_lvl : 0;
315 		entry->direction    == ref->direction    ? ++match_lvl : 0;
316 		entry->sg_call_ents == ref->sg_call_ents ? ++match_lvl : 0;
317 
318 		if (match_lvl == 4) {
319 			/* perfect-fit - return the result */
320 			return entry;
321 		} else if (match_lvl > last_lvl) {
322 			/*
323 			 * We found an entry that fits better then the
324 			 * previous one or it is the 1st match.
325 			 */
326 			last_lvl = match_lvl;
327 			ret      = entry;
328 		}
329 	}
330 
331 	/*
332 	 * If we have multiple matches but no perfect-fit, just return
333 	 * NULL.
334 	 */
335 	ret = (matches == 1) ? ret : NULL;
336 
337 	return ret;
338 }
339 
bucket_find_exact(struct hash_bucket * bucket,struct dma_debug_entry * ref)340 static struct dma_debug_entry *bucket_find_exact(struct hash_bucket *bucket,
341 						 struct dma_debug_entry *ref)
342 {
343 	return __hash_bucket_find(bucket, ref, exact_match);
344 }
345 
bucket_find_contain(struct hash_bucket ** bucket,struct dma_debug_entry * ref,unsigned long * flags)346 static struct dma_debug_entry *bucket_find_contain(struct hash_bucket **bucket,
347 						   struct dma_debug_entry *ref,
348 						   unsigned long *flags)
349 {
350 
351 	unsigned int max_range = dma_get_max_seg_size(ref->dev);
352 	struct dma_debug_entry *entry, index = *ref;
353 	unsigned int range = 0;
354 
355 	while (range <= max_range) {
356 		entry = __hash_bucket_find(*bucket, &index, containing_match);
357 
358 		if (entry)
359 			return entry;
360 
361 		/*
362 		 * Nothing found, go back a hash bucket
363 		 */
364 		put_hash_bucket(*bucket, flags);
365 		range          += (1 << HASH_FN_SHIFT);
366 		index.dev_addr -= (1 << HASH_FN_SHIFT);
367 		*bucket = get_hash_bucket(&index, flags);
368 	}
369 
370 	return NULL;
371 }
372 
373 /*
374  * Add an entry to a hash bucket
375  */
hash_bucket_add(struct hash_bucket * bucket,struct dma_debug_entry * entry)376 static void hash_bucket_add(struct hash_bucket *bucket,
377 			    struct dma_debug_entry *entry)
378 {
379 	list_add_tail(&entry->list, &bucket->list);
380 }
381 
382 /*
383  * Remove entry from a hash bucket list
384  */
hash_bucket_del(struct dma_debug_entry * entry)385 static void hash_bucket_del(struct dma_debug_entry *entry)
386 {
387 	list_del(&entry->list);
388 }
389 
phys_addr(struct dma_debug_entry * entry)390 static unsigned long long phys_addr(struct dma_debug_entry *entry)
391 {
392 	return page_to_phys(pfn_to_page(entry->pfn)) + entry->offset;
393 }
394 
395 /*
396  * Dump mapping entries for debugging purposes
397  */
debug_dma_dump_mappings(struct device * dev)398 void debug_dma_dump_mappings(struct device *dev)
399 {
400 	int idx;
401 
402 	for (idx = 0; idx < HASH_SIZE; idx++) {
403 		struct hash_bucket *bucket = &dma_entry_hash[idx];
404 		struct dma_debug_entry *entry;
405 		unsigned long flags;
406 
407 		spin_lock_irqsave(&bucket->lock, flags);
408 
409 		list_for_each_entry(entry, &bucket->list, list) {
410 			if (!dev || dev == entry->dev) {
411 				dev_info(entry->dev,
412 					 "%s idx %d P=%Lx N=%lx D=%Lx L=%Lx %s %s\n",
413 					 type2name[entry->type], idx,
414 					 phys_addr(entry), entry->pfn,
415 					 entry->dev_addr, entry->size,
416 					 dir2name[entry->direction],
417 					 maperr2str[entry->map_err_type]);
418 			}
419 		}
420 
421 		spin_unlock_irqrestore(&bucket->lock, flags);
422 	}
423 }
424 EXPORT_SYMBOL(debug_dma_dump_mappings);
425 
426 /*
427  * For each mapping (initial cacheline in the case of
428  * dma_alloc_coherent/dma_map_page, initial cacheline in each page of a
429  * scatterlist, or the cacheline specified in dma_map_single) insert
430  * into this tree using the cacheline as the key. At
431  * dma_unmap_{single|sg|page} or dma_free_coherent delete the entry.  If
432  * the entry already exists at insertion time add a tag as a reference
433  * count for the overlapping mappings.  For now, the overlap tracking
434  * just ensures that 'unmaps' balance 'maps' before marking the
435  * cacheline idle, but we should also be flagging overlaps as an API
436  * violation.
437  *
438  * Memory usage is mostly constrained by the maximum number of available
439  * dma-debug entries in that we need a free dma_debug_entry before
440  * inserting into the tree.  In the case of dma_map_page and
441  * dma_alloc_coherent there is only one dma_debug_entry and one
442  * dma_active_cacheline entry to track per event.  dma_map_sg(), on the
443  * other hand, consumes a single dma_debug_entry, but inserts 'nents'
444  * entries into the tree.
445  *
446  * At any time debug_dma_assert_idle() can be called to trigger a
447  * warning if any cachelines in the given page are in the active set.
448  */
449 static RADIX_TREE(dma_active_cacheline, GFP_NOWAIT);
450 static DEFINE_SPINLOCK(radix_lock);
451 #define ACTIVE_CACHELINE_MAX_OVERLAP ((1 << RADIX_TREE_MAX_TAGS) - 1)
452 #define CACHELINE_PER_PAGE_SHIFT (PAGE_SHIFT - L1_CACHE_SHIFT)
453 #define CACHELINES_PER_PAGE (1 << CACHELINE_PER_PAGE_SHIFT)
454 
to_cacheline_number(struct dma_debug_entry * entry)455 static phys_addr_t to_cacheline_number(struct dma_debug_entry *entry)
456 {
457 	return (entry->pfn << CACHELINE_PER_PAGE_SHIFT) +
458 		(entry->offset >> L1_CACHE_SHIFT);
459 }
460 
active_cacheline_read_overlap(phys_addr_t cln)461 static int active_cacheline_read_overlap(phys_addr_t cln)
462 {
463 	int overlap = 0, i;
464 
465 	for (i = RADIX_TREE_MAX_TAGS - 1; i >= 0; i--)
466 		if (radix_tree_tag_get(&dma_active_cacheline, cln, i))
467 			overlap |= 1 << i;
468 	return overlap;
469 }
470 
active_cacheline_set_overlap(phys_addr_t cln,int overlap)471 static int active_cacheline_set_overlap(phys_addr_t cln, int overlap)
472 {
473 	int i;
474 
475 	if (overlap > ACTIVE_CACHELINE_MAX_OVERLAP || overlap < 0)
476 		return overlap;
477 
478 	for (i = RADIX_TREE_MAX_TAGS - 1; i >= 0; i--)
479 		if (overlap & 1 << i)
480 			radix_tree_tag_set(&dma_active_cacheline, cln, i);
481 		else
482 			radix_tree_tag_clear(&dma_active_cacheline, cln, i);
483 
484 	return overlap;
485 }
486 
active_cacheline_inc_overlap(phys_addr_t cln)487 static void active_cacheline_inc_overlap(phys_addr_t cln)
488 {
489 	int overlap = active_cacheline_read_overlap(cln);
490 
491 	overlap = active_cacheline_set_overlap(cln, ++overlap);
492 
493 	/* If we overflowed the overlap counter then we're potentially
494 	 * leaking dma-mappings.  Otherwise, if maps and unmaps are
495 	 * balanced then this overflow may cause false negatives in
496 	 * debug_dma_assert_idle() as the cacheline may be marked idle
497 	 * prematurely.
498 	 */
499 	WARN_ONCE(overlap > ACTIVE_CACHELINE_MAX_OVERLAP,
500 		  "DMA-API: exceeded %d overlapping mappings of cacheline %pa\n",
501 		  ACTIVE_CACHELINE_MAX_OVERLAP, &cln);
502 }
503 
active_cacheline_dec_overlap(phys_addr_t cln)504 static int active_cacheline_dec_overlap(phys_addr_t cln)
505 {
506 	int overlap = active_cacheline_read_overlap(cln);
507 
508 	return active_cacheline_set_overlap(cln, --overlap);
509 }
510 
active_cacheline_insert(struct dma_debug_entry * entry)511 static int active_cacheline_insert(struct dma_debug_entry *entry)
512 {
513 	phys_addr_t cln = to_cacheline_number(entry);
514 	unsigned long flags;
515 	int rc;
516 
517 	/* If the device is not writing memory then we don't have any
518 	 * concerns about the cpu consuming stale data.  This mitigates
519 	 * legitimate usages of overlapping mappings.
520 	 */
521 	if (entry->direction == DMA_TO_DEVICE)
522 		return 0;
523 
524 	spin_lock_irqsave(&radix_lock, flags);
525 	rc = radix_tree_insert(&dma_active_cacheline, cln, entry);
526 	if (rc == -EEXIST)
527 		active_cacheline_inc_overlap(cln);
528 	spin_unlock_irqrestore(&radix_lock, flags);
529 
530 	return rc;
531 }
532 
active_cacheline_remove(struct dma_debug_entry * entry)533 static void active_cacheline_remove(struct dma_debug_entry *entry)
534 {
535 	phys_addr_t cln = to_cacheline_number(entry);
536 	unsigned long flags;
537 
538 	/* ...mirror the insert case */
539 	if (entry->direction == DMA_TO_DEVICE)
540 		return;
541 
542 	spin_lock_irqsave(&radix_lock, flags);
543 	/* since we are counting overlaps the final put of the
544 	 * cacheline will occur when the overlap count is 0.
545 	 * active_cacheline_dec_overlap() returns -1 in that case
546 	 */
547 	if (active_cacheline_dec_overlap(cln) < 0)
548 		radix_tree_delete(&dma_active_cacheline, cln);
549 	spin_unlock_irqrestore(&radix_lock, flags);
550 }
551 
552 /**
553  * debug_dma_assert_idle() - assert that a page is not undergoing dma
554  * @page: page to lookup in the dma_active_cacheline tree
555  *
556  * Place a call to this routine in cases where the cpu touching the page
557  * before the dma completes (page is dma_unmapped) will lead to data
558  * corruption.
559  */
debug_dma_assert_idle(struct page * page)560 void debug_dma_assert_idle(struct page *page)
561 {
562 	static struct dma_debug_entry *ents[CACHELINES_PER_PAGE];
563 	struct dma_debug_entry *entry = NULL;
564 	void **results = (void **) &ents;
565 	unsigned int nents, i;
566 	unsigned long flags;
567 	phys_addr_t cln;
568 
569 	if (!page)
570 		return;
571 
572 	cln = (phys_addr_t) page_to_pfn(page) << CACHELINE_PER_PAGE_SHIFT;
573 	spin_lock_irqsave(&radix_lock, flags);
574 	nents = radix_tree_gang_lookup(&dma_active_cacheline, results, cln,
575 				       CACHELINES_PER_PAGE);
576 	for (i = 0; i < nents; i++) {
577 		phys_addr_t ent_cln = to_cacheline_number(ents[i]);
578 
579 		if (ent_cln == cln) {
580 			entry = ents[i];
581 			break;
582 		} else if (ent_cln >= cln + CACHELINES_PER_PAGE)
583 			break;
584 	}
585 	spin_unlock_irqrestore(&radix_lock, flags);
586 
587 	if (!entry)
588 		return;
589 
590 	cln = to_cacheline_number(entry);
591 	err_printk(entry->dev, entry,
592 		   "DMA-API: cpu touching an active dma mapped cacheline [cln=%pa]\n",
593 		   &cln);
594 }
595 
596 /*
597  * Wrapper function for adding an entry to the hash.
598  * This function takes care of locking itself.
599  */
add_dma_entry(struct dma_debug_entry * entry)600 static void add_dma_entry(struct dma_debug_entry *entry)
601 {
602 	struct hash_bucket *bucket;
603 	unsigned long flags;
604 	int rc;
605 
606 	bucket = get_hash_bucket(entry, &flags);
607 	hash_bucket_add(bucket, entry);
608 	put_hash_bucket(bucket, &flags);
609 
610 	rc = active_cacheline_insert(entry);
611 	if (rc == -ENOMEM) {
612 		pr_err("DMA-API: cacheline tracking ENOMEM, dma-debug disabled\n");
613 		global_disable = true;
614 	}
615 
616 	/* TODO: report -EEXIST errors here as overlapping mappings are
617 	 * not supported by the DMA API
618 	 */
619 }
620 
__dma_entry_alloc(void)621 static struct dma_debug_entry *__dma_entry_alloc(void)
622 {
623 	struct dma_debug_entry *entry;
624 
625 	entry = list_entry(free_entries.next, struct dma_debug_entry, list);
626 	list_del(&entry->list);
627 	memset(entry, 0, sizeof(*entry));
628 
629 	num_free_entries -= 1;
630 	if (num_free_entries < min_free_entries)
631 		min_free_entries = num_free_entries;
632 
633 	return entry;
634 }
635 
636 /* struct dma_entry allocator
637  *
638  * The next two functions implement the allocator for
639  * struct dma_debug_entries.
640  */
dma_entry_alloc(void)641 static struct dma_debug_entry *dma_entry_alloc(void)
642 {
643 	struct dma_debug_entry *entry;
644 	unsigned long flags;
645 
646 	spin_lock_irqsave(&free_entries_lock, flags);
647 
648 	if (list_empty(&free_entries)) {
649 		global_disable = true;
650 		spin_unlock_irqrestore(&free_entries_lock, flags);
651 		pr_err("DMA-API: debugging out of memory - disabling\n");
652 		return NULL;
653 	}
654 
655 	entry = __dma_entry_alloc();
656 
657 	spin_unlock_irqrestore(&free_entries_lock, flags);
658 
659 #ifdef CONFIG_STACKTRACE
660 	entry->stacktrace.max_entries = DMA_DEBUG_STACKTRACE_ENTRIES;
661 	entry->stacktrace.entries = entry->st_entries;
662 	entry->stacktrace.skip = 2;
663 	save_stack_trace(&entry->stacktrace);
664 #endif
665 
666 	return entry;
667 }
668 
dma_entry_free(struct dma_debug_entry * entry)669 static void dma_entry_free(struct dma_debug_entry *entry)
670 {
671 	unsigned long flags;
672 
673 	active_cacheline_remove(entry);
674 
675 	/*
676 	 * add to beginning of the list - this way the entries are
677 	 * more likely cache hot when they are reallocated.
678 	 */
679 	spin_lock_irqsave(&free_entries_lock, flags);
680 	list_add(&entry->list, &free_entries);
681 	num_free_entries += 1;
682 	spin_unlock_irqrestore(&free_entries_lock, flags);
683 }
684 
dma_debug_resize_entries(u32 num_entries)685 int dma_debug_resize_entries(u32 num_entries)
686 {
687 	int i, delta, ret = 0;
688 	unsigned long flags;
689 	struct dma_debug_entry *entry;
690 	LIST_HEAD(tmp);
691 
692 	spin_lock_irqsave(&free_entries_lock, flags);
693 
694 	if (nr_total_entries < num_entries) {
695 		delta = num_entries - nr_total_entries;
696 
697 		spin_unlock_irqrestore(&free_entries_lock, flags);
698 
699 		for (i = 0; i < delta; i++) {
700 			entry = kzalloc(sizeof(*entry), GFP_KERNEL);
701 			if (!entry)
702 				break;
703 
704 			list_add_tail(&entry->list, &tmp);
705 		}
706 
707 		spin_lock_irqsave(&free_entries_lock, flags);
708 
709 		list_splice(&tmp, &free_entries);
710 		nr_total_entries += i;
711 		num_free_entries += i;
712 	} else {
713 		delta = nr_total_entries - num_entries;
714 
715 		for (i = 0; i < delta && !list_empty(&free_entries); i++) {
716 			entry = __dma_entry_alloc();
717 			kfree(entry);
718 		}
719 
720 		nr_total_entries -= i;
721 	}
722 
723 	if (nr_total_entries != num_entries)
724 		ret = 1;
725 
726 	spin_unlock_irqrestore(&free_entries_lock, flags);
727 
728 	return ret;
729 }
730 EXPORT_SYMBOL(dma_debug_resize_entries);
731 
732 /*
733  * DMA-API debugging init code
734  *
735  * The init code does two things:
736  *   1. Initialize core data structures
737  *   2. Preallocate a given number of dma_debug_entry structs
738  */
739 
prealloc_memory(u32 num_entries)740 static int prealloc_memory(u32 num_entries)
741 {
742 	struct dma_debug_entry *entry, *next_entry;
743 	int i;
744 
745 	for (i = 0; i < num_entries; ++i) {
746 		entry = kzalloc(sizeof(*entry), GFP_KERNEL);
747 		if (!entry)
748 			goto out_err;
749 
750 		list_add_tail(&entry->list, &free_entries);
751 	}
752 
753 	num_free_entries = num_entries;
754 	min_free_entries = num_entries;
755 
756 	pr_info("DMA-API: preallocated %d debug entries\n", num_entries);
757 
758 	return 0;
759 
760 out_err:
761 
762 	list_for_each_entry_safe(entry, next_entry, &free_entries, list) {
763 		list_del(&entry->list);
764 		kfree(entry);
765 	}
766 
767 	return -ENOMEM;
768 }
769 
filter_read(struct file * file,char __user * user_buf,size_t count,loff_t * ppos)770 static ssize_t filter_read(struct file *file, char __user *user_buf,
771 			   size_t count, loff_t *ppos)
772 {
773 	char buf[NAME_MAX_LEN + 1];
774 	unsigned long flags;
775 	int len;
776 
777 	if (!current_driver_name[0])
778 		return 0;
779 
780 	/*
781 	 * We can't copy to userspace directly because current_driver_name can
782 	 * only be read under the driver_name_lock with irqs disabled. So
783 	 * create a temporary copy first.
784 	 */
785 	read_lock_irqsave(&driver_name_lock, flags);
786 	len = scnprintf(buf, NAME_MAX_LEN + 1, "%s\n", current_driver_name);
787 	read_unlock_irqrestore(&driver_name_lock, flags);
788 
789 	return simple_read_from_buffer(user_buf, count, ppos, buf, len);
790 }
791 
filter_write(struct file * file,const char __user * userbuf,size_t count,loff_t * ppos)792 static ssize_t filter_write(struct file *file, const char __user *userbuf,
793 			    size_t count, loff_t *ppos)
794 {
795 	char buf[NAME_MAX_LEN];
796 	unsigned long flags;
797 	size_t len;
798 	int i;
799 
800 	/*
801 	 * We can't copy from userspace directly. Access to
802 	 * current_driver_name is protected with a write_lock with irqs
803 	 * disabled. Since copy_from_user can fault and may sleep we
804 	 * need to copy to temporary buffer first
805 	 */
806 	len = min(count, (size_t)(NAME_MAX_LEN - 1));
807 	if (copy_from_user(buf, userbuf, len))
808 		return -EFAULT;
809 
810 	buf[len] = 0;
811 
812 	write_lock_irqsave(&driver_name_lock, flags);
813 
814 	/*
815 	 * Now handle the string we got from userspace very carefully.
816 	 * The rules are:
817 	 *         - only use the first token we got
818 	 *         - token delimiter is everything looking like a space
819 	 *           character (' ', '\n', '\t' ...)
820 	 *
821 	 */
822 	if (!isalnum(buf[0])) {
823 		/*
824 		 * If the first character userspace gave us is not
825 		 * alphanumerical then assume the filter should be
826 		 * switched off.
827 		 */
828 		if (current_driver_name[0])
829 			pr_info("DMA-API: switching off dma-debug driver filter\n");
830 		current_driver_name[0] = 0;
831 		current_driver = NULL;
832 		goto out_unlock;
833 	}
834 
835 	/*
836 	 * Now parse out the first token and use it as the name for the
837 	 * driver to filter for.
838 	 */
839 	for (i = 0; i < NAME_MAX_LEN - 1; ++i) {
840 		current_driver_name[i] = buf[i];
841 		if (isspace(buf[i]) || buf[i] == ' ' || buf[i] == 0)
842 			break;
843 	}
844 	current_driver_name[i] = 0;
845 	current_driver = NULL;
846 
847 	pr_info("DMA-API: enable driver filter for driver [%s]\n",
848 		current_driver_name);
849 
850 out_unlock:
851 	write_unlock_irqrestore(&driver_name_lock, flags);
852 
853 	return count;
854 }
855 
856 static const struct file_operations filter_fops = {
857 	.read  = filter_read,
858 	.write = filter_write,
859 	.llseek = default_llseek,
860 };
861 
dma_debug_fs_init(void)862 static int dma_debug_fs_init(void)
863 {
864 	dma_debug_dent = debugfs_create_dir("dma-api", NULL);
865 	if (!dma_debug_dent) {
866 		pr_err("DMA-API: can not create debugfs directory\n");
867 		return -ENOMEM;
868 	}
869 
870 	global_disable_dent = debugfs_create_bool("disabled", 0444,
871 			dma_debug_dent,
872 			&global_disable);
873 	if (!global_disable_dent)
874 		goto out_err;
875 
876 	error_count_dent = debugfs_create_u32("error_count", 0444,
877 			dma_debug_dent, &error_count);
878 	if (!error_count_dent)
879 		goto out_err;
880 
881 	show_all_errors_dent = debugfs_create_u32("all_errors", 0644,
882 			dma_debug_dent,
883 			&show_all_errors);
884 	if (!show_all_errors_dent)
885 		goto out_err;
886 
887 	show_num_errors_dent = debugfs_create_u32("num_errors", 0644,
888 			dma_debug_dent,
889 			&show_num_errors);
890 	if (!show_num_errors_dent)
891 		goto out_err;
892 
893 	num_free_entries_dent = debugfs_create_u32("num_free_entries", 0444,
894 			dma_debug_dent,
895 			&num_free_entries);
896 	if (!num_free_entries_dent)
897 		goto out_err;
898 
899 	min_free_entries_dent = debugfs_create_u32("min_free_entries", 0444,
900 			dma_debug_dent,
901 			&min_free_entries);
902 	if (!min_free_entries_dent)
903 		goto out_err;
904 
905 	filter_dent = debugfs_create_file("driver_filter", 0644,
906 					  dma_debug_dent, NULL, &filter_fops);
907 	if (!filter_dent)
908 		goto out_err;
909 
910 	return 0;
911 
912 out_err:
913 	debugfs_remove_recursive(dma_debug_dent);
914 
915 	return -ENOMEM;
916 }
917 
device_dma_allocations(struct device * dev,struct dma_debug_entry ** out_entry)918 static int device_dma_allocations(struct device *dev, struct dma_debug_entry **out_entry)
919 {
920 	struct dma_debug_entry *entry;
921 	unsigned long flags;
922 	int count = 0, i;
923 
924 	local_irq_save(flags);
925 
926 	for (i = 0; i < HASH_SIZE; ++i) {
927 		spin_lock(&dma_entry_hash[i].lock);
928 		list_for_each_entry(entry, &dma_entry_hash[i].list, list) {
929 			if (entry->dev == dev) {
930 				count += 1;
931 				*out_entry = entry;
932 			}
933 		}
934 		spin_unlock(&dma_entry_hash[i].lock);
935 	}
936 
937 	local_irq_restore(flags);
938 
939 	return count;
940 }
941 
dma_debug_device_change(struct notifier_block * nb,unsigned long action,void * data)942 static int dma_debug_device_change(struct notifier_block *nb, unsigned long action, void *data)
943 {
944 	struct device *dev = data;
945 	struct dma_debug_entry *uninitialized_var(entry);
946 	int count;
947 
948 	if (global_disable)
949 		return 0;
950 
951 	switch (action) {
952 	case BUS_NOTIFY_UNBOUND_DRIVER:
953 		count = device_dma_allocations(dev, &entry);
954 		if (count == 0)
955 			break;
956 		err_printk(dev, entry, "DMA-API: device driver has pending "
957 				"DMA allocations while released from device "
958 				"[count=%d]\n"
959 				"One of leaked entries details: "
960 				"[device address=0x%016llx] [size=%llu bytes] "
961 				"[mapped with %s] [mapped as %s]\n",
962 			count, entry->dev_addr, entry->size,
963 			dir2name[entry->direction], type2name[entry->type]);
964 		break;
965 	default:
966 		break;
967 	}
968 
969 	return 0;
970 }
971 
dma_debug_add_bus(struct bus_type * bus)972 void dma_debug_add_bus(struct bus_type *bus)
973 {
974 	struct notifier_block *nb;
975 
976 	if (global_disable)
977 		return;
978 
979 	nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL);
980 	if (nb == NULL) {
981 		pr_err("dma_debug_add_bus: out of memory\n");
982 		return;
983 	}
984 
985 	nb->notifier_call = dma_debug_device_change;
986 
987 	bus_register_notifier(bus, nb);
988 }
989 
990 /*
991  * Let the architectures decide how many entries should be preallocated.
992  */
dma_debug_init(u32 num_entries)993 void dma_debug_init(u32 num_entries)
994 {
995 	int i;
996 
997 	if (global_disable)
998 		return;
999 
1000 	for (i = 0; i < HASH_SIZE; ++i) {
1001 		INIT_LIST_HEAD(&dma_entry_hash[i].list);
1002 		spin_lock_init(&dma_entry_hash[i].lock);
1003 	}
1004 
1005 	if (dma_debug_fs_init() != 0) {
1006 		pr_err("DMA-API: error creating debugfs entries - disabling\n");
1007 		global_disable = true;
1008 
1009 		return;
1010 	}
1011 
1012 	if (req_entries)
1013 		num_entries = req_entries;
1014 
1015 	if (prealloc_memory(num_entries) != 0) {
1016 		pr_err("DMA-API: debugging out of memory error - disabled\n");
1017 		global_disable = true;
1018 
1019 		return;
1020 	}
1021 
1022 	nr_total_entries = num_free_entries;
1023 
1024 	pr_info("DMA-API: debugging enabled by kernel config\n");
1025 }
1026 
dma_debug_cmdline(char * str)1027 static __init int dma_debug_cmdline(char *str)
1028 {
1029 	if (!str)
1030 		return -EINVAL;
1031 
1032 	if (strncmp(str, "off", 3) == 0) {
1033 		pr_info("DMA-API: debugging disabled on kernel command line\n");
1034 		global_disable = true;
1035 	}
1036 
1037 	return 0;
1038 }
1039 
dma_debug_entries_cmdline(char * str)1040 static __init int dma_debug_entries_cmdline(char *str)
1041 {
1042 	int res;
1043 
1044 	if (!str)
1045 		return -EINVAL;
1046 
1047 	res = get_option(&str, &req_entries);
1048 
1049 	if (!res)
1050 		req_entries = 0;
1051 
1052 	return 0;
1053 }
1054 
1055 __setup("dma_debug=", dma_debug_cmdline);
1056 __setup("dma_debug_entries=", dma_debug_entries_cmdline);
1057 
check_unmap(struct dma_debug_entry * ref)1058 static void check_unmap(struct dma_debug_entry *ref)
1059 {
1060 	struct dma_debug_entry *entry;
1061 	struct hash_bucket *bucket;
1062 	unsigned long flags;
1063 
1064 	bucket = get_hash_bucket(ref, &flags);
1065 	entry = bucket_find_exact(bucket, ref);
1066 
1067 	if (!entry) {
1068 		/* must drop lock before calling dma_mapping_error */
1069 		put_hash_bucket(bucket, &flags);
1070 
1071 		if (dma_mapping_error(ref->dev, ref->dev_addr)) {
1072 			err_printk(ref->dev, NULL,
1073 				   "DMA-API: device driver tries to free an "
1074 				   "invalid DMA memory address\n");
1075 		} else {
1076 			err_printk(ref->dev, NULL,
1077 				   "DMA-API: device driver tries to free DMA "
1078 				   "memory it has not allocated [device "
1079 				   "address=0x%016llx] [size=%llu bytes]\n",
1080 				   ref->dev_addr, ref->size);
1081 		}
1082 		return;
1083 	}
1084 
1085 	if (ref->size != entry->size) {
1086 		err_printk(ref->dev, entry, "DMA-API: device driver frees "
1087 			   "DMA memory with different size "
1088 			   "[device address=0x%016llx] [map size=%llu bytes] "
1089 			   "[unmap size=%llu bytes]\n",
1090 			   ref->dev_addr, entry->size, ref->size);
1091 	}
1092 
1093 	if (ref->type != entry->type) {
1094 		err_printk(ref->dev, entry, "DMA-API: device driver frees "
1095 			   "DMA memory with wrong function "
1096 			   "[device address=0x%016llx] [size=%llu bytes] "
1097 			   "[mapped as %s] [unmapped as %s]\n",
1098 			   ref->dev_addr, ref->size,
1099 			   type2name[entry->type], type2name[ref->type]);
1100 	} else if ((entry->type == dma_debug_coherent) &&
1101 		   (phys_addr(ref) != phys_addr(entry))) {
1102 		err_printk(ref->dev, entry, "DMA-API: device driver frees "
1103 			   "DMA memory with different CPU address "
1104 			   "[device address=0x%016llx] [size=%llu bytes] "
1105 			   "[cpu alloc address=0x%016llx] "
1106 			   "[cpu free address=0x%016llx]",
1107 			   ref->dev_addr, ref->size,
1108 			   phys_addr(entry),
1109 			   phys_addr(ref));
1110 	}
1111 
1112 	if (ref->sg_call_ents && ref->type == dma_debug_sg &&
1113 	    ref->sg_call_ents != entry->sg_call_ents) {
1114 		err_printk(ref->dev, entry, "DMA-API: device driver frees "
1115 			   "DMA sg list with different entry count "
1116 			   "[map count=%d] [unmap count=%d]\n",
1117 			   entry->sg_call_ents, ref->sg_call_ents);
1118 	}
1119 
1120 	/*
1121 	 * This may be no bug in reality - but most implementations of the
1122 	 * DMA API don't handle this properly, so check for it here
1123 	 */
1124 	if (ref->direction != entry->direction) {
1125 		err_printk(ref->dev, entry, "DMA-API: device driver frees "
1126 			   "DMA memory with different direction "
1127 			   "[device address=0x%016llx] [size=%llu bytes] "
1128 			   "[mapped with %s] [unmapped with %s]\n",
1129 			   ref->dev_addr, ref->size,
1130 			   dir2name[entry->direction],
1131 			   dir2name[ref->direction]);
1132 	}
1133 
1134 	if (entry->map_err_type == MAP_ERR_NOT_CHECKED) {
1135 		err_printk(ref->dev, entry,
1136 			   "DMA-API: device driver failed to check map error"
1137 			   "[device address=0x%016llx] [size=%llu bytes] "
1138 			   "[mapped as %s]",
1139 			   ref->dev_addr, ref->size,
1140 			   type2name[entry->type]);
1141 	}
1142 
1143 	hash_bucket_del(entry);
1144 	dma_entry_free(entry);
1145 
1146 	put_hash_bucket(bucket, &flags);
1147 }
1148 
check_for_stack(struct device * dev,void * addr)1149 static void check_for_stack(struct device *dev, void *addr)
1150 {
1151 	if (object_is_on_stack(addr))
1152 		err_printk(dev, NULL, "DMA-API: device driver maps memory from "
1153 				"stack [addr=%p]\n", addr);
1154 }
1155 
overlap(void * addr,unsigned long len,void * start,void * end)1156 static inline bool overlap(void *addr, unsigned long len, void *start, void *end)
1157 {
1158 	unsigned long a1 = (unsigned long)addr;
1159 	unsigned long b1 = a1 + len;
1160 	unsigned long a2 = (unsigned long)start;
1161 	unsigned long b2 = (unsigned long)end;
1162 
1163 	return !(b1 <= a2 || a1 >= b2);
1164 }
1165 
check_for_illegal_area(struct device * dev,void * addr,unsigned long len)1166 static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len)
1167 {
1168 	if (overlap(addr, len, _stext, _etext) ||
1169 	    overlap(addr, len, __start_rodata, __end_rodata))
1170 		err_printk(dev, NULL, "DMA-API: device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len);
1171 }
1172 
check_sync(struct device * dev,struct dma_debug_entry * ref,bool to_cpu)1173 static void check_sync(struct device *dev,
1174 		       struct dma_debug_entry *ref,
1175 		       bool to_cpu)
1176 {
1177 	struct dma_debug_entry *entry;
1178 	struct hash_bucket *bucket;
1179 	unsigned long flags;
1180 
1181 	bucket = get_hash_bucket(ref, &flags);
1182 
1183 	entry = bucket_find_contain(&bucket, ref, &flags);
1184 
1185 	if (!entry) {
1186 		err_printk(dev, NULL, "DMA-API: device driver tries "
1187 				"to sync DMA memory it has not allocated "
1188 				"[device address=0x%016llx] [size=%llu bytes]\n",
1189 				(unsigned long long)ref->dev_addr, ref->size);
1190 		goto out;
1191 	}
1192 
1193 	if (ref->size > entry->size) {
1194 		err_printk(dev, entry, "DMA-API: device driver syncs"
1195 				" DMA memory outside allocated range "
1196 				"[device address=0x%016llx] "
1197 				"[allocation size=%llu bytes] "
1198 				"[sync offset+size=%llu]\n",
1199 				entry->dev_addr, entry->size,
1200 				ref->size);
1201 	}
1202 
1203 	if (entry->direction == DMA_BIDIRECTIONAL)
1204 		goto out;
1205 
1206 	if (ref->direction != entry->direction) {
1207 		err_printk(dev, entry, "DMA-API: device driver syncs "
1208 				"DMA memory with different direction "
1209 				"[device address=0x%016llx] [size=%llu bytes] "
1210 				"[mapped with %s] [synced with %s]\n",
1211 				(unsigned long long)ref->dev_addr, entry->size,
1212 				dir2name[entry->direction],
1213 				dir2name[ref->direction]);
1214 	}
1215 
1216 	if (to_cpu && !(entry->direction == DMA_FROM_DEVICE) &&
1217 		      !(ref->direction == DMA_TO_DEVICE))
1218 		err_printk(dev, entry, "DMA-API: device driver syncs "
1219 				"device read-only DMA memory for cpu "
1220 				"[device address=0x%016llx] [size=%llu bytes] "
1221 				"[mapped with %s] [synced with %s]\n",
1222 				(unsigned long long)ref->dev_addr, entry->size,
1223 				dir2name[entry->direction],
1224 				dir2name[ref->direction]);
1225 
1226 	if (!to_cpu && !(entry->direction == DMA_TO_DEVICE) &&
1227 		       !(ref->direction == DMA_FROM_DEVICE))
1228 		err_printk(dev, entry, "DMA-API: device driver syncs "
1229 				"device write-only DMA memory to device "
1230 				"[device address=0x%016llx] [size=%llu bytes] "
1231 				"[mapped with %s] [synced with %s]\n",
1232 				(unsigned long long)ref->dev_addr, entry->size,
1233 				dir2name[entry->direction],
1234 				dir2name[ref->direction]);
1235 
1236 out:
1237 	put_hash_bucket(bucket, &flags);
1238 }
1239 
debug_dma_map_page(struct device * dev,struct page * page,size_t offset,size_t size,int direction,dma_addr_t dma_addr,bool map_single)1240 void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
1241 			size_t size, int direction, dma_addr_t dma_addr,
1242 			bool map_single)
1243 {
1244 	struct dma_debug_entry *entry;
1245 
1246 	if (unlikely(global_disable))
1247 		return;
1248 
1249 	if (dma_mapping_error(dev, dma_addr))
1250 		return;
1251 
1252 	entry = dma_entry_alloc();
1253 	if (!entry)
1254 		return;
1255 
1256 	entry->dev       = dev;
1257 	entry->type      = dma_debug_page;
1258 	entry->pfn	 = page_to_pfn(page);
1259 	entry->offset	 = offset,
1260 	entry->dev_addr  = dma_addr;
1261 	entry->size      = size;
1262 	entry->direction = direction;
1263 	entry->map_err_type = MAP_ERR_NOT_CHECKED;
1264 
1265 	if (map_single)
1266 		entry->type = dma_debug_single;
1267 
1268 	if (!PageHighMem(page)) {
1269 		void *addr = page_address(page) + offset;
1270 
1271 		check_for_stack(dev, addr);
1272 		check_for_illegal_area(dev, addr, size);
1273 	}
1274 
1275 	add_dma_entry(entry);
1276 }
1277 EXPORT_SYMBOL(debug_dma_map_page);
1278 
debug_dma_mapping_error(struct device * dev,dma_addr_t dma_addr)1279 void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
1280 {
1281 	struct dma_debug_entry ref;
1282 	struct dma_debug_entry *entry;
1283 	struct hash_bucket *bucket;
1284 	unsigned long flags;
1285 
1286 	if (unlikely(global_disable))
1287 		return;
1288 
1289 	ref.dev = dev;
1290 	ref.dev_addr = dma_addr;
1291 	bucket = get_hash_bucket(&ref, &flags);
1292 
1293 	list_for_each_entry(entry, &bucket->list, list) {
1294 		if (!exact_match(&ref, entry))
1295 			continue;
1296 
1297 		/*
1298 		 * The same physical address can be mapped multiple
1299 		 * times. Without a hardware IOMMU this results in the
1300 		 * same device addresses being put into the dma-debug
1301 		 * hash multiple times too. This can result in false
1302 		 * positives being reported. Therefore we implement a
1303 		 * best-fit algorithm here which updates the first entry
1304 		 * from the hash which fits the reference value and is
1305 		 * not currently listed as being checked.
1306 		 */
1307 		if (entry->map_err_type == MAP_ERR_NOT_CHECKED) {
1308 			entry->map_err_type = MAP_ERR_CHECKED;
1309 			break;
1310 		}
1311 	}
1312 
1313 	put_hash_bucket(bucket, &flags);
1314 }
1315 EXPORT_SYMBOL(debug_dma_mapping_error);
1316 
debug_dma_unmap_page(struct device * dev,dma_addr_t addr,size_t size,int direction,bool map_single)1317 void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
1318 			  size_t size, int direction, bool map_single)
1319 {
1320 	struct dma_debug_entry ref = {
1321 		.type           = dma_debug_page,
1322 		.dev            = dev,
1323 		.dev_addr       = addr,
1324 		.size           = size,
1325 		.direction      = direction,
1326 	};
1327 
1328 	if (unlikely(global_disable))
1329 		return;
1330 
1331 	if (map_single)
1332 		ref.type = dma_debug_single;
1333 
1334 	check_unmap(&ref);
1335 }
1336 EXPORT_SYMBOL(debug_dma_unmap_page);
1337 
debug_dma_map_sg(struct device * dev,struct scatterlist * sg,int nents,int mapped_ents,int direction)1338 void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,
1339 		      int nents, int mapped_ents, int direction)
1340 {
1341 	struct dma_debug_entry *entry;
1342 	struct scatterlist *s;
1343 	int i;
1344 
1345 	if (unlikely(global_disable))
1346 		return;
1347 
1348 	for_each_sg(sg, s, mapped_ents, i) {
1349 		entry = dma_entry_alloc();
1350 		if (!entry)
1351 			return;
1352 
1353 		entry->type           = dma_debug_sg;
1354 		entry->dev            = dev;
1355 		entry->pfn	      = page_to_pfn(sg_page(s));
1356 		entry->offset	      = s->offset,
1357 		entry->size           = sg_dma_len(s);
1358 		entry->dev_addr       = sg_dma_address(s);
1359 		entry->direction      = direction;
1360 		entry->sg_call_ents   = nents;
1361 		entry->sg_mapped_ents = mapped_ents;
1362 
1363 		if (!PageHighMem(sg_page(s))) {
1364 			check_for_stack(dev, sg_virt(s));
1365 			check_for_illegal_area(dev, sg_virt(s), sg_dma_len(s));
1366 		}
1367 
1368 		add_dma_entry(entry);
1369 	}
1370 }
1371 EXPORT_SYMBOL(debug_dma_map_sg);
1372 
get_nr_mapped_entries(struct device * dev,struct dma_debug_entry * ref)1373 static int get_nr_mapped_entries(struct device *dev,
1374 				 struct dma_debug_entry *ref)
1375 {
1376 	struct dma_debug_entry *entry;
1377 	struct hash_bucket *bucket;
1378 	unsigned long flags;
1379 	int mapped_ents;
1380 
1381 	bucket       = get_hash_bucket(ref, &flags);
1382 	entry        = bucket_find_exact(bucket, ref);
1383 	mapped_ents  = 0;
1384 
1385 	if (entry)
1386 		mapped_ents = entry->sg_mapped_ents;
1387 	put_hash_bucket(bucket, &flags);
1388 
1389 	return mapped_ents;
1390 }
1391 
debug_dma_unmap_sg(struct device * dev,struct scatterlist * sglist,int nelems,int dir)1392 void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist,
1393 			int nelems, int dir)
1394 {
1395 	struct scatterlist *s;
1396 	int mapped_ents = 0, i;
1397 
1398 	if (unlikely(global_disable))
1399 		return;
1400 
1401 	for_each_sg(sglist, s, nelems, i) {
1402 
1403 		struct dma_debug_entry ref = {
1404 			.type           = dma_debug_sg,
1405 			.dev            = dev,
1406 			.pfn		= page_to_pfn(sg_page(s)),
1407 			.offset		= s->offset,
1408 			.dev_addr       = sg_dma_address(s),
1409 			.size           = sg_dma_len(s),
1410 			.direction      = dir,
1411 			.sg_call_ents   = nelems,
1412 		};
1413 
1414 		if (mapped_ents && i >= mapped_ents)
1415 			break;
1416 
1417 		if (!i)
1418 			mapped_ents = get_nr_mapped_entries(dev, &ref);
1419 
1420 		check_unmap(&ref);
1421 	}
1422 }
1423 EXPORT_SYMBOL(debug_dma_unmap_sg);
1424 
debug_dma_alloc_coherent(struct device * dev,size_t size,dma_addr_t dma_addr,void * virt)1425 void debug_dma_alloc_coherent(struct device *dev, size_t size,
1426 			      dma_addr_t dma_addr, void *virt)
1427 {
1428 	struct dma_debug_entry *entry;
1429 
1430 	if (unlikely(global_disable))
1431 		return;
1432 
1433 	if (unlikely(virt == NULL))
1434 		return;
1435 
1436 	entry = dma_entry_alloc();
1437 	if (!entry)
1438 		return;
1439 
1440 	entry->type      = dma_debug_coherent;
1441 	entry->dev       = dev;
1442 	entry->pfn	 = page_to_pfn(virt_to_page(virt));
1443 	entry->offset	 = (size_t) virt & PAGE_MASK;
1444 	entry->size      = size;
1445 	entry->dev_addr  = dma_addr;
1446 	entry->direction = DMA_BIDIRECTIONAL;
1447 
1448 	add_dma_entry(entry);
1449 }
1450 EXPORT_SYMBOL(debug_dma_alloc_coherent);
1451 
debug_dma_free_coherent(struct device * dev,size_t size,void * virt,dma_addr_t addr)1452 void debug_dma_free_coherent(struct device *dev, size_t size,
1453 			 void *virt, dma_addr_t addr)
1454 {
1455 	struct dma_debug_entry ref = {
1456 		.type           = dma_debug_coherent,
1457 		.dev            = dev,
1458 		.pfn		= page_to_pfn(virt_to_page(virt)),
1459 		.offset		= (size_t) virt & PAGE_MASK,
1460 		.dev_addr       = addr,
1461 		.size           = size,
1462 		.direction      = DMA_BIDIRECTIONAL,
1463 	};
1464 
1465 	if (unlikely(global_disable))
1466 		return;
1467 
1468 	check_unmap(&ref);
1469 }
1470 EXPORT_SYMBOL(debug_dma_free_coherent);
1471 
debug_dma_sync_single_for_cpu(struct device * dev,dma_addr_t dma_handle,size_t size,int direction)1472 void debug_dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
1473 				   size_t size, int direction)
1474 {
1475 	struct dma_debug_entry ref;
1476 
1477 	if (unlikely(global_disable))
1478 		return;
1479 
1480 	ref.type         = dma_debug_single;
1481 	ref.dev          = dev;
1482 	ref.dev_addr     = dma_handle;
1483 	ref.size         = size;
1484 	ref.direction    = direction;
1485 	ref.sg_call_ents = 0;
1486 
1487 	check_sync(dev, &ref, true);
1488 }
1489 EXPORT_SYMBOL(debug_dma_sync_single_for_cpu);
1490 
debug_dma_sync_single_for_device(struct device * dev,dma_addr_t dma_handle,size_t size,int direction)1491 void debug_dma_sync_single_for_device(struct device *dev,
1492 				      dma_addr_t dma_handle, size_t size,
1493 				      int direction)
1494 {
1495 	struct dma_debug_entry ref;
1496 
1497 	if (unlikely(global_disable))
1498 		return;
1499 
1500 	ref.type         = dma_debug_single;
1501 	ref.dev          = dev;
1502 	ref.dev_addr     = dma_handle;
1503 	ref.size         = size;
1504 	ref.direction    = direction;
1505 	ref.sg_call_ents = 0;
1506 
1507 	check_sync(dev, &ref, false);
1508 }
1509 EXPORT_SYMBOL(debug_dma_sync_single_for_device);
1510 
debug_dma_sync_single_range_for_cpu(struct device * dev,dma_addr_t dma_handle,unsigned long offset,size_t size,int direction)1511 void debug_dma_sync_single_range_for_cpu(struct device *dev,
1512 					 dma_addr_t dma_handle,
1513 					 unsigned long offset, size_t size,
1514 					 int direction)
1515 {
1516 	struct dma_debug_entry ref;
1517 
1518 	if (unlikely(global_disable))
1519 		return;
1520 
1521 	ref.type         = dma_debug_single;
1522 	ref.dev          = dev;
1523 	ref.dev_addr     = dma_handle;
1524 	ref.size         = offset + size;
1525 	ref.direction    = direction;
1526 	ref.sg_call_ents = 0;
1527 
1528 	check_sync(dev, &ref, true);
1529 }
1530 EXPORT_SYMBOL(debug_dma_sync_single_range_for_cpu);
1531 
debug_dma_sync_single_range_for_device(struct device * dev,dma_addr_t dma_handle,unsigned long offset,size_t size,int direction)1532 void debug_dma_sync_single_range_for_device(struct device *dev,
1533 					    dma_addr_t dma_handle,
1534 					    unsigned long offset,
1535 					    size_t size, int direction)
1536 {
1537 	struct dma_debug_entry ref;
1538 
1539 	if (unlikely(global_disable))
1540 		return;
1541 
1542 	ref.type         = dma_debug_single;
1543 	ref.dev          = dev;
1544 	ref.dev_addr     = dma_handle;
1545 	ref.size         = offset + size;
1546 	ref.direction    = direction;
1547 	ref.sg_call_ents = 0;
1548 
1549 	check_sync(dev, &ref, false);
1550 }
1551 EXPORT_SYMBOL(debug_dma_sync_single_range_for_device);
1552 
debug_dma_sync_sg_for_cpu(struct device * dev,struct scatterlist * sg,int nelems,int direction)1553 void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
1554 			       int nelems, int direction)
1555 {
1556 	struct scatterlist *s;
1557 	int mapped_ents = 0, i;
1558 
1559 	if (unlikely(global_disable))
1560 		return;
1561 
1562 	for_each_sg(sg, s, nelems, i) {
1563 
1564 		struct dma_debug_entry ref = {
1565 			.type           = dma_debug_sg,
1566 			.dev            = dev,
1567 			.pfn		= page_to_pfn(sg_page(s)),
1568 			.offset		= s->offset,
1569 			.dev_addr       = sg_dma_address(s),
1570 			.size           = sg_dma_len(s),
1571 			.direction      = direction,
1572 			.sg_call_ents   = nelems,
1573 		};
1574 
1575 		if (!i)
1576 			mapped_ents = get_nr_mapped_entries(dev, &ref);
1577 
1578 		if (i >= mapped_ents)
1579 			break;
1580 
1581 		check_sync(dev, &ref, true);
1582 	}
1583 }
1584 EXPORT_SYMBOL(debug_dma_sync_sg_for_cpu);
1585 
debug_dma_sync_sg_for_device(struct device * dev,struct scatterlist * sg,int nelems,int direction)1586 void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
1587 				  int nelems, int direction)
1588 {
1589 	struct scatterlist *s;
1590 	int mapped_ents = 0, i;
1591 
1592 	if (unlikely(global_disable))
1593 		return;
1594 
1595 	for_each_sg(sg, s, nelems, i) {
1596 
1597 		struct dma_debug_entry ref = {
1598 			.type           = dma_debug_sg,
1599 			.dev            = dev,
1600 			.pfn		= page_to_pfn(sg_page(s)),
1601 			.offset		= s->offset,
1602 			.dev_addr       = sg_dma_address(s),
1603 			.size           = sg_dma_len(s),
1604 			.direction      = direction,
1605 			.sg_call_ents   = nelems,
1606 		};
1607 		if (!i)
1608 			mapped_ents = get_nr_mapped_entries(dev, &ref);
1609 
1610 		if (i >= mapped_ents)
1611 			break;
1612 
1613 		check_sync(dev, &ref, false);
1614 	}
1615 }
1616 EXPORT_SYMBOL(debug_dma_sync_sg_for_device);
1617 
dma_debug_driver_setup(char * str)1618 static int __init dma_debug_driver_setup(char *str)
1619 {
1620 	int i;
1621 
1622 	for (i = 0; i < NAME_MAX_LEN - 1; ++i, ++str) {
1623 		current_driver_name[i] = *str;
1624 		if (*str == 0)
1625 			break;
1626 	}
1627 
1628 	if (current_driver_name[0])
1629 		pr_info("DMA-API: enable driver filter for driver [%s]\n",
1630 			current_driver_name);
1631 
1632 
1633 	return 1;
1634 }
1635 __setup("dma_debug_driver=", dma_debug_driver_setup);
1636