diff options
Diffstat (limited to 'kernel/irq/msi.c')
| -rw-r--r-- | kernel/irq/msi.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index 3e18163f336f..474de5cb394d 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c  | |||
| @@ -310,8 +310,15 @@ void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev) | |||
| 310 | struct msi_desc *desc; | 310 | struct msi_desc *desc; | 
| 311 | 311 | ||
| 312 | for_each_msi_entry(desc, dev) { | 312 | for_each_msi_entry(desc, dev) { | 
| 313 | irq_domain_free_irqs(desc->irq, desc->nvec_used); | 313 | /* | 
| 314 | desc->irq = 0; | 314 | * We might have failed to allocate an MSI early | 
| 315 | * enough that there is no IRQ associated to this | ||
| 316 | * entry. If that's the case, don't do anything. | ||
| 317 | */ | ||
| 318 | if (desc->irq) { | ||
| 319 | irq_domain_free_irqs(desc->irq, desc->nvec_used); | ||
| 320 | desc->irq = 0; | ||
| 321 | } | ||
| 315 | } | 322 | } | 
| 316 | } | 323 | } | 
| 317 | 324 | ||
