Commit 6a5cd60b authored by Pankaj Gupta's avatar Pankaj Gupta Committed by Linus Torvalds

lib/dma-debug.c: make locking work for RT

Interrupt enable/disabled with spinlock is not a valid operation for RT
as it can make executing tasks sleep from a non-sleepable context.  So
convert it to spin_lock_irq[save, restore].

Link: http://lkml.kernel.org/r/1492065666-3816-1-git-send-email-pagupta@redhat.comSigned-off-by: default avatarPankaj Gupta <pagupta@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ville Syrjl <ville.syrjala@linux.intel.com>
Cc: Miles Chen <miles.chen@mediatek.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Joerg Roedel <jroedel@suse.de>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 46f0537b
...@@ -942,21 +942,17 @@ static int device_dma_allocations(struct device *dev, struct dma_debug_entry **o ...@@ -942,21 +942,17 @@ static int device_dma_allocations(struct device *dev, struct dma_debug_entry **o
unsigned long flags; unsigned long flags;
int count = 0, i; int count = 0, i;
local_irq_save(flags);
for (i = 0; i < HASH_SIZE; ++i) { for (i = 0; i < HASH_SIZE; ++i) {
spin_lock(&dma_entry_hash[i].lock); spin_lock_irqsave(&dma_entry_hash[i].lock, flags);
list_for_each_entry(entry, &dma_entry_hash[i].list, list) { list_for_each_entry(entry, &dma_entry_hash[i].list, list) {
if (entry->dev == dev) { if (entry->dev == dev) {
count += 1; count += 1;
*out_entry = entry; *out_entry = entry;
} }
} }
spin_unlock(&dma_entry_hash[i].lock); spin_unlock_irqrestore(&dma_entry_hash[i].lock, flags);
} }
local_irq_restore(flags);
return count; return count;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment