diff options
-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 | ||