Re: PCI irq fix

From: François romieu (romieu@ensta.fr)
Date: Thu Apr 27 2000 - 08:36:10 EST


The Thu, Apr 27, 2000 at 01:52:53PM +0930, Benjamin Close wrote :
[...]

> --- linux-2.3.99-pre6-old/arch/i386/kernel/pci-irq.c Sun Apr 16 13:42:11 2000
> +++ linux-2.3.99-pre6/arch/i386/kernel/pci-irq.c Wed Apr 26 14:37:00 2000
> @@ -318,6 +318,7 @@
> DBG(" -> newirq=%d", newirq);
>
> /* Try to get current IRQ */
> + if(r){
> if (r->get && (irq = r->get(pirq_router_dev, d, pirq))) {
> DBG(" -> got IRQ %d\n", irq);
> msg = "Found";
> @@ -328,6 +329,7 @@
> msg = "Assigned";
> irq = newirq;
> }
> + }
> }

It looks strange to me (supposing r==NULL is the culprit) :
we have a big struct irq_router *r = pirq_router; at the start of the
function and r isn't directly accessed so far. There isn't any call to
 some really suspicious function either. I would believe somethink is
 messing with "pirq_router". Grep-ing around, two candidates are found
in pirq_find_router :
- you could have exited early and got a
DBG("PCI: Interrupt router not found\n"); on the console
- or, supposing your component doesn't appear in pirq_routers :
        for(r=pirq_routers; r->vendor; r++)
                if (r->vendor == rvendor && r->device == rdevice)
                        break;
        pirq_router = r;
would give you some "PCI: Using IRQ router default [0/0] etc..."
Thus :
- do you see something at the console before the Oops ?
- which components stand on your /proc/pci ?

-- 
Ueimor

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 30 2000 - 21:00:12 EST