* [git pull][PATCH 0/5] dma-debug minor fixes and cleanups
@ 2009-06-08 14:34 Joerg Roedel
2009-06-08 14:34 ` [PATCH 1/5] dma-debug: comment style fixes Joerg Roedel
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel
Hi Ingo,
The following changes since commit 62a6f465f6572e1f28765c583c12753bb3e23715:
Ingo Molnar (1):
Merge branch 'dma-debug/2.6.31' of git://git.kernel.org/.../joro/linux-2.6-iommu into core/iommu
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git dma-debug/fixes
Joerg Roedel (5):
dma-debug: comment style fixes
dma-debug: code style fixes
dma-debug: use pr_* instead of printk(KERN_* ...)
dma-debug: disable/enable irqs only once in device_dma_allocations
dma-debug: simplify logic in driver_filter()
lib/dma-debug.c | 112 +++++++++++++++++++++++++++---------------------------
1 files changed, 56 insertions(+), 56 deletions(-)
These changes fix various style issues and convert API functions to
newer versions. The last two patches optimize irq enable/disable
frequency and simplify driver filter code to make it more readable.
Please pull.
Thanks,
Joerg
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/5] dma-debug: comment style fixes
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
@ 2009-06-08 14:34 ` Joerg Roedel
2009-06-08 14:34 ` [PATCH 2/5] dma-debug: code " Joerg Roedel
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel, Joerg Roedel
Last patch series introduced some new comment which does not fit the
Kernel comment style guidelines. Fix it with this patch.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
lib/dma-debug.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 77053d9..b8a61ff 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -542,7 +542,8 @@ static ssize_t filter_write(struct file *file, const char __user *userbuf,
write_lock_irqsave(&driver_name_lock, flags);
- /* Now handle the string we got from userspace very carefully.
+ /*
+ * Now handle the string we got from userspace very carefully.
* The rules are:
* - only use the first token we got
* - token delimiter is everything looking like a space
@@ -551,7 +552,7 @@ static ssize_t filter_write(struct file *file, const char __user *userbuf,
*/
if (!isalnum(buf[0])) {
/*
- If the first character userspace gave us is not
+ * If the first character userspace gave us is not
* alphanumerical then assume the filter should be
* switched off.
*/
--
1.6.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/5] dma-debug: code style fixes
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
2009-06-08 14:34 ` [PATCH 1/5] dma-debug: comment style fixes Joerg Roedel
@ 2009-06-08 14:34 ` Joerg Roedel
2009-06-08 14:34 ` [PATCH 3/5] dma-debug: use pr_* instead of printk(KERN_* ...) Joerg Roedel
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel, Joerg Roedel
This patch changes the recent updates to dma-debug to conform with
coding style guidelines of Linux and the -tip tree.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
lib/dma-debug.c | 23 ++++++++++++-----------
1 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index b8a61ff..9561825 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -501,8 +501,8 @@ out_err:
static ssize_t filter_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
- unsigned long flags;
char buf[NAME_MAX_LEN + 1];
+ unsigned long flags;
int len;
if (!current_driver_name[0])
@@ -523,9 +523,9 @@ static ssize_t filter_read(struct file *file, char __user *user_buf,
static ssize_t filter_write(struct file *file, const char __user *userbuf,
size_t count, loff_t *ppos)
{
- unsigned long flags;
char buf[NAME_MAX_LEN];
- size_t len = NAME_MAX_LEN - 1;
+ unsigned long flags;
+ size_t len;
int i;
/*
@@ -534,7 +534,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, len);
+ len = min(count, NAME_MAX_LEN - 1);
if (copy_from_user(buf, userbuf, len))
return -EFAULT;
@@ -1040,18 +1040,19 @@ EXPORT_SYMBOL(debug_dma_map_sg);
static int get_nr_mapped_entries(struct device *dev, struct scatterlist *s)
{
- struct dma_debug_entry *entry;
+ struct dma_debug_entry *entry, ref;
struct hash_bucket *bucket;
unsigned long flags;
- int mapped_ents = 0;
- struct dma_debug_entry ref;
+ int mapped_ents;
- ref.dev = dev;
+ ref.dev = dev;
ref.dev_addr = sg_dma_address(s);
- ref.size = sg_dma_len(s),
+ ref.size = sg_dma_len(s),
+
+ bucket = get_hash_bucket(&ref, &flags);
+ entry = hash_bucket_find(bucket, &ref);
+ mapped_ents = 0;
- bucket = get_hash_bucket(&ref, &flags);
- entry = hash_bucket_find(bucket, &ref);
if (entry)
mapped_ents = entry->sg_mapped_ents;
put_hash_bucket(bucket, &flags);
--
1.6.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/5] dma-debug: use pr_* instead of printk(KERN_* ...)
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
2009-06-08 14:34 ` [PATCH 1/5] dma-debug: comment style fixes Joerg Roedel
2009-06-08 14:34 ` [PATCH 2/5] dma-debug: code " Joerg Roedel
@ 2009-06-08 14:34 ` Joerg Roedel
2009-06-08 14:34 ` [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations Joerg Roedel
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel, Joerg Roedel
The pr_* macros are shorter than the old printk(KERN_ ...) variant.
Change the dma-debug code to use the new macros and save a few
unnecessary line breaks. If lines don't break the source code can also
be grepped more easily.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
lib/dma-debug.c | 36 +++++++++++++++---------------------
1 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 9561825..24c4a2c 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -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
@@ -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;
}
@@ -693,7 +690,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 +715,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 +725,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 +733,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 +742,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 +1233,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;
--
1.6.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
` (2 preceding siblings ...)
2009-06-08 14:34 ` [PATCH 3/5] dma-debug: use pr_* instead of printk(KERN_* ...) Joerg Roedel
@ 2009-06-08 14:34 ` Joerg Roedel
2009-07-23 18:43 ` Leon Woestenberg
2009-06-08 14:34 ` [PATCH 5/5] dma-debug: simplify logic in driver_filter() Joerg Roedel
2009-06-08 15:29 ` [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Ingo Molnar
5 siblings, 1 reply; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel, Joerg Roedel
There is no need to disable/enable irqs on each loop iteration. Just
disable irqs for the whole time the loop runs.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
lib/dma-debug.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 24c4a2c..27b369d 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -649,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;
}
--
1.6.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/5] dma-debug: simplify logic in driver_filter()
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
` (3 preceding siblings ...)
2009-06-08 14:34 ` [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations Joerg Roedel
@ 2009-06-08 14:34 ` Joerg Roedel
2009-06-08 15:29 ` [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Ingo Molnar
5 siblings, 0 replies; 8+ messages in thread
From: Joerg Roedel @ 2009-06-08 14:34 UTC (permalink / raw)
To: Ingo Molnar; +Cc: iommu, linux-kernel, Joerg Roedel
This patch makes the driver_filter function more readable by
reorganizing the code. The removal of a code code block to an upper
indentation level makes hard-to-read line-wraps unnecessary.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
lib/dma-debug.c | 46 +++++++++++++++++++++++-----------------------
1 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 27b369d..ad65fc0 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -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 (!drv)
- return false;
-
- /* lock to protect against change of current_driver_name */
- read_lock_irqsave(&driver_name_lock, flags);
+ if (current_driver || !current_driver_name[0])
+ return false;
- 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 { \
--
1.6.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [git pull][PATCH 0/5] dma-debug minor fixes and cleanups
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
` (4 preceding siblings ...)
2009-06-08 14:34 ` [PATCH 5/5] dma-debug: simplify logic in driver_filter() Joerg Roedel
@ 2009-06-08 15:29 ` Ingo Molnar
5 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2009-06-08 15:29 UTC (permalink / raw)
To: Joerg Roedel; +Cc: iommu, linux-kernel
* Joerg Roedel <joerg.roedel@amd.com> wrote:
> Hi Ingo,
>
> The following changes since commit 62a6f465f6572e1f28765c583c12753bb3e23715:
> Ingo Molnar (1):
> Merge branch 'dma-debug/2.6.31' of git://git.kernel.org/.../joro/linux-2.6-iommu into core/iommu
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git dma-debug/fixes
>
> Joerg Roedel (5):
> dma-debug: comment style fixes
> dma-debug: code style fixes
> dma-debug: use pr_* instead of printk(KERN_* ...)
> dma-debug: disable/enable irqs only once in device_dma_allocations
> dma-debug: simplify logic in driver_filter()
>
> lib/dma-debug.c | 112 +++++++++++++++++++++++++++---------------------------
> 1 files changed, 56 insertions(+), 56 deletions(-)
>
> These changes fix various style issues and convert API functions
> to newer versions. The last two patches optimize irq
> enable/disable frequency and simplify driver filter code to make
> it more readable. Please pull.
Pulled, thanks Joerg!
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations
2009-06-08 14:34 ` [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations Joerg Roedel
@ 2009-07-23 18:43 ` Leon Woestenberg
0 siblings, 0 replies; 8+ messages in thread
From: Leon Woestenberg @ 2009-07-23 18:43 UTC (permalink / raw)
To: Joerg Roedel; +Cc: Ingo Molnar, iommu, linux-kernel
Hello,
On Mon, Jun 8, 2009 at 4:34 PM, Joerg Roedel<joerg.roedel@amd.com> wrote:
> There is no need to disable/enable irqs on each loop iteration. Just
> disable irqs for the whole time the loop runs.
>
A typical need would be low interrupt latency.
> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
> ---
> lib/dma-debug.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index 24c4a2c..27b369d 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -649,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;
> }
Does this mean that on a UP system, interrupts are disabled for O(HASH_SIZE)?
How would that affect interrupt latencies?
Regards,
--
Leon
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-07-23 18:43 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-08 14:34 [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Joerg Roedel
2009-06-08 14:34 ` [PATCH 1/5] dma-debug: comment style fixes Joerg Roedel
2009-06-08 14:34 ` [PATCH 2/5] dma-debug: code " Joerg Roedel
2009-06-08 14:34 ` [PATCH 3/5] dma-debug: use pr_* instead of printk(KERN_* ...) Joerg Roedel
2009-06-08 14:34 ` [PATCH 4/5] dma-debug: disable/enable irqs only once in device_dma_allocations Joerg Roedel
2009-07-23 18:43 ` Leon Woestenberg
2009-06-08 14:34 ` [PATCH 5/5] dma-debug: simplify logic in driver_filter() Joerg Roedel
2009-06-08 15:29 ` [git pull][PATCH 0/5] dma-debug minor fixes and cleanups Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.