mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
[PATCH] fix deadlock in drivers/pci/msi.c
The lock validator caught another one: drivers/pci/msi.c is accessing &irq_desc[i].lock with interrupts enabled (!). The fix is to disable interrupts properly. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
4021cb279a
commit
f6bc2666ed
1 changed files with 4 additions and 2 deletions
|
@ -416,7 +416,9 @@ static void attach_msi_entry(struct msi_desc *entry, int vector)
|
|||
|
||||
static void irq_handler_init(int cap_id, int pos, int mask)
|
||||
{
|
||||
spin_lock(&irq_desc[pos].lock);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&irq_desc[pos].lock, flags);
|
||||
if (cap_id == PCI_CAP_ID_MSIX)
|
||||
irq_desc[pos].handler = &msix_irq_type;
|
||||
else {
|
||||
|
@ -425,7 +427,7 @@ static void irq_handler_init(int cap_id, int pos, int mask)
|
|||
else
|
||||
irq_desc[pos].handler = &msi_irq_w_maskbit_type;
|
||||
}
|
||||
spin_unlock(&irq_desc[pos].lock);
|
||||
spin_unlock_irqrestore(&irq_desc[pos].lock, flags);
|
||||
}
|
||||
|
||||
static void enable_msi_mode(struct pci_dev *dev, int pos, int type)
|
||||
|
|
Loading…
Reference in a new issue