* Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3
@ 2006-10-08 7:02 Martin J. Bligh
2006-10-08 7:49 ` Andrew Morton
2006-10-09 17:19 ` Badari Pulavarty
0 siblings, 2 replies; 10+ messages in thread
From: Martin J. Bligh @ 2006-10-08 7:02 UTC (permalink / raw)
To: Andrew Morton
Cc: Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman
Not sure if you've seen this already ... catching up on test results.
This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this
problem.
Full logs:
mm2 - http://test.kernel.org/abat/50727/debug/console.log
mm3 - http://test.kernel.org/abat/51442/debug/console.log
config - http://test.kernel.org/abat/51442/build/dotconfig
I'm guessing from the 00000004 that the pcibus_to_node(dev->bus)
is failing because bus->sysdata is NULL. The disassembly and
structure offsets seem to line up for that.
#define pcibus_to_node(bus) (
(struct pci_sysdata *)((bus)->sysdata))->node
struct pci_sysdata {
int domain; /* PCI domain */
int node; /* NUMA node */
};
BUG: unable to handle kernel NULL pointer dereference at virtual address
00000004
printing eip:
c02060d4
*pde = 0042c001
*pte = 00000000
Oops: 0000 [#1]
SMP
last sysfs file:
Modules linked in:
CPU: 2
EIP: 0060:[<c02060d4>] Not tainted VLI
EFLAGS: 00010286 (2.6.18-mm2-autokern1 #1)
EIP is at pci_call_probe+0x19/0xb5
eax: 00000000 ebx: e778b400 ecx: e7400030 edx: c03b89a0
esi: e778b400 edi: 0000ffff ebp: e69a2fa0 esp: e740dea4
ds: 007b es: 007b ss: 0068
Process swapper (pid: 1, ti=e740c000 task=e7400030 task.ti=e740c000)
Stack: ffffffed e778b400 c03b89a0 c02061a3 c03b89a0 e778b400 c03b873c
c03b89a0
e778b400 c03b89d4 c02061d6 c03b89a0 e778b400 e778b400 c03b89d4
e778b448
c0224800 e778b448 c03b89d4 e778b448 00000000 c03b89d4 c0224936
e69a2fa0
Call Trace:
[<c02061a3>] __pci_device_probe+0x33/0x47
[<c02061d6>] pci_device_probe+0x1f/0x34
[<c0224800>] really_probe+0x31/0xb9
[<c0224936>] driver_probe_device+0x93/0x9c
[<c02249b5>] __driver_attach+0x0/0x7c
[<c02249fc>] __driver_attach+0x47/0x7c
[<c0223e98>] bus_for_each_dev+0x47/0x6d
[<c01fd05a>] kobject_add+0xa9/0xf2
[<c0224a45>] driver_attach+0x14/0x18
[<c02249b5>] __driver_attach+0x0/0x7c
[<c022437b>] bus_add_driver+0x53/0xd0
[<c0224d99>] driver_register+0x74/0x77
[<c02063ea>] __pci_register_driver+0x6b/0x7a
[<c04146c3>] qla1280_init+0xc/0xf
[<c04007ff>] do_initcalls+0x55/0xe8
[<c0184095>] proc_mkdir+0x12/0x16
[<c0135136>] init_irq_proc+0x21/0x2f
[<c01003b8>] init+0x0/0x148
[<c010040d>] init+0x55/0x148
[<c01033c7>] kernel_thread_helper+0x7/0x10
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-08 7:02 Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 Martin J. Bligh @ 2006-10-08 7:49 ` Andrew Morton 2006-10-09 17:19 ` Badari Pulavarty 1 sibling, 0 replies; 10+ messages in thread From: Andrew Morton @ 2006-10-08 7:49 UTC (permalink / raw) To: Martin J. Bligh Cc: Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman On Sun, 08 Oct 2006 00:02:07 -0700 "Martin J. Bligh" <mbligh@mbligh.org> wrote: > Not sure if you've seen this already ... catching up on test results. Nope. > This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this > problem. > > Full logs: > > mm2 - http://test.kernel.org/abat/50727/debug/console.log > mm3 - http://test.kernel.org/abat/51442/debug/console.log > > config - http://test.kernel.org/abat/51442/build/dotconfig > > I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) > is failing because bus->sysdata is NULL. The disassembly and > structure offsets seem to line up for that. > > #define pcibus_to_node(bus) ( > (struct pci_sysdata *)((bus)->sysdata))->node > > struct pci_sysdata { > int domain; /* PCI domain */ > int node; /* NUMA node */ > }; > > > BUG: unable to handle kernel NULL pointer dereference at virtual address > 00000004 I don't see anything in the mm1->mm2 additions which might have caused this. Don't know, sorry. Bisection time? > printing eip: > c02060d4 > *pde = 0042c001 > *pte = 00000000 > Oops: 0000 [#1] > SMP > last sysfs file: > Modules linked in: > CPU: 2 > EIP: 0060:[<c02060d4>] Not tainted VLI > EFLAGS: 00010286 (2.6.18-mm2-autokern1 #1) > EIP is at pci_call_probe+0x19/0xb5 > eax: 00000000 ebx: e778b400 ecx: e7400030 edx: c03b89a0 > esi: e778b400 edi: 0000ffff ebp: e69a2fa0 esp: e740dea4 > ds: 007b es: 007b ss: 0068 > Process swapper (pid: 1, ti=e740c000 task=e7400030 task.ti=e740c000) > Stack: ffffffed e778b400 c03b89a0 c02061a3 c03b89a0 e778b400 c03b873c > c03b89a0 > e778b400 c03b89d4 c02061d6 c03b89a0 e778b400 e778b400 c03b89d4 > e778b448 > c0224800 e778b448 c03b89d4 e778b448 00000000 c03b89d4 c0224936 > e69a2fa0 > Call Trace: > [<c02061a3>] __pci_device_probe+0x33/0x47 > [<c02061d6>] pci_device_probe+0x1f/0x34 > [<c0224800>] really_probe+0x31/0xb9 > [<c0224936>] driver_probe_device+0x93/0x9c > [<c02249b5>] __driver_attach+0x0/0x7c > [<c02249fc>] __driver_attach+0x47/0x7c > [<c0223e98>] bus_for_each_dev+0x47/0x6d > [<c01fd05a>] kobject_add+0xa9/0xf2 > [<c0224a45>] driver_attach+0x14/0x18 > [<c02249b5>] __driver_attach+0x0/0x7c > [<c022437b>] bus_add_driver+0x53/0xd0 > [<c0224d99>] driver_register+0x74/0x77 > [<c02063ea>] __pci_register_driver+0x6b/0x7a > [<c04146c3>] qla1280_init+0xc/0xf > [<c04007ff>] do_initcalls+0x55/0xe8 > [<c0184095>] proc_mkdir+0x12/0x16 > [<c0135136>] init_irq_proc+0x21/0x2f > [<c01003b8>] init+0x0/0x148 > [<c010040d>] init+0x55/0x148 > [<c01033c7>] kernel_thread_helper+0x7/0x10 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-08 7:02 Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 Martin J. Bligh 2006-10-08 7:49 ` Andrew Morton @ 2006-10-09 17:19 ` Badari Pulavarty 2006-10-09 17:24 ` Martin Bligh 1 sibling, 1 reply; 10+ messages in thread From: Badari Pulavarty @ 2006-10-09 17:19 UTC (permalink / raw) To: Martin J. Bligh, jgarzik Cc: Andrew Morton, Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman, sukadev On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: > Not sure if you've seen this already ... catching up on test results. > > This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this > problem. > > Full logs: > > mm2 - http://test.kernel.org/abat/50727/debug/console.log > mm3 - http://test.kernel.org/abat/51442/debug/console.log > > config - http://test.kernel.org/abat/51442/build/dotconfig > > I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) > is failing because bus->sysdata is NULL. The disassembly and > structure offsets seem to line up for that. > > #define pcibus_to_node(bus) ( > (struct pci_sysdata *)((bus)->sysdata))->node > > struct pci_sysdata { > int domain; /* PCI domain */ > int node; /* NUMA node */ > }; > Martin, Jeff moved "node" to a proper field in sysdata, instead of overloading sysdata itself. I think this is causing the problem. I guess we could end up with sysdata = NULL in some cases ? Since you are the NUMA-Q expert, where does sysdata gets set for NUMA-Q ? :) -mm2 changed: #define pcibus_to_node(bus) ((long) (bus)->sysdata) to #define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- >node Thanks, Badari > BUG: unable to handle kernel NULL pointer dereference at virtual address > 00000004 > printing eip: > c02060d4 > *pde = 0042c001 > *pte = 00000000 > Oops: 0000 [#1] > SMP > last sysfs file: > Modules linked in: > CPU: 2 > EIP: 0060:[<c02060d4>] Not tainted VLI > EFLAGS: 00010286 (2.6.18-mm2-autokern1 #1) > EIP is at pci_call_probe+0x19/0xb5 > eax: 00000000 ebx: e778b400 ecx: e7400030 edx: c03b89a0 > esi: e778b400 edi: 0000ffff ebp: e69a2fa0 esp: e740dea4 > ds: 007b es: 007b ss: 0068 > Process swapper (pid: 1, ti=e740c000 task=e7400030 task.ti=e740c000) > Stack: ffffffed e778b400 c03b89a0 c02061a3 c03b89a0 e778b400 c03b873c > c03b89a0 > e778b400 c03b89d4 c02061d6 c03b89a0 e778b400 e778b400 c03b89d4 > e778b448 > c0224800 e778b448 c03b89d4 e778b448 00000000 c03b89d4 c0224936 > e69a2fa0 > Call Trace: > [<c02061a3>] __pci_device_probe+0x33/0x47 > [<c02061d6>] pci_device_probe+0x1f/0x34 > [<c0224800>] really_probe+0x31/0xb9 > [<c0224936>] driver_probe_device+0x93/0x9c > [<c02249b5>] __driver_attach+0x0/0x7c > [<c02249fc>] __driver_attach+0x47/0x7c > [<c0223e98>] bus_for_each_dev+0x47/0x6d > [<c01fd05a>] kobject_add+0xa9/0xf2 > [<c0224a45>] driver_attach+0x14/0x18 > [<c02249b5>] __driver_attach+0x0/0x7c > [<c022437b>] bus_add_driver+0x53/0xd0 > [<c0224d99>] driver_register+0x74/0x77 > [<c02063ea>] __pci_register_driver+0x6b/0x7a > [<c04146c3>] qla1280_init+0xc/0xf > [<c04007ff>] do_initcalls+0x55/0xe8 > [<c0184095>] proc_mkdir+0x12/0x16 > [<c0135136>] init_irq_proc+0x21/0x2f > [<c01003b8>] init+0x0/0x148 > [<c010040d>] init+0x55/0x148 > [<c01033c7>] kernel_thread_helper+0x7/0x10 > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-09 17:19 ` Badari Pulavarty @ 2006-10-09 17:24 ` Martin Bligh 2006-10-09 17:34 ` Jeff Garzik 2006-10-20 17:07 ` Andy Whitcroft 0 siblings, 2 replies; 10+ messages in thread From: Martin Bligh @ 2006-10-09 17:24 UTC (permalink / raw) To: Badari Pulavarty Cc: jgarzik, Andrew Morton, Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman, sukadev Badari Pulavarty wrote: > On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: > >>Not sure if you've seen this already ... catching up on test results. >> >>This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this >>problem. >> >>Full logs: >> >>mm2 - http://test.kernel.org/abat/50727/debug/console.log >>mm3 - http://test.kernel.org/abat/51442/debug/console.log >> >>config - http://test.kernel.org/abat/51442/build/dotconfig >> >>I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) >>is failing because bus->sysdata is NULL. The disassembly and >>structure offsets seem to line up for that. >> >>#define pcibus_to_node(bus) ( >> (struct pci_sysdata *)((bus)->sysdata))->node >> >>struct pci_sysdata { >> int domain; /* PCI domain */ >> int node; /* NUMA node */ >>}; >> > > > Martin, > > Jeff moved "node" to a proper field in sysdata, instead > of overloading sysdata itself. I think this is causing the > problem. I guess we could end up with sysdata = NULL in some > cases ? Since you are the NUMA-Q expert, where does sysdata > gets set for NUMA-Q ? :) > > -mm2 changed: > > #define pcibus_to_node(bus) ((long) (bus)->sysdata) > > to > > #define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- > >>node Buggered if I know, that's some strange pci thing ;-) But can we revert whatever patch that was until it gets fixed, please? Thanks, M. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-09 17:24 ` Martin Bligh @ 2006-10-09 17:34 ` Jeff Garzik 2006-10-09 18:46 ` Sukadev Bhattiprolu 2006-10-20 17:07 ` Andy Whitcroft 1 sibling, 1 reply; 10+ messages in thread From: Jeff Garzik @ 2006-10-09 17:34 UTC (permalink / raw) To: Martin Bligh Cc: Badari Pulavarty, Andrew Morton, Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman, sukadev Martin Bligh wrote: > Badari Pulavarty wrote: >> On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: >> >>> Not sure if you've seen this already ... catching up on test results. >>> >>> This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this >>> problem. >>> >>> Full logs: >>> >>> mm2 - http://test.kernel.org/abat/50727/debug/console.log >>> mm3 - http://test.kernel.org/abat/51442/debug/console.log >>> >>> config - http://test.kernel.org/abat/51442/build/dotconfig >>> >>> I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) >>> is failing because bus->sysdata is NULL. The disassembly and >>> structure offsets seem to line up for that. >>> >>> #define pcibus_to_node(bus) ( >>> (struct pci_sysdata *)((bus)->sysdata))->node >>> >>> struct pci_sysdata { >>> int domain; /* PCI domain */ >>> int node; /* NUMA node */ >>> }; >>> >> >> >> Martin, >> >> Jeff moved "node" to a proper field in sysdata, instead >> of overloading sysdata itself. I think this is causing the >> problem. I guess we could end up with sysdata = NULL in some >> cases ? Since you are the NUMA-Q expert, where does sysdata gets set >> for NUMA-Q ? :) >> >> -mm2 changed: >> >> #define pcibus_to_node(bus) ((long) (bus)->sysdata) >> >> to >> #define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- >> >>> node > > Buggered if I know, that's some strange pci thing ;-) > > But can we revert whatever patch that was until it gets fixed, please? It needs to get fixed, otherwise whose buses of PCI devices disappear on some machines. Can you turn on PCI debugging? Jeff ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-09 17:34 ` Jeff Garzik @ 2006-10-09 18:46 ` Sukadev Bhattiprolu 0 siblings, 0 replies; 10+ messages in thread From: Sukadev Bhattiprolu @ 2006-10-09 18:46 UTC (permalink / raw) To: Jeff Garzik Cc: Martin Bligh, Badari Pulavarty, Andrew Morton, Andy Whitcroft, Linux Kernel Mailing List, Greg Kroah-Hartman [-- Attachment #1: Type: text/plain, Size: 5140 bytes --] Jeff Garzik [jgarzik@pobox.com] wrote: | Martin Bligh wrote: | >Badari Pulavarty wrote: | >>On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: | >> | >>>Not sure if you've seen this already ... catching up on test results. | >>> | >>>This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this | >>>problem. | >>> | >>>Full logs: | >>> | >>>mm2 - http://test.kernel.org/abat/50727/debug/console.log | >>>mm3 - http://test.kernel.org/abat/51442/debug/console.log | >>> | >>>config - http://test.kernel.org/abat/51442/build/dotconfig | >>> | >>>I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) | >>>is failing because bus->sysdata is NULL. The disassembly and | >>>structure offsets seem to line up for that. | >>> | >>>#define pcibus_to_node(bus) ( | >>> (struct pci_sysdata *)((bus)->sysdata))->node | >>> | >>>struct pci_sysdata { | >>> int domain; /* PCI domain */ | >>> int node; /* NUMA node */ | >>>}; | >>> | >> | >> | >>Martin, | >> | >>Jeff moved "node" to a proper field in sysdata, instead | >>of overloading sysdata itself. I think this is causing the | >>problem. I guess we could end up with sysdata = NULL in some | >>cases ? Since you are the NUMA-Q expert, where does sysdata gets set | >>for NUMA-Q ? :) | >> | >>-mm2 changed: | >> | >>#define pcibus_to_node(bus) ((long) (bus)->sysdata) | >> | >>to | >>#define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- | >> | >>>node | > | >Buggered if I know, that's some strange pci thing ;-) | > | >But can we revert whatever patch that was until it gets fixed, please? | | It needs to get fixed, otherwise whose buses of PCI devices disappear on | some machines. | | Can you turn on PCI debugging? | | Jeff I turned on CONFIG_PCI_DEBUG. already had CONFIG_KERNEL_DEBUG and CONFIG_DEBUG_INFO. Booted with "debug" parameter. Here are the last few messages. Complete dmesg attached. Let me know if there are other config tokens or boot options that may provide more info. Suka --- PCI: Calling quirk c024da00 for 0000:00:0a.0 PCI: Calling quirk c031ce30 for 0000:00:0a.0 PCI: Calling quirk c024da00 for 0000:00:0b.0 PCI: Calling quirk c031ce30 for 0000:00:0b.0 PCI: Calling quirk c024da00 for 0000:00:0e.0 PCI: Calling quirk c031ce30 for 0000:00:0e.0 PCI: Calling quirk c024da00 for 0000:00:0e.1 PCI: Calling quirk c031ce30 for 0000:00:0e.1 PCI: Calling quirk c024da00 for 0000:00:0e.2 PCI: Calling quirk c031ce30 for 0000:00:0e.2 PCI: Calling quirk c024da00 for 0000:00:0e.3 PCI: Calling quirk c031ce30 for 0000:00:0e.3 PCI: Calling quirk c024da00 for 0000:00:10.0 PCI: Calling quirk c031ce30 for 0000:00:10.0 PCI: Calling quirk c024da00 for 0000:00:12.0 PCI: Calling quirk c05093b0 for 0000:00:12.0 PCI: Calling quirk c031ce30 for 0000:00:12.0 PCI: Calling quirk c024da00 for 0000:00:14.0 PCI: Calling quirk c05093b0 for 0000:00:14.0 PCI: Calling quirk c031ce30 for 0000:00:14.0 PCI: Calling quirk c024da00 for 0000:01:0c.0 PCI: Calling quirk c031ce30 for 0000:01:0c.0 Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A loop: loaded (max 8 devices) Intel(R) PRO/1000 Network Driver - version 7.2.9-k2 Copyright (c) 1999-2006 Intel Corporation. BUG: unable to handle kernel NULL pointer dereference at virtual address 00000004 printing eip: c024e92c *pde = 00529001 *pte = 00000000 Oops: 0000 [#1] SMP last sysfs file: Modules linked in: CPU: 0 EIP: 0060:[<c024e92c>] Not tainted VLI EFLAGS: 00010286 (2.6.18-mm3 #3) EIP is at pci_call_probe+0x1c/0xe0 eax: 00000000 ebx: dfe63c00 ecx: c10fca90 edx: c048ad60 esi: dfe63c00 edi: 0000000f ebp: dfc3fd00 esp: c10ffe70 ds: 007b es: 007b ss: 0068 Process swapper (pid: 1, ti=c10fe000 task=c10fca90 task.ti=c10fe000) Stack: dfe63c00 ffffffed ffffffed dfe63c00 c048b1c0 c024ea55 c048b1c0 dfe63c00 c048ad60 c048b1c0 dfe63c00 c048b1f4 c024ea9f c048b1c0 dfe63c00 dfe63c48 dfc3fd00 c02761f9 dfe63c48 00000286 dfff9060 000000d0 c048b1f4 dfc3fd00 Call Trace: [<c024ea55>] __pci_device_probe+0x65/0x80 [<c024ea9f>] pci_device_probe+0x2f/0x50 [<c02761f9>] really_probe+0xf9/0x100 [<c02762e8>] driver_probe_device+0xc8/0xe0 [<c03ae92d>] klist_next+0x5d/0xa0 [<c02763a0>] __driver_attach+0x0/0xa0 [<c0276430>] __driver_attach+0x90/0xa0 [<c0275409>] bus_for_each_dev+0x69/0x80 [<c0276465>] driver_attach+0x25/0x30 [<c02763a0>] __driver_attach+0x0/0xa0 [<c0275ad3>] bus_add_driver+0x73/0x140 [<c024edc4>] __pci_register_driver+0x74/0x90 [<c050c6f9>] tulip_init+0x29/0x30 [<c04f2a62>] do_initcalls+0x42/0x140 [<c01433eb>] register_irq_proc+0xab/0xd0 [<c01003f0>] init+0x0/0x1a0 [<c0143479>] init_irq_proc+0x39/0x50 [<c01003f0>] init+0x0/0x1a0 [<c0100451>] init+0x61/0x1a0 [<c0103c0b>] kernel_thread_helper+0x7/0x1c ======================= Code: 74 92 eb 8e 8d 74 26 00 8d bc 27 00 00 00 00 57 56 53 83 ec 08 8b 5c 24 1c 89 e0 25 00 e0 ff ff 8b 08 8b 43 10 8b 79 5c 8b 40 44 <8b> 50 04 85 d2 78 11 0f a3 15 c0 9f 4e c0 19 c0 85 c0 0f 85 8c [-- Attachment #2: dmesg-3.txt --] [-- Type: text/plain, Size: 13799 bytes --] BIOS-provided physical RAM map: sanitize start sanitize end copy_e820_map() start: 0000000000000000 size: 000000000009fc00 end: 000000000009fc00 type: 1 copy_e820_map() type is E820_RAM copy_e820_map() start: 0000000000100000 size: 000000003ff00000 end: 0000000040000000 type: 1 copy_e820_map() type is E820_RAM copy_e820_map() start: 00000000fec00000 size: 0000000000009000 end: 00000000fec09000 type: 2 copy_e820_map() start: 00000000ffe80000 size: 0000000000180000 end: 0000000100000000 type: 2 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) BIOS-e820: 0000000000100000 - 0000000040000000 (usable) BIOS-e820: 00000000fec00000 - 00000000fec09000 (reserved) BIOS-e820: 00000000ffe80000 - 0000000100000000 (reserved) Node: 0, start_pfn: 0, end_pfn: 159 Setting physnode_map array to node 0 for pfns: 0 Node: 0, start_pfn: 256, end_pfn: 262144 Setting physnode_map array to node 0 for pfns: 256 65792 131328 196864 Node: 0, start_pfn: 0, end_pfn: 262144 Setting physnode_map array to node 0 for pfns: 0 65536 131072 196608 Reserving 2560 pages of KVA for lmem_map of node 0 Shrinking node 0 from 262144 pages to 259584 pages Reserving total of 2560 pages for numa KVA remap kva_start_pfn ~ 226816 find_max_low_pfn() ~ 229376 max_pfn = 262144 128MB HIGHMEM available. 896MB LOWMEM available. min_low_pfn = 1385, max_low_pfn = 229376, highstart_pfn = 229376 Low memory ends at vaddr f8000000 node 0 will remap to vaddr f7600000 - f8a00000 High memory starts at vaddr f8000000 found SMP MP-table at 000f6040 Entering add_active_range(0, 0, 259584) 0 entries of 256 used Zone PFN ranges: DMA 0 -> 4096 Normal 4096 -> 229376 HighMem 229376 -> 262144 early_node_map[1] active PFN ranges 0: 0 -> 259584 On node 0 totalpages: 259584 DMA zone: 32 pages used for memmap DMA zone: 0 pages reserved DMA zone: 4064 pages, LIFO batch:0 Normal zone: 1760 pages used for memmap Normal zone: 223520 pages, LIFO batch:31 HighMem zone: 236 pages used for memmap HighMem zone: 29972 pages, LIFO batch:7 DMI not present or invalid. Intel MultiProcessor Specification v1.4 Virtual Wire compatibility mode. OEM ID: IBM NUMA Product ID: SBB <6>Found an OEM MPC table at 1fff82a8- parsing it ... Translation: record 0, type 1, quad 0, global 3, local 3 Translation: record 1, type 1, quad 0, global 1, local 1 Translation: record 2, type 1, quad 0, global 1, local 1 Translation: record 3, type 1, quad 0, global 1, local 1 Translation: record 4, type 3, quad 0, global 0, local 0 Translation: record 5, type 3, quad 0, global 1, local 1 Translation: record 6, type 4, quad 0, global 2, local 18 Translation: record 7, type 2, quad 0, global 13, local 14 Translation: record 8, type 2, quad 0, global 14, local 13 APIC at: 0xFEC08000 Processor #0 6:10 APIC version 17 (quad 0, apic 1) Processor #4 6:10 APIC version 17 (quad 0, apic 8) Processor #1 6:10 APIC version 17 (quad 0, apic 2) Processor #2 6:10 APIC version 17 (quad 0, apic 4) Bus #0 is PCI (node 0) Bus #1 is PCI (node 0) Bus #2 is EISA (node 0) I/O APIC #13 Version 17 at 0xFEC00000. I/O APIC #14 Version 17 at 0xFEC01000. Enabling APIC mode: NUMA-Q. Using 2 I/O APICs Processors: 4 Allocating PCI resources starting at 50000000 (gap: 40000000:bec00000) Detected 700.054 MHz processor. Built 1 zonelists. Total pages: 257556 Kernel command line: root=/dev/sda1 console=ttyS0,57600 reboot=bios debug mapped APIC to ffffd000 (fec08000) mapped IOAPIC to ffffc000 (fec00000) mapped IOAPIC to ffffb000 (fec01000) Enabling fast FPU save and restore... done. Enabling unmasked SIMD FPU exception support... done. Initializing CPU#0 PID hash table entries: 4096 (order: 12, 16384 bytes) Console: colour VGA+ 80x25 Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) Initializing HighMem for node 0 (00038000:0003f600) Memory: 1022216k/1048576k available (2757k kernel code, 15732k reserved, 1252k data, 216k init, 120832k highmem) virtual kernel memory layout: fixmap : 0xffe1c000 - 0xfffff000 (1932 kB) pkmap : 0xffc00000 - 0xffe00000 (2048 kB) vmalloc : 0xf8800000 - 0xffbfe000 ( 115 MB) lowmem : 0xc0000000 - 0xf8000000 ( 896 MB) .init : 0xc04f2000 - 0xc0528000 ( 216 kB) .data : 0xc03b16ac - 0xc04eaa4c (1252 kB) .text : 0xc0100000 - 0xc03b16ac (2757 kB) Checking if this processor honours the WP bit even in supervisor mode... Ok. Calibrating delay using timer specific routine.. 1401.31 BogoMIPS (lpj=2802636) Mount-cache hash table entries: 512 CPU: After generic identify, caps: 0387fbff 00000000 00000000 00000000 0000000000000000 00000000 CPU: L1 I cache: 16K, L1 D cache: 16K CPU: L2 cache: 2048K CPU serial number disabled. CPU: After all inits, caps: 0383fbff 00000000 00000000 00000040 00000000 00000000 00000000 Compat vDSO mapped to ffffe000. Checking 'hlt' instruction... OK. Freeing SMP alternatives: 16k freed CPU0: Intel Pentium III (Cascades) stepping 00 Leaving ESR disabled. Mapping cpu 0 to node 0 Booting processor 1/2 eip 2000 Storing NMI vector Initializing CPU#1 Leaving ESR disabled. Mapping cpu 1 to node 0 Calibrating delay using timer specific routine.. 1400.08 BogoMIPS (lpj=2800175) CPU: After generic identify, caps: 0387fbff 00000000 00000000 00000000 0000000000000000 00000000 CPU: L1 I cache: 16K, L1 D cache: 16K CPU: L2 cache: 2048K CPU serial number disabled. CPU: After all inits, caps: 0383fbff 00000000 00000000 00000040 00000000 00000000 00000000 CPU1: Intel Pentium III (Cascades) stepping 00 Booting processor 2/4 eip 2000 Storing NMI vector Initializing CPU#2 Leaving ESR disabled. Mapping cpu 2 to node 0 Calibrating delay using timer specific routine.. 1400.06 BogoMIPS (lpj=2800120) CPU: After generic identify, caps: 0387fbff 00000000 00000000 00000000 0000000000000000 00000000 CPU: L1 I cache: 16K, L1 D cache: 16K CPU: L2 cache: 2048K CPU serial number disabled. CPU: After all inits, caps: 0383fbff 00000000 00000000 00000040 00000000 00000000 00000000 CPU2: Intel Pentium III (Cascades) stepping 00 Booting processor 3/8 eip 2000 Storing NMI vector Initializing CPU#3 Leaving ESR disabled. Mapping cpu 3 to node 0 Calibrating delay using timer specific routine.. 1400.06 BogoMIPS (lpj=2800124) CPU: After generic identify, caps: 0387fbff 00000000 00000000 00000000 0000000000000000 00000000 CPU: L1 I cache: 16K, L1 D cache: 16K CPU: L2 cache: 2048K CPU serial number disabled. CPU: After all inits, caps: 0383fbff 00000000 00000000 00000040 00000000 00000000 00000000 CPU3: Intel Pentium III (Cascades) stepping 00 Total of 4 processors activated (5601.52 BogoMIPS). ExtINT not setup in hardware but reported by MP table ENABLING IO-APIC IRQs ..TIMER: vector=0x31 apic1=0 pin1=2 apic2=0 pin2=0 ..MP-BIOS bug: 8254 timer not connected to IO-APIC ...trying to set up timer (IRQ0) through the 8259A ... ..... (found pin 0) ... failed. ...trying to set up timer as Virtual Wire IRQ... works. checking TSC synchronization across 4 CPUs: passed. Brought up 4 CPUs migration_cost=12000 NET: Registered protocol family 16 PCI: PCI BIOS revision 2.10 entry at 0xfd231, last bus=1 PCI: Using configuration type 1 Setting up standard PCI resources SCSI subsystem initialized PCI: Probing PCI hardware (bus 00) PCI: Scanning bus 0000:00 PCI: Found 0000:00:0a.0 [1077/1020] 000100 00 PCI: Calling quirk c024db60 for 0000:00:0a.0 PCI: Calling quirk c024e240 for 0000:00:0a.0 PCI: Found 0000:00:0b.0 [1002/4750] 000300 00 PCI: Calling quirk c024db60 for 0000:00:0b.0 PCI: Calling quirk c024e240 for 0000:00:0b.0 Boot video device is 0000:00:0b.0 PCI: Found 0000:00:0e.0 [8086/7110] 000601 00 PCI: Calling quirk c024e050 for 0000:00:0e.0 PCI: Calling quirk c024db60 for 0000:00:0e.0 PCI: Calling quirk c024e240 for 0000:00:0e.0 PCI: Found 0000:00:0e.1 [8086/7111] 000101 00 PCI: Calling quirk c024e050 for 0000:00:0e.1 PCI: Calling quirk c024db60 for 0000:00:0e.1 PCI: Calling quirk c024e240 for 0000:00:0e.1 PCI: Found 0000:00:0e.2 [8086/7112] 000c03 00 PCI: Calling quirk c024e050 for 0000:00:0e.2 PCI: Calling quirk c024db60 for 0000:00:0e.2 PCI: Calling quirk c024e240 for 0000:00:0e.2 PCI: Found 0000:00:0e.3 [8086/7113] 000680 00 PCI: Calling quirk c024e050 for 0000:00:0e.3 PCI: Calling quirk c024d150 for 0000:00:0e.3 PCI quirk: region 0c00-0c3f claimed by PIIX4 ACPI PIIX4 devres C PIO at 007c-007c PCI: Calling quirk c024db60 for 0000:00:0e.3 PCI: Calling quirk c024e240 for 0000:00:0e.3 PCI: Found 0000:00:10.0 [8086/84ca] 000600 00 PCI: Calling quirk c024e050 for 0000:00:10.0 PCI: Calling quirk c024db60 for 0000:00:10.0 PCI: Calling quirk c024e240 for 0000:00:10.0 PCI: Calling quirk c032f670 for 0000:00:10.0 PCI: Searching for i450NX host bridges on 0000:00:10.0 PCI: Scanning bus 0000:01 PCI: Found 0000:01:0c.0 [1011/0009] 000200 00 PCI: Calling quirk c024db60 for 0000:01:0c.0 PCI: Calling quirk c024e240 for 0000:01:0c.0 PCI: Fixups for bus 0000:01 PCI: Bus scan for 0000:01 returning with max=01 PCI: Found 0000:00:12.0 [8086/84cb] 000600 00 PCI: Calling quirk c024e050 for 0000:00:12.0 PCI: Calling quirk c024db60 for 0000:00:12.0 PCI: Calling quirk c024e240 for 0000:00:12.0 PCI: Found 0000:00:14.0 [8086/84cb] 000600 00 PCI: Calling quirk c024e050 for 0000:00:14.0 PCI: Calling quirk c024db60 for 0000:00:14.0 PCI: Calling quirk c024e240 for 0000:00:14.0 PCI: Fixups for bus 0000:00 PCI: Bus scan for 0000:00 returning with max=00 PCI->APIC IRQ transform: 0000:01:0c.0[A] -> IRQ 40 PCI->APIC IRQ transform: 0000:00:0a.0[A] -> IRQ 23 PCI->APIC IRQ transform: 0000:00:0b.0[A] -> IRQ 19 got res [50000000:5001ffff] bus [50000000:5001ffff] flags 7202 for BAR 6 of 0000:00:0b.0 got res [50020000:5002ffff] bus [50020000:5002ffff] flags 7200 for BAR 6 of 0000:00:0a.0 got res [1000:101f] bus [1000:101f] flags 101 for BAR 4 of 0000:00:0e.2 PCI: moved device 0000:00:0e.2 resource 4 (101) to 1000 got res [50040000:5007ffff] bus [50040000:5007ffff] flags 7200 for BAR 6 of 0000:01:0c.0 NET: Registered protocol family 2 IP route cache hash table entries: 32768 (order: 5, 131072 bytes) TCP established hash table entries: 131072 (order: 8, 1048576 bytes) TCP bind hash table entries: 65536 (order: 7, 524288 bytes) TCP: Hash tables configured (established 131072 bind 65536) TCP reno registered highmem bounce pool size: 64 pages Installing knfsd (copyright (C) 1996 okir@monad.swb.de). JFS: nTxBlock = 7986, nTxLock = 63889 io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered (default) PCI: Calling quirk c024da00 for 0000:00:0a.0 PCI: Calling quirk c031ce30 for 0000:00:0a.0 PCI: Calling quirk c024da00 for 0000:00:0b.0 PCI: Calling quirk c031ce30 for 0000:00:0b.0 PCI: Calling quirk c024da00 for 0000:00:0e.0 PCI: Calling quirk c031ce30 for 0000:00:0e.0 PCI: Calling quirk c024da00 for 0000:00:0e.1 PCI: Calling quirk c031ce30 for 0000:00:0e.1 PCI: Calling quirk c024da00 for 0000:00:0e.2 PCI: Calling quirk c031ce30 for 0000:00:0e.2 PCI: Calling quirk c024da00 for 0000:00:0e.3 PCI: Calling quirk c031ce30 for 0000:00:0e.3 PCI: Calling quirk c024da00 for 0000:00:10.0 PCI: Calling quirk c031ce30 for 0000:00:10.0 PCI: Calling quirk c024da00 for 0000:00:12.0 PCI: Calling quirk c05093b0 for 0000:00:12.0 PCI: Calling quirk c031ce30 for 0000:00:12.0 PCI: Calling quirk c024da00 for 0000:00:14.0 PCI: Calling quirk c05093b0 for 0000:00:14.0 PCI: Calling quirk c031ce30 for 0000:00:14.0 PCI: Calling quirk c024da00 for 0000:01:0c.0 PCI: Calling quirk c031ce30 for 0000:01:0c.0 Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A loop: loaded (max 8 devices) Intel(R) PRO/1000 Network Driver - version 7.2.9-k2 Copyright (c) 1999-2006 Intel Corporation. BUG: unable to handle kernel NULL pointer dereference at virtual address 00000004 printing eip: c024e92c *pde = 00529001 *pte = 00000000 Oops: 0000 [#1] SMP last sysfs file: Modules linked in: CPU: 0 EIP: 0060:[<c024e92c>] Not tainted VLI EFLAGS: 00010286 (2.6.18-mm3 #3) EIP is at pci_call_probe+0x1c/0xe0 eax: 00000000 ebx: dfe63c00 ecx: c10fca90 edx: c048ad60 esi: dfe63c00 edi: 0000000f ebp: dfc3fd00 esp: c10ffe70 ds: 007b es: 007b ss: 0068 Process swapper (pid: 1, ti=c10fe000 task=c10fca90 task.ti=c10fe000) Stack: dfe63c00 ffffffed ffffffed dfe63c00 c048b1c0 c024ea55 c048b1c0 dfe63c00 c048ad60 c048b1c0 dfe63c00 c048b1f4 c024ea9f c048b1c0 dfe63c00 dfe63c48 dfc3fd00 c02761f9 dfe63c48 00000286 dfff9060 000000d0 c048b1f4 dfc3fd00 Call Trace: [<c024ea55>] __pci_device_probe+0x65/0x80 [<c024ea9f>] pci_device_probe+0x2f/0x50 [<c02761f9>] really_probe+0xf9/0x100 [<c02762e8>] driver_probe_device+0xc8/0xe0 [<c03ae92d>] klist_next+0x5d/0xa0 [<c02763a0>] __driver_attach+0x0/0xa0 [<c0276430>] __driver_attach+0x90/0xa0 [<c0275409>] bus_for_each_dev+0x69/0x80 [<c0276465>] driver_attach+0x25/0x30 [<c02763a0>] __driver_attach+0x0/0xa0 [<c0275ad3>] bus_add_driver+0x73/0x140 [<c024edc4>] __pci_register_driver+0x74/0x90 [<c050c6f9>] tulip_init+0x29/0x30 [<c04f2a62>] do_initcalls+0x42/0x140 [<c01433eb>] register_irq_proc+0xab/0xd0 [<c01003f0>] init+0x0/0x1a0 [<c0143479>] init_irq_proc+0x39/0x50 [<c01003f0>] init+0x0/0x1a0 [<c0100451>] init+0x61/0x1a0 [<c0103c0b>] kernel_thread_helper+0x7/0x1c ======================= Code: 74 92 eb 8e 8d 74 26 00 8d bc 27 00 00 00 00 57 56 53 83 ec 08 8b 5c 24 1c 89 e0 25 00 e0 ff ff 8b 08 8b 43 10 8b 79 5c 8b 40 44 <8b> 50 04 85 d2 78 11 0f a3 15 c0 9f 4e c0 19 c0 85 c0 0f 85 8c EIP: [<c024e92c>] pci_call_probe+0x1c/0xe0 SS:ESP 0068:c10ffe70 <0>Kernel panic - not syncing: Attempted to kill init! ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-09 17:24 ` Martin Bligh 2006-10-09 17:34 ` Jeff Garzik @ 2006-10-20 17:07 ` Andy Whitcroft 2006-10-20 17:37 ` Greg KH 1 sibling, 1 reply; 10+ messages in thread From: Andy Whitcroft @ 2006-10-20 17:07 UTC (permalink / raw) To: Martin Bligh Cc: Badari Pulavarty, jgarzik, Andrew Morton, Linux Kernel Mailing List, Greg Kroah-Hartman, sukadev Martin Bligh wrote: > Badari Pulavarty wrote: >> On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: >> >>> Not sure if you've seen this already ... catching up on test results. >>> >>> This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this >>> problem. >>> >>> Full logs: >>> >>> mm2 - http://test.kernel.org/abat/50727/debug/console.log >>> mm3 - http://test.kernel.org/abat/51442/debug/console.log >>> >>> config - http://test.kernel.org/abat/51442/build/dotconfig >>> >>> I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) >>> is failing because bus->sysdata is NULL. The disassembly and >>> structure offsets seem to line up for that. >>> >>> #define pcibus_to_node(bus) ( >>> (struct pci_sysdata *)((bus)->sysdata))->node >>> >>> struct pci_sysdata { >>> int domain; /* PCI domain */ >>> int node; /* NUMA node */ >>> }; >>> >> >> >> Martin, >> >> Jeff moved "node" to a proper field in sysdata, instead >> of overloading sysdata itself. I think this is causing the >> problem. I guess we could end up with sysdata = NULL in some >> cases ? Since you are the NUMA-Q expert, where does sysdata gets set >> for NUMA-Q ? :) >> >> -mm2 changed: >> >> #define pcibus_to_node(bus) ((long) (bus)->sysdata) >> >> to >> #define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- >> >>> node > > Buggered if I know, that's some strange pci thing ;-) > > But can we revert whatever patch that was until it gets fixed, please? Unless I am going very very mad, this has came up once before some months ago. We went through lots of pain finding the cause of this for NUMA-Q and fixing it. Something about not having a sysdata and needing to initialise it. Thought so, this was all discussed back in December 2005. http://lkml.org/lkml/2005/12/20/226 I'll go see if I can forward port the patch and address the remaining issues with it. -apw ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 2006-10-20 17:07 ` Andy Whitcroft @ 2006-10-20 17:37 ` Greg KH 2006-11-01 14:37 ` [PATCH] pci device ensure sysdata initialised v2 Andy Whitcroft 0 siblings, 1 reply; 10+ messages in thread From: Greg KH @ 2006-10-20 17:37 UTC (permalink / raw) To: Andy Whitcroft Cc: Martin Bligh, Badari Pulavarty, jgarzik, Andrew Morton, Linux Kernel Mailing List, sukadev On Fri, Oct 20, 2006 at 06:07:39PM +0100, Andy Whitcroft wrote: > Martin Bligh wrote: > > Badari Pulavarty wrote: > >> On Sun, 2006-10-08 at 00:02 -0700, Martin J. Bligh wrote: > >> > >>> Not sure if you've seen this already ... catching up on test results. > >>> > >>> This was on NUMA-Q, on both -mm2 and -mm3. -mm1 didn't suffer from this > >>> problem. > >>> > >>> Full logs: > >>> > >>> mm2 - http://test.kernel.org/abat/50727/debug/console.log > >>> mm3 - http://test.kernel.org/abat/51442/debug/console.log > >>> > >>> config - http://test.kernel.org/abat/51442/build/dotconfig > >>> > >>> I'm guessing from the 00000004 that the pcibus_to_node(dev->bus) > >>> is failing because bus->sysdata is NULL. The disassembly and > >>> structure offsets seem to line up for that. > >>> > >>> #define pcibus_to_node(bus) ( > >>> (struct pci_sysdata *)((bus)->sysdata))->node > >>> > >>> struct pci_sysdata { > >>> int domain; /* PCI domain */ > >>> int node; /* NUMA node */ > >>> }; > >>> > >> > >> > >> Martin, > >> > >> Jeff moved "node" to a proper field in sysdata, instead > >> of overloading sysdata itself. I think this is causing the > >> problem. I guess we could end up with sysdata = NULL in some > >> cases ? Since you are the NUMA-Q expert, where does sysdata gets set > >> for NUMA-Q ? :) > >> > >> -mm2 changed: > >> > >> #define pcibus_to_node(bus) ((long) (bus)->sysdata) > >> > >> to > >> #define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))- > >> > >>> node > > > > Buggered if I know, that's some strange pci thing ;-) > > > > But can we revert whatever patch that was until it gets fixed, please? > > Unless I am going very very mad, this has came up once before some > months ago. We went through lots of pain finding the cause of this for > NUMA-Q and fixing it. Something about not having a sysdata and needing > to initialise it. > > Thought so, this was all discussed back in December 2005. > > http://lkml.org/lkml/2005/12/20/226 > > I'll go see if I can forward port the patch and address the remaining > issues with it. Yes, and I explicitly asked if this issue had been addressed again in these patches. That is why I rejected them oh so long ago... bleah. greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] pci device ensure sysdata initialised v2 2006-10-20 17:37 ` Greg KH @ 2006-11-01 14:37 ` Andy Whitcroft 2006-11-08 11:22 ` Jeff Garzik 0 siblings, 1 reply; 10+ messages in thread From: Andy Whitcroft @ 2006-11-01 14:37 UTC (permalink / raw) To: jgarzik, Greg KH Cc: Andy Whitcroft, Martin Bligh, Badari Pulavarty, Andrew Morton, Linux Kernel Mailing List, sukadev Ok, I've gone over the patches and retested them. Other than having to extend them to cover x86_64 they still seem to work as planned. I have updated the commentry to better explain the problem and the fix as encapsulated here. When this was proposed last time there was push back to get the nodes right. Whist this is clearly a good thing, I think we need this as a first step if the underlying patches are going to stay in. -apw === 8< === pci device ensure sysdata initialised v2 We have been seeing panic's on NUMA systems in pci_call_probe() in 2.6.19-rc1-mm1 and later. This is related to the changes introduced in the commit below: [x86, PCI] Switch pci_bus::sysdata from NUMA node integer to a pointer 0a247a58fc3e2ecfc17654301033e8b8d08df2a2 In this change the sysdata has changed from directly representing a value (the node number in NUMA) to a pointer to a structure. However, it seems that we do not always initialise this sysdata before we probe the device. Prior to the changes above the node was defaulted to 'NULL' allocating the devices to node 0 unconditionally. This patch adds a default sysdata entry (pci_default_sysdata), this is then used where 'NULL' was used previously. pci_default_sysdata defaults the node to unknown (-1). This is a more accurate assignment, mirroring the value returned where no topology support is provided and no locality information is available. There are only two uses of this value in the affected architectures (x86, x86_64) and generic code: 1) in x86_64, dma_alloc_pages() looks up the node in order to allocate node local memory. Here if the node is invalid we will default to the first online node. Behaviour here should be unchanged. 2) in generic, pci_call_probe() looks up the node in order to restrict execution of the probe on the card local node, to favor node local allocation. Where this is unknown previously we would force execution (and thereby allocation) to node 0, this is arguably wrong and using -1 releases this restriction. In an ideal world we should be supplying a sysdata for the appropriate node where it is known. Where it is not known defaulting to -1 seems a better course, and would help us where node 0 is short of memory. Signed-off-by: Andy Whitcroft <apw@shadowen.org> --- diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index aa0ac44..d3b8feb 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c @@ -27,6 +27,8 @@ unsigned long pirq_table_addr; struct pci_bus *pci_root_bus; struct pci_raw_ops *raw_pci_ops; +struct pci_sysdata pci_default_sysdata = { .node = -1 }; + static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) { return raw_pci_ops->read(pci_domain_nr(bus), bus->number, diff --git a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c index 2bcd0a4..1ba35b3 100644 --- a/arch/i386/pci/fixup.c +++ b/arch/i386/pci/fixup.c @@ -25,9 +25,11 @@ static void __devinit pci_fixup_i450nx(s pci_read_config_byte(d, reg++, &subb); DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb); if (busno) - pci_scan_bus(busno, &pci_root_ops, NULL); /* Bus A */ + pci_scan_bus(busno, &pci_root_ops, + &pci_default_sysdata); /* Bus A */ if (suba < subb) - pci_scan_bus(suba+1, &pci_root_ops, NULL); /* Bus B */ + pci_scan_bus(suba+1, &pci_root_ops, + &pci_default_sysdata); /* Bus B */ } pcibios_last_bus = -1; } @@ -42,7 +44,7 @@ static void __devinit pci_fixup_i450gx(s u8 busno; pci_read_config_byte(d, 0x4a, &busno); printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", pci_name(d), busno); - pci_scan_bus(busno, &pci_root_ops, NULL); + pci_scan_bus(busno, &pci_root_ops, &pci_default_sysdata); pcibios_last_bus = -1; } DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx); diff --git a/arch/i386/pci/legacy.c b/arch/i386/pci/legacy.c index 149a958..b076b25 100644 --- a/arch/i386/pci/legacy.c +++ b/arch/i386/pci/legacy.c @@ -26,7 +26,8 @@ static void __devinit pcibios_fixup_peer l != 0x0000 && l != 0xffff) { DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l); printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n); - pci_scan_bus(n, &pci_root_ops, NULL); + pci_scan_bus(n, &pci_root_ops, + &pci_default_sysdata); break; } } diff --git a/arch/i386/pci/numa.c b/arch/i386/pci/numa.c index adbe17a..8d2fd6c 100644 --- a/arch/i386/pci/numa.c +++ b/arch/i386/pci/numa.c @@ -97,9 +97,11 @@ static void __devinit pci_fixup_i450nx(s pci_read_config_byte(d, reg++, &subb); DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb); if (busno) - pci_scan_bus(QUADLOCAL2BUS(quad,busno), &pci_root_ops, NULL); /* Bus A */ + pci_scan_bus(QUADLOCAL2BUS(quad,busno), &pci_root_ops, + &pci_default_sysdata); /* Bus A */ if (suba < subb) - pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), &pci_root_ops, NULL); /* Bus B */ + pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), &pci_root_ops, + &pci_default_sysdata); /* Bus B */ } pcibios_last_bus = -1; } @@ -124,7 +126,7 @@ static int __init pci_numa_init(void) printk("Scanning PCI bus %d for quad %d\n", QUADLOCAL2BUS(quad,0), quad); pci_scan_bus(QUADLOCAL2BUS(quad,0), - &pci_root_ops, NULL); + &pci_root_ops, &pci_default_sysdata); } return 0; } diff --git a/arch/i386/pci/visws.c b/arch/i386/pci/visws.c index f1b486d..2539371 100644 --- a/arch/i386/pci/visws.c +++ b/arch/i386/pci/visws.c @@ -101,8 +101,8 @@ static int __init pcibios_init(void) "bridge B (PIIX4) bus: %u\n", pci_bus1, pci_bus0); raw_pci_ops = &pci_direct_conf1; - pci_scan_bus(pci_bus0, &pci_root_ops, NULL); - pci_scan_bus(pci_bus1, &pci_root_ops, NULL); + pci_scan_bus(pci_bus0, &pci_root_ops, &pci_default_sysdata); + pci_scan_bus(pci_bus1, &pci_root_ops, &pci_default_sysdata); pci_fixup_irqs(visws_swizzle, visws_map_irq); pcibios_resource_survey(); return 0; diff --git a/include/asm-i386/pci.h b/include/asm-i386/pci.h index 2c8b5e9..d280b7f 100644 --- a/include/asm-i386/pci.h +++ b/include/asm-i386/pci.h @@ -8,6 +8,7 @@ struct pci_sysdata { int domain; /* PCI domain */ int node; /* NUMA node */ }; +extern struct pci_sysdata pci_default_sysdata; #ifdef CONFIG_PCI_DOMAINS static inline int pci_domain_nr(struct pci_bus *bus) diff --git a/include/asm-x86_64/pci.h b/include/asm-x86_64/pci.h index 550207f..5dc9aa5 100644 --- a/include/asm-x86_64/pci.h +++ b/include/asm-x86_64/pci.h @@ -10,6 +10,7 @@ struct pci_sysdata { int node; /* NUMA node */ void* iommu; /* IOMMU private data */ }; +extern struct pci_sysdata pci_default_sysdata; #ifdef CONFIG_PCI_DOMAINS static inline int pci_domain_nr(struct pci_bus *bus) ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] pci device ensure sysdata initialised v2 2006-11-01 14:37 ` [PATCH] pci device ensure sysdata initialised v2 Andy Whitcroft @ 2006-11-08 11:22 ` Jeff Garzik 0 siblings, 0 replies; 10+ messages in thread From: Jeff Garzik @ 2006-11-08 11:22 UTC (permalink / raw) To: Andy Whitcroft, Andrew Morton Cc: Greg KH, Martin Bligh, Badari Pulavarty, Linux Kernel Mailing List, sukadev Andy Whitcroft wrote: > Ok, I've gone over the patches and retested them. Other than having > to extend them to cover x86_64 they still seem to work as planned. I > have updated the commentry to better explain the problem and the > fix as encapsulated here. > > When this was proposed last time there was push back to get the > nodes right. Whist this is clearly a good thing, I think we need > this as a first step if the underlying patches are going to stay > in. We definitely need something like this. Having some sysdata static and some sysdata dynamic makes me nervous, and so I want to review the code paths in depth before applying this. My gut feeling is that there is a bug remaining in this area, that this patch might exacerbate. Jeff ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2006-11-08 11:22 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-10-08 7:02 Panic in pci_call_probe from 2.6.18-mm2 and 2.6.18-mm3 Martin J. Bligh 2006-10-08 7:49 ` Andrew Morton 2006-10-09 17:19 ` Badari Pulavarty 2006-10-09 17:24 ` Martin Bligh 2006-10-09 17:34 ` Jeff Garzik 2006-10-09 18:46 ` Sukadev Bhattiprolu 2006-10-20 17:07 ` Andy Whitcroft 2006-10-20 17:37 ` Greg KH 2006-11-01 14:37 ` [PATCH] pci device ensure sysdata initialised v2 Andy Whitcroft 2006-11-08 11:22 ` Jeff Garzik
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox