diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-11-21 11:16:48 -0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-23 11:59:52 +0100 |
commit | a1967d64414dab500e86cbbddf8eae6ad2047903 (patch) | |
tree | 301031e3ff5c9adbda6373a5ea2b4aae5e7400ea /arch/x86/kernel | |
parent | 57550b27ff5a13b00370fbfa34f2471c3456a41d (diff) | |
download | linux-a1967d64414dab500e86cbbddf8eae6ad2047903.tar.gz linux-a1967d64414dab500e86cbbddf8eae6ad2047903.tar.bz2 linux-a1967d64414dab500e86cbbddf8eae6ad2047903.zip |
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')
-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) int __init probe_nr_irqs(void) { - int idx; - int nr = 0; -#ifndef CONFIG_XEN - int nr_min = 32; -#else - int nr_min = NR_IRQS; -#endif - - for (idx = 0; idx < nr_ioapics; idx++) - nr += io_apic_get_redir_entries(idx) + 1; - - /* double it for hotplug and msi and nmi */ - nr <<= 1; - - /* something wrong ? */ - if (nr < nr_min) - nr = nr_min; - if (WARN_ON(nr > NR_IRQS)) - nr = NR_IRQS; - - return nr; + return NR_IRQS; } /* -------------------------------------------------------------------------- |