e1000 driver failed to call pci_enable_device
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 21 lines · you
I tried to boot the linux-2.6.9-rc1-mm1 kernel and it generates an oops
because the e1000 driver failed to callpci_enable_device(). The kernel boots normally with "pci=routeirq" argument sets. I copy the output of "lspci" and also the oops message generated during the boot.
...
----[the oops message]----
Bringing up interface eth0: Unable to handle kernel paging request at virtual ddressc0500eb0
printing eip:
*pde = 00582027Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC Modules linked in: e1000 CPU: 0 EIP: 0060:[<c0500eb0>] Not tainted VLI EFLAGS: 00010282 (2.6.9-rc1-mm1)EIP is at
assign_irq_vector+0x0/0x87
eax: 00000004 ebx: 00000034 ecx: 00000080 edx:c0545a70
esi: 00000004 edi: 00000002 ebp: 00000001 esp:f7f0dda4
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 1760, threadinfo=f7f0c000 task=f7faeb70)
Quoted 6 lines
Stack: c011751e 00000034 00000002 00000004 00000008 0000000c 00000097 f7f0c000 00000286 c2223480 00000001 0001a900 03000000 00000004 00000034 00000002 00000010 c0114d43 00000002 00000004 00000034 00000001 00000001 00000001 Call Trace: [<c011751e>] io_apic_set_pci_routing+0x7f/0x222...
Thanks very much for your testing and detailed problem report. This problem actually isn't in e1000. Can you try the attached patch, please? I thought I'd seen this patch before, but it doesn't seem to be in -mm yet.
Make assign_irq_vector() non-__init always (it's called from io_apic_set_pci_routing(), which is used in the pci_enable_device() path).
===== arch/i386/kernel/io_apic.c 1.109 vs edited =====
arch/i386/kernel/io_apic.c +0 -4
@@ -1120,11 +1120,7 @@/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ u8 irq_vector[NR_IRQ_VECTORS ] = {FIRST_DEVICE_VECTOR ,0 }; -#ifdef CONFIG_PCI_MSI int assign_irq_vector (int irq) -#else -int __init assign_irq_vector(int irq) -#endif {static int current_vector =FIRST_DEVICE_VECTOR , offset =0 ;
Quoted 20 lines · Bjorn Helgaas
Quoted 4 lines · you
I tried to boot the linux-2.6.9-rc1-mm1 kernel and it generates an oops
because the e1000 driver failed to callpci_enable_device(). The kernel boots normally with "pci=routeirq" argument sets. I copy the output of "lspci" and also the oops message generated during the boot.Thanks very much for your testing and detailed problem report. This problem actually isn't in e1000. Can you try the attached patch, please? I thought I'd seen this patch before, but it doesn't seem to be in -mm yet.
Make
assign_irq_vector()non-__init always (it's called fromio_apic_set_pci_routing(), which is used in thepci_enable_device()path).Signed-off-by Bjorn Helgaas <[email protected]>=====
arch/i386/kernel/io_apic.c1.109 vs edited =====
arch/i386/kernel/io_apic.c line 1125
Quoted 10 lines
arch/i386/kernel/io_apic.c +0
-4@@ -1120,11 +1120,7 @@/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ u8 irq_vector[NR_IRQ_VECTORS ] = {FIRST_DEVICE_VECTOR ,0 }; -#ifdef CONFIG_PCI_MSI int assign_irq_vector (int irq) -#else -int __init assign_irq_vector(int irq) -#endif {static int current_vector =FIRST_DEVICE_VECTOR , offset =0 ;
The patch fixes the problem. Everything works fine. Thank you very much for your help
Best regards,
Guillaume