Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.14.15.
   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
  41enum {
  42	dma_debug_single,
  43	dma_debug_page,
  44	dma_debug_sg,
  45	dma_debug_coherent,
  46};
  47
  48enum 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 */
  70struct 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
  88typedef bool (*match_fn)(struct dma_debug_entry *, struct dma_debug_entry *);
  89
  90struct 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 */
  96static struct hash_bucket dma_entry_hash[HASH_SIZE];
  97/* List of pre-allocated dma_debug_entry's */
  98static LIST_HEAD(free_entries);
  99/* Lock for the list above */
 100static DEFINE_SPINLOCK(free_entries_lock);
 101
 102/* Global disable flag - will be set in case of an error */
 103static u32 global_disable __read_mostly;
 104
 105/* Global error count */
 106static u32 error_count;
 107
 108/* Global error show enable*/
 109static u32 show_all_errors __read_mostly;
 110/* Number of errors to show */
 111static u32 show_num_errors = 1;
 112
 113static u32 num_free_entries;
 114static u32 min_free_entries;
 115static u32 nr_total_entries;
 116
 117/* number of preallocated entries requested by kernel cmdline */
 118static u32 req_entries;
 119
 120/* debugfs dentry's for the stuff above */
 121static struct dentry *dma_debug_dent        __read_mostly;
 122static struct dentry *global_disable_dent   __read_mostly;
 123static struct dentry *error_count_dent      __read_mostly;
 124static struct dentry *show_all_errors_dent  __read_mostly;
 125static struct dentry *show_num_errors_dent  __read_mostly;
 126static struct dentry *num_free_entries_dent __read_mostly;
 127static struct dentry *min_free_entries_dent __read_mostly;
 128static struct dentry *filter_dent           __read_mostly;
 129
 130/* per-driver filter related state */
 131
 132#define NAME_MAX_LEN	64
 133
 134static char                  current_driver_name[NAME_MAX_LEN] __read_mostly;
 135static struct device_driver *current_driver                    __read_mostly;
 136
 137static DEFINE_RWLOCK(driver_name_lock);
 138
 139static 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
 145static const char *type2name[4] = { "single", "page",
 146				    "scather-gather", "coherent" };
 147
 148static 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 */
 164static 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
 174static 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 */
 234static 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 */
 246static 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 */
 260static 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
 268static 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
 274static 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 */
 290static 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
 340static 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
 346static 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 */
 376static 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 */
 385static void hash_bucket_del(struct dma_debug_entry *entry)
 386{
 387	list_del(&entry->list);
 388}
 389
 390static 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 */
 398void 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}
 424EXPORT_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 */
 449static RADIX_TREE(dma_active_cacheline, GFP_NOWAIT);
 450static 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
 455static 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
 461static 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
 471static 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
 487static 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
 504static 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
 511static 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
 533static 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 */
 560void 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 */
 600static 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
 621static 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 */
 641static 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		pr_err("DMA-API: debugging out of memory - disabling\n");
 650		global_disable = true;
 651		spin_unlock_irqrestore(&free_entries_lock, flags);
 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
 669static 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
 685int 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}
 730EXPORT_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
 740static 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
 760out_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
 770static 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
 792static 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
 850out_unlock:
 851	write_unlock_irqrestore(&driver_name_lock, flags);
 852
 853	return count;
 854}
 855
 856static const struct file_operations filter_fops = {
 857	.read  = filter_read,
 858	.write = filter_write,
 859	.llseek = default_llseek,
 860};
 861
 862static 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
 912out_err:
 913	debugfs_remove_recursive(dma_debug_dent);
 914
 915	return -ENOMEM;
 916}
 917
 918static 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
 942static 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
 972void 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 */
 993void 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
1027static __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
1040static __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
1058static 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
1149static 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
1156static 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
1166static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len)
1167{
1168	if (overlap(addr, len, _text, _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
1173static 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
1236out:
1237	put_hash_bucket(bucket, &flags);
1238}
1239
1240void 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}
1277EXPORT_SYMBOL(debug_dma_map_page);
1278
1279void 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}
1315EXPORT_SYMBOL(debug_dma_mapping_error);
1316
1317void 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}
1336EXPORT_SYMBOL(debug_dma_unmap_page);
1337
1338void 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}
1371EXPORT_SYMBOL(debug_dma_map_sg);
1372
1373static 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
1392void 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}
1423EXPORT_SYMBOL(debug_dma_unmap_sg);
1424
1425void 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}
1450EXPORT_SYMBOL(debug_dma_alloc_coherent);
1451
1452void 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}
1470EXPORT_SYMBOL(debug_dma_free_coherent);
1471
1472void 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}
1489EXPORT_SYMBOL(debug_dma_sync_single_for_cpu);
1490
1491void 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}
1509EXPORT_SYMBOL(debug_dma_sync_single_for_device);
1510
1511void 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}
1530EXPORT_SYMBOL(debug_dma_sync_single_range_for_cpu);
1531
1532void 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}
1551EXPORT_SYMBOL(debug_dma_sync_single_range_for_device);
1552
1553void 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}
1584EXPORT_SYMBOL(debug_dma_sync_sg_for_cpu);
1585
1586void 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}
1616EXPORT_SYMBOL(debug_dma_sync_sg_for_device);
1617
1618static 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);