LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] x86: Don't allow nr_irqs > NR_IRQS
@ 2008-11-04 17:18 Ben Hutchings
2008-11-04 18:00 ` Cyrill Gorcunov
2008-11-05 12:04 ` [PATCH v2] " Ben Hutchings
0 siblings, 2 replies; 12+ messages in thread
From: Ben Hutchings @ 2008-11-04 17:18 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-kernel
On some systems probe_nr_irqs() can return a value larger than
NR_IRQS. This will lead to probe_irq_on() overrunning the irq_desc
array.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
arch/x86/kernel/io_apic.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
5 IOAPICs (!) and returns 240. Here are the log messages:
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
I think this has become possible since:
commit d6c88a507ef0b6afdb013cba4e7804ba7324d99a
Author: Thomas Gleixner <tglx@linutronix.de>
Date: Wed Oct 15 15:27:23 2008 +0200
genirq: revert dynarray
Revert the dynarray changes. They need more thought and polishing.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Ben.
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
index b764d74..c8482fb 100644
--- a/arch/x86/kernel/io_apic.c
+++ b/arch/x86/kernel/io_apic.c
@@ -3611,6 +3611,8 @@ int __init probe_nr_irqs(void)
/* something wrong ? */
if (nr < nr_min)
nr = nr_min;
+ if (nr > NR_IRQS)
+ nr = NR_IRQS;
return nr;
}
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] x86: Don't allow nr_irqs > NR_IRQS
2008-11-04 17:18 [PATCH] x86: Don't allow nr_irqs > NR_IRQS Ben Hutchings
@ 2008-11-04 18:00 ` Cyrill Gorcunov
2008-11-04 18:36 ` Ben Hutchings
2008-11-05 12:04 ` [PATCH v2] " Ben Hutchings
1 sibling, 1 reply; 12+ messages in thread
From: Cyrill Gorcunov @ 2008-11-04 18:00 UTC (permalink / raw)
To: Ben Hutchings; +Cc: Thomas Gleixner, linux-kernel, Yinghai Lu
[Ben Hutchings - Tue, Nov 04, 2008 at 05:18:22PM +0000]
| On some systems probe_nr_irqs() can return a value larger than
| NR_IRQS. This will lead to probe_irq_on() overrunning the irq_desc
| array.
|
| Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
| ---
| arch/x86/kernel/io_apic.c | 2 ++
| 1 files changed, 2 insertions(+), 0 deletions(-)
|
| I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
| Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
| 5 IOAPICs (!) and returns 240. Here are the log messages:
|
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
| Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
| Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
| Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
| Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
| Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
| Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
| Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
| Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
|
| I think this has become possible since:
|
| commit d6c88a507ef0b6afdb013cba4e7804ba7324d99a
| Author: Thomas Gleixner <tglx@linutronix.de>
| Date: Wed Oct 15 15:27:23 2008 +0200
|
| genirq: revert dynarray
|
| Revert the dynarray changes. They need more thought and polishing.
|
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
| Ben.
|
| diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
| index b764d74..c8482fb 100644
| --- a/arch/x86/kernel/io_apic.c
| +++ b/arch/x86/kernel/io_apic.c
| @@ -3611,6 +3611,8 @@ int __init probe_nr_irqs(void)
| /* something wrong ? */
| if (nr < nr_min)
| nr = nr_min;
| + if (nr > NR_IRQS)
| + nr = NR_IRQS;
|
| return nr;
| }
|
Hi Ben,
I don't think that is because of Thomas' commit. If we've got
number of pins larger then we expect it means something wrong
with our NR_IRQS. Is it possible to get your .config?
- Cyrill -
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86: Don't allow nr_irqs > NR_IRQS
2008-11-04 18:00 ` Cyrill Gorcunov
@ 2008-11-04 18:36 ` Ben Hutchings
2008-11-04 18:56 ` Yinghai Lu
2008-11-04 19:01 ` Cyrill Gorcunov
0 siblings, 2 replies; 12+ messages in thread
From: Ben Hutchings @ 2008-11-04 18:36 UTC (permalink / raw)
To: Cyrill Gorcunov; +Cc: Thomas Gleixner, linux-kernel, Yinghai Lu
On Tue, 2008-11-04 at 21:00 +0300, Cyrill Gorcunov wrote:
[...]
> | I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
> | Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
> | 5 IOAPICs (!) and returns 240. Here are the log messages:
> |
> | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
> | Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
> | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
> | Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
> | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
> | Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
> | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
> | Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
> | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
> | Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
> | Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
> | Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
> | Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
> |
> | I think this has become possible since:
> |
> | commit d6c88a507ef0b6afdb013cba4e7804ba7324d99a
> | Author: Thomas Gleixner <tglx@linutronix.de>
> | Date: Wed Oct 15 15:27:23 2008 +0200
> |
> | genirq: revert dynarray
> |
> | Revert the dynarray changes. They need more thought and polishing.
> |
> | Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
[...]
> Hi Ben,
>
> I don't think that is because of Thomas' commit. If we've got
> number of pins larger then we expect it means something wrong
> with our NR_IRQS. Is it possible to get your .config?
Well there must have been an earlier change that resulted in detecting 5
IOAPICs instead of just 1, but that presumably would work as long as the
irq_desc array was dynamically allocated. This reversion breaks that.
You don't really need to see the config; NR_IRQS is *always* 224 on
normal x86-32 systems.
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86: Don't allow nr_irqs > NR_IRQS
2008-11-04 18:36 ` Ben Hutchings
@ 2008-11-04 18:56 ` Yinghai Lu
2008-11-04 19:01 ` Cyrill Gorcunov
1 sibling, 0 replies; 12+ messages in thread
From: Yinghai Lu @ 2008-11-04 18:56 UTC (permalink / raw)
To: Ben Hutchings; +Cc: Cyrill Gorcunov, Thomas Gleixner, linux-kernel
On Tue, Nov 4, 2008 at 10:36 AM, Ben Hutchings
<bhutchings@solarflare.com> wrote:
> On Tue, 2008-11-04 at 21:00 +0300, Cyrill Gorcunov wrote:
> [...]
>> | I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
>> | Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
>> | 5 IOAPICs (!) and returns 240. Here are the log messages:
>> |
>
> Well there must have been an earlier change that resulted in detecting 5
> IOAPICs instead of just 1, but that presumably would work as long as the
> irq_desc array was dynamically allocated. This reversion breaks that.
>
> You don't really need to see the config; NR_IRQS is *always* 224 on
> normal x86-32 systems.
>
Yes. it should the same as setting to 64bit. we will cost some extra ram...
We can not make sparseirq/dyn_array to 2.6.28..., maybe 2.6.29 later.
Ingo,
Maybe we can put back dyn_array at first, that will still be 1:1
mapping..., and not waste memory..
YH
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86: Don't allow nr_irqs > NR_IRQS
2008-11-04 18:36 ` Ben Hutchings
2008-11-04 18:56 ` Yinghai Lu
@ 2008-11-04 19:01 ` Cyrill Gorcunov
[not found] ` <1225825559.3074.26.camel@achroite>
1 sibling, 1 reply; 12+ messages in thread
From: Cyrill Gorcunov @ 2008-11-04 19:01 UTC (permalink / raw)
To: Ben Hutchings; +Cc: Thomas Gleixner, linux-kernel, Yinghai Lu
[Ben Hutchings - Tue, Nov 04, 2008 at 06:36:47PM +0000]
| On Tue, 2008-11-04 at 21:00 +0300, Cyrill Gorcunov wrote:
| [...]
| > | I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
| > | Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
| > | 5 IOAPICs (!) and returns 240. Here are the log messages:
| > |
| > | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
| > | Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
| > | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
| > | Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
| > | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
| > | Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
| > | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
| > | Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
| > | Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
| > | Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
| > | Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
| > | Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
| > | Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
| > |
| > | I think this has become possible since:
| > |
| > | commit d6c88a507ef0b6afdb013cba4e7804ba7324d99a
| > | Author: Thomas Gleixner <tglx@linutronix.de>
| > | Date: Wed Oct 15 15:27:23 2008 +0200
| > |
| > | genirq: revert dynarray
| > |
| > | Revert the dynarray changes. They need more thought and polishing.
| > |
| > | Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
| [...]
| > Hi Ben,
| >
| > I don't think that is because of Thomas' commit. If we've got
| > number of pins larger then we expect it means something wrong
| > with our NR_IRQS. Is it possible to get your .config?
|
| Well there must have been an earlier change that resulted in detecting 5
| IOAPICs instead of just 1, but that presumably would work as long as the
| irq_desc array was dynamically allocated. This reversion breaks that.
Hmm... wich means the problem in area of detecting IOAPICs but this number
we got from ACPI... have to check.
|
| You don't really need to see the config; NR_IRQS is *always* 224 on
| normal x86-32 systems.
Ben, how could I know that you're using 32bit version, unfortunately
I don't recite in my mind "NR_IRQS is 224 on x86-32" every minute :)
|
| Ben.
|
| --
| Ben Hutchings, Senior Software Engineer, Solarflare Communications
| Not speaking for my employer; that's the marketing department's job.
| They asked us to note that Solarflare product names are trademarked.
|
- Cyrill -
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86: Don't allow nr_irqs > NR_IRQS
[not found] ` <20081104194606.GJ21470@localhost>
@ 2008-11-04 21:31 ` Ben Hutchings
0 siblings, 0 replies; 12+ messages in thread
From: Ben Hutchings @ 2008-11-04 21:31 UTC (permalink / raw)
To: Cyrill Gorcunov; +Cc: Thomas Gleixner, linux-kernel, Yinghai Lu
On Tue, 2008-11-04 at 22:46 +0300, Cyrill Gorcunov wrote:
[...]
> Ben, I'll take a look on ACPI code tomorrow. If I understand you
> correctly your Xeon machine has a few cores and only one IO-APIC
> (on physical side)? Am I right?
It has 2 single-core processors (family 15 model 4). Here's the lspci
output:
00:00.0 Host bridge: Intel Corporation E7520 Memory Controller Hub (rev 0c)
00:00.1 Class ff00: Intel Corporation E7525/E7520 Error Reporting Registers (rev 0c)
00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 0c)
00:03.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A1 (rev 0c)
00:04.0 PCI bridge: Intel Corporation E7525/E7520 PCI Express Port B (rev 0c)
00:06.0 PCI bridge: Intel Corporation E7520 PCI Express Port C (rev 0c)
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c2)
00:1f.0 ISA bridge: Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801EB/ER (ICH5/ICH5R) SMBus Controller (rev 02)
02:00.0 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge A (rev 09)
02:00.1 PIC: Intel Corporation 6700/6702PXH I/OxAPIC Interrupt Controller A (rev 09)
02:00.2 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge B (rev 09)
02:00.3 PIC: Intel Corporation 6700PXH I/OxAPIC Interrupt Controller B (rev 09)
04:02.0 Ethernet controller: Intel Corporation 82546GB Gigabit Ethernet Controller (rev 03)
04:02.1 Ethernet controller: Intel Corporation 82546GB Gigabit Ethernet Controller (rev 03)
05:00.0 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge A (rev 09)
05:00.1 PIC: Intel Corporation 6700/6702PXH I/OxAPIC Interrupt Controller A (rev 09)
05:00.2 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge B (rev 09)
05:00.3 PIC: Intel Corporation 6700PXH I/OxAPIC Interrupt Controller B (rev 09)
07:02.0 FireWire (IEEE 1394): Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
08:00.0 Ethernet controller: Solarflare Communications SFC4000 rev B [Solarstorm] (rev 02)
09:01.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27)
I see 4 PICs there; no idea where the 5th is hiding.
I switched to an RHEL 5 (2.6.18-53) kernel and found that that also
detects 5 IOAPICs, so there's no recent change in that.
This is the commit that made nr_irqs dynamic:
commit 71f521bbaf375b685aeea20c6b0ed8600cd6edfe
Author: Yinghai Lu <yhlu.kernel@gmail.com>
Date: Tue Aug 19 20:50:03 2008 -0700
x86, irq: get nr_irqs from madt
Until now, NR_IRQS was derived from black magic defines that had to
be "large enough" to both accomodate NR_CPUS and MAX_NR_IO_APICs.
This resulted in a way too large irq_desc[] array on most x86 systems.
Especially with larger CPU masks, the size of irq_desc can spiral out
of control quickly.
So be smarter about it and use precise allocation instead: determine the
default maximum possible IRQ number from the ACPI MADT. Use a minimum limit
of at least 32 IRQs for broken BIOSes.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
That was fine at the time because the irq_desc array was allocated
dynamically. But now that irq_desc has been reverted to a static array,
the probe function needs to apply the upper limit. Alternately nr_irqs
could be set to NR_IRQS unconditionally; the probing for nr_irqs is
fairly pointless if it isn't used for dynamic allocation.
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-04 17:18 [PATCH] x86: Don't allow nr_irqs > NR_IRQS Ben Hutchings
2008-11-04 18:00 ` Cyrill Gorcunov
@ 2008-11-05 12:04 ` Ben Hutchings
2008-11-05 19:11 ` Cyrill Gorcunov
2008-11-06 6:24 ` Ingo Molnar
1 sibling, 2 replies; 12+ messages in thread
From: Ben Hutchings @ 2008-11-05 12:04 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Cyrill Gorcunov, Yinghai Lu, linux-kernel
On some systems probe_nr_irqs() can return a value larger than
NR_IRQS. This will lead to probe_irq_on() overrunning the irq_desc
array.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
arch/x86/kernel/io_apic.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
5 IOAPICs and returns 240. Here are the log messages:
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
I have added a WARN_ON() as suggested by Yinghai Lu.
Ben.
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
--- a/arch/x86/kernel/io_apic.c
+++ b/arch/x86/kernel/io_apic.c
@@ -3611,6 +3611,8 @@ int __init probe_nr_irqs(void)
/* something wrong ? */
if (nr < nr_min)
nr = nr_min;
+ if (WARN_ON(nr > NR_IRQS))
+ nr = NR_IRQS;
return nr;
}
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-05 12:04 ` [PATCH v2] " Ben Hutchings
@ 2008-11-05 19:11 ` Cyrill Gorcunov
2008-11-05 19:15 ` Ben Hutchings
2008-11-06 6:24 ` Ingo Molnar
1 sibling, 1 reply; 12+ messages in thread
From: Cyrill Gorcunov @ 2008-11-05 19:11 UTC (permalink / raw)
To: Ben Hutchings
Cc: Thomas Gleixner, Yinghai Lu, linux-kernel, Ingo Molnar, H. Peter Anvin
[Ben Hutchings - Wed, Nov 05, 2008 at 12:04:46PM +0000]
| On some systems probe_nr_irqs() can return a value larger than
| NR_IRQS. This will lead to probe_irq_on() overrunning the irq_desc
| array.
|
| Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
| ---
| arch/x86/kernel/io_apic.c | 2 ++
| 1 files changed, 2 insertions(+), 0 deletions(-)
|
| I hit this when running net-next-2.6 (close to 2.6.28-rc3) on a
| Supermicro dual Xeon system. NR_IRQS is 224 but probe_nr_irqs() detects
| 5 IOAPICs and returns 240. Here are the log messages:
|
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
| Tue Nov 4 16:53:47 2008 IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x02] address[0xfec81000] gsi_base[24])
| Tue Nov 4 16:53:47 2008 IOAPIC[1]: apic_id 2, version 32, address 0xfec81000, GSI 24-47
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x03] address[0xfec81400] gsi_base[48])
| Tue Nov 4 16:53:47 2008 IOAPIC[2]: apic_id 3, version 32, address 0xfec81400, GSI 48-71
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x04] address[0xfec82000] gsi_base[72])
| Tue Nov 4 16:53:47 2008 IOAPIC[3]: apic_id 4, version 32, address 0xfec82000, GSI 72-95
| Tue Nov 4 16:53:47 2008 ACPI: IOAPIC (id[0x05] address[0xfec82400] gsi_base[96])
| Tue Nov 4 16:53:47 2008 IOAPIC[4]: apic_id 5, version 32, address 0xfec82400, GSI 96-119
| Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
| Tue Nov 4 16:53:47 2008 ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
| Tue Nov 4 16:53:47 2008 Enabling APIC mode: Flat. Using 5 I/O APICs
|
| I have added a WARN_ON() as suggested by Yinghai Lu.
|
| Ben.
|
| diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
| --- a/arch/x86/kernel/io_apic.c
| +++ b/arch/x86/kernel/io_apic.c
| @@ -3611,6 +3611,8 @@ int __init probe_nr_irqs(void)
| /* something wrong ? */
| if (nr < nr_min)
| nr = nr_min;
| + if (WARN_ON(nr > NR_IRQS))
| + nr = NR_IRQS;
|
| return nr;
| }
|
| --
| Ben Hutchings, Senior Software Engineer, Solarflare Communications
| Not speaking for my employer; that's the marketing department's job.
| They asked us to note that Solarflare product names are trademarked.
|
My Ack if you need it, Ingo CC'ed
Acked-by: Cyrill Gorcunov <gorcunov@gmail.com>
---
Ben I didn't manage to get a look over ACPI related changes
(ie to find the reason why the kernel is able to reveal 5 IO-APICs
now but this patch is needed anyway as Yinghai already mentioned
and should solve your problem. FWIW, I don't see neither apics on
my laptop by lspci except that ICH is notified so I suspect the
ACPI parsing is right)
- Cyrill -
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-05 19:11 ` Cyrill Gorcunov
@ 2008-11-05 19:15 ` Ben Hutchings
2008-11-05 19:26 ` Cyrill Gorcunov
2008-11-06 9:03 ` Ingo Molnar
0 siblings, 2 replies; 12+ messages in thread
From: Ben Hutchings @ 2008-11-05 19:15 UTC (permalink / raw)
To: Cyrill Gorcunov
Cc: Thomas Gleixner, Yinghai Lu, linux-kernel, Ingo Molnar, H. Peter Anvin
On Wed, 2008-11-05 at 22:11 +0300, Cyrill Gorcunov wrote:
[...]
> Ben I didn't manage to get a look over ACPI related changes
> (ie to find the reason why the kernel is able to reveal 5 IO-APICs
> now
[...]
I was mistaken; that *isn't* a recent change. A default RHEL 5 kernel
(based on 2.6.18) also finds 5 IOAPICs.
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-05 19:15 ` Ben Hutchings
@ 2008-11-05 19:26 ` Cyrill Gorcunov
2008-11-06 9:03 ` Ingo Molnar
1 sibling, 0 replies; 12+ messages in thread
From: Cyrill Gorcunov @ 2008-11-05 19:26 UTC (permalink / raw)
To: Ben Hutchings
Cc: Thomas Gleixner, Yinghai Lu, linux-kernel, Ingo Molnar, H. Peter Anvin
[Ben Hutchings - Wed, Nov 05, 2008 at 07:15:31PM +0000]
| On Wed, 2008-11-05 at 22:11 +0300, Cyrill Gorcunov wrote:
| [...]
| > Ben I didn't manage to get a look over ACPI related changes
| > (ie to find the reason why the kernel is able to reveal 5 IO-APICs
| > now
| [...]
|
| I was mistaken; that *isn't* a recent change. A default RHEL 5 kernel
| (based on 2.6.18) also finds 5 IOAPICs.
|
| Ben.
|
So, these io-apics was there for a long time :) and recent dyn-irq
tricks just bared the problem of NR_IRQS for which Yinghai already
sent a patch. Lets wait until they're merged.
- Cyrill -
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-05 12:04 ` [PATCH v2] " Ben Hutchings
2008-11-05 19:11 ` Cyrill Gorcunov
@ 2008-11-06 6:24 ` Ingo Molnar
1 sibling, 0 replies; 12+ messages in thread
From: Ingo Molnar @ 2008-11-06 6:24 UTC (permalink / raw)
To: Ben Hutchings; +Cc: Thomas Gleixner, Cyrill Gorcunov, Yinghai Lu, linux-kernel
* Ben Hutchings <bhutchings@solarflare.com> wrote:
> On some systems probe_nr_irqs() can return a value larger than
> NR_IRQS. This will lead to probe_irq_on() overrunning the irq_desc
> array.
>
> Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
> I hit this when running net-next-2.6 (close to
> 2.6.28-rc3) on a Supermicro dual Xeon system. NR_IRQS is 224 but
> probe_nr_irqs() detects 5 IOAPICs and returns 240. Here are the log
> messages:
applied to tip/x86/urgent, thanks Ben!
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86: Don't allow nr_irqs > NR_IRQS
2008-11-05 19:15 ` Ben Hutchings
2008-11-05 19:26 ` Cyrill Gorcunov
@ 2008-11-06 9:03 ` Ingo Molnar
1 sibling, 0 replies; 12+ messages in thread
From: Ingo Molnar @ 2008-11-06 9:03 UTC (permalink / raw)
To: Ben Hutchings
Cc: Cyrill Gorcunov, Thomas Gleixner, Yinghai Lu, linux-kernel,
H. Peter Anvin
* Ben Hutchings <bhutchings@solarflare.com> wrote:
> On Wed, 2008-11-05 at 22:11 +0300, Cyrill Gorcunov wrote:
> [...]
> > Ben I didn't manage to get a look over ACPI related changes
> > (ie to find the reason why the kernel is able to reveal 5 IO-APICs
> > now
> [...]
>
> I was mistaken; that *isn't* a recent change. A default RHEL 5
> kernel (based on 2.6.18) also finds 5 IOAPICs.
yes - it's simply a box with a lot of IO-APICs. That's not bad at all,
it spreads out IRQ processing amongst devices.
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-11-06 9:03 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-11-04 17:18 [PATCH] x86: Don't allow nr_irqs > NR_IRQS Ben Hutchings
2008-11-04 18:00 ` Cyrill Gorcunov
2008-11-04 18:36 ` Ben Hutchings
2008-11-04 18:56 ` Yinghai Lu
2008-11-04 19:01 ` Cyrill Gorcunov
[not found] ` <1225825559.3074.26.camel@achroite>
[not found] ` <20081104194606.GJ21470@localhost>
2008-11-04 21:31 ` Ben Hutchings
2008-11-05 12:04 ` [PATCH v2] " Ben Hutchings
2008-11-05 19:11 ` Cyrill Gorcunov
2008-11-05 19:15 ` Ben Hutchings
2008-11-05 19:26 ` Cyrill Gorcunov
2008-11-06 9:03 ` Ingo Molnar
2008-11-06 6:24 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).