linux/lib/dma-debug.c
<<
>>
Prefs
   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);
1636