lkml.org 
[lkml]   [2006]   [May]   [2]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
FromNeil Brown <>
DateTue, 2 May 2006 15:10:50 +1000
SubjectRe: better leve triggered IRQ management needed
On Saturday April 29, torvalds@osdl.org wrote:
> 
> That said, I'm surprised that the kernel doesn't set ELCR for you. If it 
> sees a PCI device, it really should know that it's a PCI interrupt. I 
> wonder if we should do the following.. (Does this automatically make it do 
> the right thing on your machine?)
> 
> 			Linus
> 
> ---
> diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
> index 7323544..6e3eaef 100644
> --- a/arch/i386/pci/irq.c
> +++ b/arch/i386/pci/irq.c
> @@ -881,6 +881,7 @@ static int pcibios_lookup_irq(struct pci
>  	((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask)) ) {
>  		DBG(" -> got IRQ %d\n", irq);
>  		msg = "Found";
> +		eisa_set_level_irq(newirq);
>  	} else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
>  		DBG(" -> assigning IRQ %d", newirq);
>  		if (r->set(pirq_router_dev, dev, pirq, newirq)) {
> -

Yes, this helps.  It sets the offending IRQ to be level triggered, so
the wireless card works nicely.

My only concern is that dmesg contains:

[354446.223241] PCI: Using IRQ router PIIX/ICH [8086/7110] at 0000:00:07.0
[354446.223302] PCI: IRQ 0 for device 0000:00:04.0 doesn't match PIRQ mask - try
 pci=usepirqmask
[354446.223363] PCI: setting IRQ 0 as level-triggered
[354446.223401] PCI: Found IRQ 10 for device 0000:00:04.0
[354446.223446] PCI: Sharing IRQ 10 with 0000:00:04.1

Setting IRQ 0 to level-triggered doesn't seem healthy as it is the
timer interrupt.

It definitely gets IRQ 10 (the problematic one - 0:04 is the PCMCIA
controller) and IRQ 11 (which was already level-triggered).
e.g.


[354446.228016] PCI: setting IRQ 10 as level-triggered
[354446.228060] PCI: Found IRQ 10 for device 0000:00:04.0
[354446.228140] PCI: Sharing IRQ 10 with 0000:00:04.1
[354446.228218] PCI: Found IRQ 10 for device 0000:00:04.1
[354446.228268] PCI: Sharing IRQ 10 with 0000:00:04.0
A subsequent printout of the ELCR show the two bytes to be
 00 and 0c

representing IRQ10 and IRQ11 - so it seems the setting of IRQ-0 to
level triggered didn't have a lasting effect.

Maybe the eisa_set_level_irq should be passed 'irq' rather than
'newirq' ??

NeilBrown
-
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/

\
 
 \ /
  Last update: 2006-05-02 07:14    [from the cache]
©2003-2008