diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-11-21 14:16:48 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-23 05:59:52 -0500 |
commit | a1967d64414dab500e86cbbddf8eae6ad2047903 (patch) | |
tree | 301031e3ff5c9adbda6373a5ea2b4aae5e7400ea /arch/x86/kernel/io_apic.c | |
parent | 57550b27ff5a13b00370fbfa34f2471c3456a41d (diff) |
x86: revert irq number limitation
Impact: fix MSIx not enough irq numbers available regression
The manual revert of the sparse_irq patches missed to bring the number
of possible irqs back to the .27 status. This resulted in a regression
when two multichannel network cards were placed in a system with only
one IO_APIC - causing the networking driver to not have the right
IRQ and the device not coming up.
Remove the dynamic allocation logic leftovers and simply return
NR_IRQS in probe_nr_irqs() for now.
Fixes: http://lkml.org/lkml/2008/11/19/354
Reported-by: Jesper Dangaard Brouer <hawk@diku.dk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Jesper Dangaard Brouer <hawk@diku.dk>
Acked-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/io_apic.c')
-rw-r--r-- | arch/x86/kernel/io_apic.c | 22 |
1 files changed, 1 insertions, 21 deletions
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index c9513e1ff28d..1fec0f9b1508 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c | |||
@@ -3608,27 +3608,7 @@ int __init io_apic_get_redir_entries (int ioapic) | |||
3608 | 3608 | ||
3609 | int __init probe_nr_irqs(void) | 3609 | int __init probe_nr_irqs(void) |
3610 | { | 3610 | { |
3611 | int idx; | 3611 | return NR_IRQS; |
3612 | int nr = 0; | ||
3613 | #ifndef CONFIG_XEN | ||
3614 | int nr_min = 32; | ||
3615 | #else | ||
3616 | int nr_min = NR_IRQS; | ||
3617 | #endif | ||
3618 | |||
3619 | for (idx = 0; idx < nr_ioapics; idx++) | ||
3620 | nr += io_apic_get_redir_entries(idx) + 1; | ||
3621 | |||
3622 | /* double it for hotplug and msi and nmi */ | ||
3623 | nr <<= 1; | ||
3624 | |||
3625 | /* something wrong ? */ | ||
3626 | if (nr < nr_min) | ||
3627 | nr = nr_min; | ||
3628 | if (WARN_ON(nr > NR_IRQS)) | ||
3629 | nr = NR_IRQS; | ||
3630 | |||
3631 | return nr; | ||
3632 | } | 3612 | } |
3633 | 3613 | ||
3634 | /* -------------------------------------------------------------------------- | 3614 | /* -------------------------------------------------------------------------- |