2001-12-17 15:44:29

by Kevin Curtis

[permalink] [raw]
Subject: pci_enable_device reports IRQ routing conflict

Hi,
I am updating a driver for a pci card that has two variants (a long
established and working variant and one with updated hardware), but both are
handled by the same driver. They are identified with the same vendor id but
a different device id. During driver initialisation I probe for the cards,
and set them up in terms of getting irq's, io and memory etc.

The first card has irq5 returned from pci_find_device, the second has irq9
returned.

However when I call pci_enable_device for the second card I get the
following kernel log message:

Dec 17 15:06:37 minion kernel: IRQ routing conflict for 00:0b.0, have irq 9,
want irq 5

The call didn't return an error, so I assume this was a non-fatal.

I can't see anything wrong with the pci_dev structures, and even when I
probe for the cards in the reverse order I still get the same error message.

When I only have one of the cards present in the system when I load the
driver, then there aren't any problems, it's only when both are physically
installed that the error message is produced.

Has anyone got any ideas where to look to debug this?

I am using RH 7.2 with Kernel 2.4.16

The card
Kevin Curtis


2001-12-17 22:13:26

by Kai Germaschewski

[permalink] [raw]
Subject: Re: pci_enable_device reports IRQ routing conflict

On Mon, 17 Dec 2001, Kevin Curtis wrote:

> However when I call pci_enable_device for the second card I get the
> following kernel log message:
>
> Dec 17 15:06:37 minion kernel: IRQ routing conflict for 00:0b.0, have irq 9,
> want irq 5

This means that config space (supposedly set up by the BIOS) reports IRQ 9
for the device, but the IRQ router really routes it to IRQ 5.

> The call didn't return an error, so I assume this was a non-fatal.

Well, the kernel currently ignores its knowledge about the router and
trusts the BIOS. Which most likely means that the IRQ won't work.

(Note that in general you should access dev->irq only after calling
pci_enable_device())

> Has anyone got any ideas where to look to debug this?

#define DEBUG

in arch/i386/kernel/pci-i386.h will give some debugging output on the next
boot, which should help.

--Kai



2001-12-18 16:19:26

by Kevin Curtis

[permalink] [raw]
Subject: RE: pci_enable_device reports IRQ routing conflict

Hi,
thanks for your advice. Adding debug produced one other message in
the Kernel log:

IRQ for 00:0a.0:0 -> PIRQ 03, mask deb8, excl 0e20 -> newirq=9 -> got IRQ 10
IRQ routing conflict for 00:0a.0, have irq 9, want irq 10

I think my testing shows that actual irq's assigned are as indicated by the
"have irq" field. And that as far as I can tell at the moment everything
seems to work OK.

Regards

Kevin

-----Original Message-----
From: Kai Germaschewski [mailto:[email protected]]
Sent: 17 December 2001 22:13
To: Kevin Curtis
Cc: [email protected]
Subject: Re: pci_enable_device reports IRQ routing conflict


On Mon, 17 Dec 2001, Kevin Curtis wrote:

> However when I call pci_enable_device for the second card I get the
> following kernel log message:
>
> Dec 17 15:06:37 minion kernel: IRQ routing conflict for 00:0b.0, have irq
9,
> want irq 5

This means that config space (supposedly set up by the BIOS) reports IRQ 9
for the device, but the IRQ router really routes it to IRQ 5.

> The call didn't return an error, so I assume this was a non-fatal.

Well, the kernel currently ignores its knowledge about the router and
trusts the BIOS. Which most likely means that the IRQ won't work.

(Note that in general you should access dev->irq only after calling
pci_enable_device())

> Has anyone got any ideas where to look to debug this?

#define DEBUG

in arch/i386/kernel/pci-i386.h will give some debugging output on the next
boot, which should help.

--Kai