|
@@ -81,7 +81,10 @@ void default_teardown_msi_irqs(struct pci_dev *dev)
|
|
int i, nvec;
|
|
int i, nvec;
|
|
if (entry->irq == 0)
|
|
if (entry->irq == 0)
|
|
continue;
|
|
continue;
|
|
- nvec = 1 << entry->msi_attrib.multiple;
|
|
|
|
|
|
+ if (entry->nvec_used)
|
|
|
|
+ nvec = entry->nvec_used;
|
|
|
|
+ else
|
|
|
|
+ nvec = 1 << entry->msi_attrib.multiple;
|
|
for (i = 0; i < nvec; i++)
|
|
for (i = 0; i < nvec; i++)
|
|
arch_teardown_msi_irq(entry->irq + i);
|
|
arch_teardown_msi_irq(entry->irq + i);
|
|
}
|
|
}
|
|
@@ -336,7 +339,10 @@ static void free_msi_irqs(struct pci_dev *dev)
|
|
int i, nvec;
|
|
int i, nvec;
|
|
if (!entry->irq)
|
|
if (!entry->irq)
|
|
continue;
|
|
continue;
|
|
- nvec = 1 << entry->msi_attrib.multiple;
|
|
|
|
|
|
+ if (entry->nvec_used)
|
|
|
|
+ nvec = entry->nvec_used;
|
|
|
|
+ else
|
|
|
|
+ nvec = 1 << entry->msi_attrib.multiple;
|
|
#ifdef CONFIG_GENERIC_HARDIRQS
|
|
#ifdef CONFIG_GENERIC_HARDIRQS
|
|
for (i = 0; i < nvec; i++)
|
|
for (i = 0; i < nvec; i++)
|
|
BUG_ON(irq_has_action(entry->irq + i));
|
|
BUG_ON(irq_has_action(entry->irq + i));
|