aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/irq.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-06-12 23:03:47 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-06-12 23:03:47 -0400
commit71998d1be4ae70e7d320cdd21595c1a02a29c61e (patch)
treeae386748d50db8b116d0eeaee2106f0f5f9b1c07 /arch/x86/kernel/irq.c
parentb2e09f633a3994ee97fa6bc734b533d9c8e6ea0f (diff)
parentfb24da805729ee4a83efa34015948f7d64da4b28 (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.c13
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