Merge branch 'iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip...
[sfrench/cifs-2.6.git] / lib / dma-debug.c
index 9561825c14a4297ffc1570d07530b36443a710a9..ad65fc0317d93b6c1dd20171e625e7e619631d21 100644 (file)
@@ -139,7 +139,7 @@ static inline void dump_entry_trace(struct dma_debug_entry *entry)
 {
 #ifdef CONFIG_STACKTRACE
        if (entry) {
-               printk(KERN_WARNING "Mapped at:\n");
+               pr_warning("Mapped at:\n");
                print_stack_trace(&entry->stacktrace, 0);
        }
 #endif
@@ -147,6 +147,10 @@ static inline void dump_entry_trace(struct dma_debug_entry *entry)
 
 static bool driver_filter(struct device *dev)
 {
+       struct device_driver *drv;
+       unsigned long flags;
+       bool ret;
+
        /* driver filter off */
        if (likely(!current_driver_name[0]))
                return true;
@@ -155,32 +159,28 @@ static bool driver_filter(struct device *dev)
        if (current_driver && dev->driver == current_driver)
                return true;
 
-       /* driver filter on but not yet initialized */
-       if (!current_driver && current_driver_name[0]) {
-               struct device_driver *drv = get_driver(dev->driver);
-               unsigned long flags;
-               bool ret = false;
+       if (current_driver || !current_driver_name[0])
+               return false;
 
-               if (!drv)
-                       return false;
-
-               /* lock to protect against change of current_driver_name */
-               read_lock_irqsave(&driver_name_lock, flags);
-
-               if (drv->name &&
-                   strncmp(current_driver_name, drv->name,
-                           NAME_MAX_LEN-1) == 0) {
-                       current_driver = drv;
-                       ret = true;
-               }
+       /* driver filter on but not yet initialized */
+       drv = get_driver(dev->driver);
+       if (!drv)
+               return false;
 
-               read_unlock_irqrestore(&driver_name_lock, flags);
-               put_driver(drv);
+       /* lock to protect against change of current_driver_name */
+       read_lock_irqsave(&driver_name_lock, flags);
 
-               return ret;
+       ret = false;
+       if (drv->name &&
+           strncmp(current_driver_name, drv->name, NAME_MAX_LEN - 1) == 0) {
+               current_driver = drv;
+               ret = true;
        }
 
-       return false;
+       read_unlock_irqrestore(&driver_name_lock, flags);
+       put_driver(drv);
+
+       return ret;
 }
 
 #define err_printk(dev, entry, format, arg...) do {            \
@@ -377,8 +377,7 @@ static struct dma_debug_entry *dma_entry_alloc(void)
        spin_lock_irqsave(&free_entries_lock, flags);
 
        if (list_empty(&free_entries)) {
-               printk(KERN_ERR "DMA-API: debugging out of memory "
-                               "- disabling\n");
+               pr_err("DMA-API: debugging out of memory - disabling\n");
                global_disable = true;
                goto out;
        }
@@ -483,8 +482,7 @@ static int prealloc_memory(u32 num_entries)
        num_free_entries = num_entries;
        min_free_entries = num_entries;
 
-       printk(KERN_INFO "DMA-API: preallocated %d debug entries\n",
-                       num_entries);
+       pr_info("DMA-API: preallocated %d debug entries\n", num_entries);
 
        return 0;
 
@@ -534,7 +532,7 @@ static ssize_t filter_write(struct file *file, const char __user *userbuf,
         * disabled. Since copy_from_user can fault and may sleep we
         * need to copy to temporary buffer first
         */
-       len = min(count, NAME_MAX_LEN - 1);
+       len = min(count, (size_t)(NAME_MAX_LEN - 1));
        if (copy_from_user(buf, userbuf, len))
                return -EFAULT;
 
@@ -557,8 +555,7 @@ static ssize_t filter_write(struct file *file, const char __user *userbuf,
                 * switched off.
                 */
                if (current_driver_name[0])
-                       printk(KERN_INFO "DMA-API: switching off dma-debug "
-                                        "driver filter\n");
+                       pr_info("DMA-API: switching off dma-debug driver filter\n");
                current_driver_name[0] = 0;
                current_driver = NULL;
                goto out_unlock;
@@ -576,8 +573,8 @@ static ssize_t filter_write(struct file *file, const char __user *userbuf,
        current_driver_name[i] = 0;
        current_driver = NULL;
 
-       printk(KERN_INFO "DMA-API: enable driver filter for driver [%s]\n",
-              current_driver_name);
+       pr_info("DMA-API: enable driver filter for driver [%s]\n",
+               current_driver_name);
 
 out_unlock:
        write_unlock_irqrestore(&driver_name_lock, flags);
@@ -594,7 +591,7 @@ static int dma_debug_fs_init(void)
 {
        dma_debug_dent = debugfs_create_dir("dma-api", NULL);
        if (!dma_debug_dent) {
-               printk(KERN_ERR "DMA-API: can not create debugfs directory\n");
+               pr_err("DMA-API: can not create debugfs directory\n");
                return -ENOMEM;
        }
 
@@ -652,15 +649,19 @@ static int device_dma_allocations(struct device *dev)
        unsigned long flags;
        int count = 0, i;
 
+       local_irq_save(flags);
+
        for (i = 0; i < HASH_SIZE; ++i) {
-               spin_lock_irqsave(&dma_entry_hash[i].lock, flags);
+               spin_lock(&dma_entry_hash[i].lock);
                list_for_each_entry(entry, &dma_entry_hash[i].list, list) {
                        if (entry->dev == dev)
                                count += 1;
                }
-               spin_unlock_irqrestore(&dma_entry_hash[i].lock, flags);
+               spin_unlock(&dma_entry_hash[i].lock);
        }
 
+       local_irq_restore(flags);
+
        return count;
 }
 
@@ -693,7 +694,7 @@ void dma_debug_add_bus(struct bus_type *bus)
 
        nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL);
        if (nb == NULL) {
-               printk(KERN_ERR "dma_debug_add_bus: out of memory\n");
+               pr_err("dma_debug_add_bus: out of memory\n");
                return;
        }
 
@@ -718,8 +719,7 @@ void dma_debug_init(u32 num_entries)
        }
 
        if (dma_debug_fs_init() != 0) {
-               printk(KERN_ERR "DMA-API: error creating debugfs entries "
-                               "- disabling\n");
+               pr_err("DMA-API: error creating debugfs entries - disabling\n");
                global_disable = true;
 
                return;
@@ -729,8 +729,7 @@ void dma_debug_init(u32 num_entries)
                num_entries = req_entries;
 
        if (prealloc_memory(num_entries) != 0) {
-               printk(KERN_ERR "DMA-API: debugging out of memory error "
-                               "- disabled\n");
+               pr_err("DMA-API: debugging out of memory error - disabled\n");
                global_disable = true;
 
                return;
@@ -738,7 +737,7 @@ void dma_debug_init(u32 num_entries)
 
        nr_total_entries = num_free_entries;
 
-       printk(KERN_INFO "DMA-API: debugging enabled by kernel config\n");
+       pr_info("DMA-API: debugging enabled by kernel config\n");
 }
 
 static __init int dma_debug_cmdline(char *str)
@@ -747,8 +746,7 @@ static __init int dma_debug_cmdline(char *str)
                return -EINVAL;
 
        if (strncmp(str, "off", 3) == 0) {
-               printk(KERN_INFO "DMA-API: debugging disabled on kernel "
-                                "command line\n");
+               pr_info("DMA-API: debugging disabled on kernel command line\n");
                global_disable = true;
        }
 
@@ -1239,8 +1237,8 @@ static int __init dma_debug_driver_setup(char *str)
        }
 
        if (current_driver_name[0])
-               printk(KERN_INFO "DMA-API: enable driver filter for "
-                                "driver [%s]\n", current_driver_name);
+               pr_info("DMA-API: enable driver filter for driver [%s]\n",
+                       current_driver_name);
 
 
        return 1;