diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 23:03:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 23:03:47 -0400 |
commit | 71998d1be4ae70e7d320cdd21595c1a02a29c61e (patch) | |
tree | ae386748d50db8b116d0eeaee2106f0f5f9b1c07 /arch/x86/kernel/irq.c | |
parent | b2e09f633a3994ee97fa6bc734b533d9c8e6ea0f (diff) | |
parent | fb24da805729ee4a83efa34015948f7d64da4b28 (diff) |
Merge branch 'x86-irq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 irq fixes from Ingo Molnar:
"Two changes: a cpu-hotplug/irq race fix, plus a HyperV related fix"
* 'x86-irq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/irq: Fix fixup_irqs() error handling
x86, irq, pic: Probe for legacy PIC and set legacy_pic appropriately
Diffstat (limited to 'arch/x86/kernel/irq.c')
-rw-r--r-- | arch/x86/kernel/irq.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 11ccfb0a63e7..922d28581024 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c | |||
@@ -365,6 +365,7 @@ void fixup_irqs(void) | |||
365 | struct irq_desc *desc; | 365 | struct irq_desc *desc; |
366 | struct irq_data *data; | 366 | struct irq_data *data; |
367 | struct irq_chip *chip; | 367 | struct irq_chip *chip; |
368 | int ret; | ||
368 | 369 | ||
369 | for_each_irq_desc(irq, desc) { | 370 | for_each_irq_desc(irq, desc) { |
370 | int break_affinity = 0; | 371 | int break_affinity = 0; |
@@ -403,10 +404,14 @@ void fixup_irqs(void) | |||
403 | if (!irqd_can_move_in_process_context(data) && chip->irq_mask) | 404 | if (!irqd_can_move_in_process_context(data) && chip->irq_mask) |
404 | chip->irq_mask(data); | 405 | chip->irq_mask(data); |
405 | 406 | ||
406 | if (chip->irq_set_affinity) | 407 | if (chip->irq_set_affinity) { |
407 | chip->irq_set_affinity(data, affinity, true); | 408 | ret = chip->irq_set_affinity(data, affinity, true); |
408 | else if (!(warned++)) | 409 | if (ret == -ENOSPC) |
409 | set_affinity = 0; | 410 | pr_crit("IRQ %d set affinity failed because there are no available vectors. The device assigned to this IRQ is unstable.\n", irq); |
411 | } else { | ||
412 | if (!(warned++)) | ||
413 | set_affinity = 0; | ||
414 | } | ||
410 | 415 | ||
411 | /* | 416 | /* |
412 | * We unmask if the irq was not marked masked by the | 417 | * We unmask if the irq was not marked masked by the |