* Re: e1000 driver failed to call pci_enable_device
[not found] <20040827114408.GA6490@frec.bull.fr>
@ 2004-08-27 15:42 ` Bjorn Helgaas
2004-08-30 7:55 ` Guillaume Thouvenin
0 siblings, 1 reply; 2+ messages in thread
From: Bjorn Helgaas @ 2004-08-27 15:42 UTC (permalink / raw)
To: Guillaume Thouvenin; +Cc: Andrew Morton, linux.nics, linux-kernel
On Friday 27 August 2004 5:44 am, you wrote:
> I tried to boot the linux-2.6.9-rc1-mm1 kernel and it generates an oops
> because the e1000 driver failed to call pci_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
> ddress c0500eb0
> printing eip:
> *pde = 00582027
> Oops: 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)
> 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).
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
===== arch/i386/kernel/io_apic.c 1.109 vs edited =====
--- 1.109/arch/i386/kernel/io_apic.c 2004-08-24 03:08:37 -06:00
+++ edited/arch/i386/kernel/io_apic.c 2004-08-27 09:30:37 -06:00
@@ -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;
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: e1000 driver failed to call pci_enable_device
2004-08-27 15:42 ` e1000 driver failed to call pci_enable_device Bjorn Helgaas
@ 2004-08-30 7:55 ` Guillaume Thouvenin
0 siblings, 0 replies; 2+ messages in thread
From: Guillaume Thouvenin @ 2004-08-30 7:55 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: Andrew Morton, linux.nics, linux-kernel
On Fri, Aug 27, 2004 at 09:42:57AM -0600, Bjorn Helgaas wrote:
> On Friday 27 August 2004 5:44 am, you wrote:
> > I tried to boot the linux-2.6.9-rc1-mm1 kernel and it generates an oops
> > because the e1000 driver failed to call pci_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 from
> io_apic_set_pci_routing(), which is used in the pci_enable_device()
> path).
>
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
>
> ===== arch/i386/kernel/io_apic.c 1.109 vs edited =====
> --- 1.109/arch/i386/kernel/io_apic.c 2004-08-24 03:08:37 -06:00
> +++ edited/arch/i386/kernel/io_apic.c 2004-08-27 09:30:37 -06:00
> @@ -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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-08-30 7:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20040827114408.GA6490@frec.bull.fr>
2004-08-27 15:42 ` e1000 driver failed to call pci_enable_device Bjorn Helgaas
2004-08-30 7:55 ` Guillaume Thouvenin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®