diff options
author | Pankaj Gupta <[email protected]> | 2017-05-03 14:51:28 -0700 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2017-05-03 15:52:07 -0700 |
commit | 6a5cd60ba84723c3f6cdb8dbe26a1dc9e26a0a02 (patch) | |
tree | 744f0a6c971469e7859ea0fbeae7bab11a34b1ea | |
parent | 46f0537b1ecf672052007c97f102a7e6bf0791e4 (diff) |
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/[email protected]
Signed-off-by: Pankaj Gupta <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Niklas Söderlund <[email protected]>
Cc: Vinod Koul <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Ville Syrjl <[email protected]>
Cc: Miles Chen <[email protected]>
Cc: Marcelo Tosatti <[email protected]>
Cc: Joerg Roedel <[email protected]>
Cc: Stanislaw Gruszka <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r-- | lib/dma-debug.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/lib/dma-debug.c b/lib/dma-debug.c index b157b46cc9a6..fe4d50c992df 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c @@ -942,21 +942,17 @@ static int device_dma_allocations(struct device *dev, struct dma_debug_entry **o unsigned long flags; int count = 0, i; - local_irq_save(flags); - 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) { if (entry->dev == dev) { count += 1; *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; } |