git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
powerpc/MSI: Fix race condition in tearing down MSI interrupts
[pandora-kernel.git]
/
arch
/
powerpc
/
sysdev
/
ppc4xx_msi.c
diff --git
a/arch/powerpc/sysdev/ppc4xx_msi.c
b/arch/powerpc/sysdev/ppc4xx_msi.c
index
6eb21f2
..
8fb8061
100644
(file)
--- a/
arch/powerpc/sysdev/ppc4xx_msi.c
+++ b/
arch/powerpc/sysdev/ppc4xx_msi.c
@@
-93,7
+93,7
@@
static int ppc4xx_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
if (!msi_data->msi_virqs)
return -ENOMEM;
if (!msi_data->msi_virqs)
return -ENOMEM;
-
list_for_each_entry(entry, &dev->msi_list, list
) {
+
for_each_pci_msi_entry(entry, dev
) {
int_no = msi_bitmap_alloc_hwirqs(&msi_data->bitmap, 1);
if (int_no >= 0)
break;
int_no = msi_bitmap_alloc_hwirqs(&msi_data->bitmap, 1);
if (int_no >= 0)
break;
@@
-124,16
+124,17
@@
void ppc4xx_teardown_msi_irqs(struct pci_dev *dev)
{
struct msi_desc *entry;
struct ppc4xx_msi *msi_data = &ppc4xx_msi;
{
struct msi_desc *entry;
struct ppc4xx_msi *msi_data = &ppc4xx_msi;
+ irq_hw_number_t hwirq;
dev_dbg(&dev->dev, "PCIE-MSI: tearing down msi irqs\n");
dev_dbg(&dev->dev, "PCIE-MSI: tearing down msi irqs\n");
-
list_for_each_entry(entry, &dev->msi_list, list
) {
+
for_each_pci_msi_entry(entry, dev
) {
if (entry->irq == NO_IRQ)
continue;
if (entry->irq == NO_IRQ)
continue;
+ hwirq = virq_to_hw(entry->irq);
irq_set_msi_desc(entry->irq, NULL);
irq_set_msi_desc(entry->irq, NULL);
- msi_bitmap_free_hwirqs(&msi_data->bitmap,
- virq_to_hw(entry->irq), 1);
irq_dispose_mapping(entry->irq);
irq_dispose_mapping(entry->irq);
+ msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1);
}
}
}
}