Bug#321419: linux-image-2.6.12-1-686: irq11 makes eth0 problems (Was: Re: Bug#303550: kernel-image-2.6.11-1-686: irq11 makes eth0 problems)

Daniel Ritz daniel.ritz at gmx.ch
Tue Aug 16 20:26:17 EDT 2005


hi

On Tuesday 16 August 2005 22.47, Philippe Bourcier wrote:
> 
>   I tried latest debian 2.6.12 kernel; see:
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=321419
> 
> irq 11: nobody cared!
>  [<c01388fa>] __report_bad_irq+0x2a/0xa0
>  [<c013836d>] handle_IRQ_event+0x3d/0x70
>  [<c0138a12>] note_interrupt+0x82/0xa0
>  [<c0138490>] __do_IRQ+0xf0/0x100
>  [<c0105729>] do_IRQ+0x19/0x30
>  [<c0103ada>] common_interrupt+0x1a/0x20
>  [<c011f2ae>] __do_softirq+0x2e/0xa0
>  [<c011f346>] do_softirq+0x26/0x30
>  [<c010572e>] do_IRQ+0x1e/0x30
>  [<c0103ada>] common_interrupt+0x1a/0x20
> handlers:
> [<c8cddea0>] (usb_hcd_irq+0x0/0x80 [usbcore])
> [<c8d00990>] (yenta_interrupt+0x0/0x40 [yenta_socket])
> [<c8d00990>] (yenta_interrupt+0x0/0x40 [yenta_socket])
> Disabling IRQ #11
> eth0: interrupt(s) dropped!
> 
>   ask more if you need,

simple question: is that card a multifunction card with ethernet and a
modem?  i see from the dmesg that a ttyS2 pops up the same time when the
3c589 shows up. the problem compared to 2.4 is that the serial interface
is assigned irq 11 when the network card is on irq 9. but on 2.4 both
functions use irq 9 (which is correct). could you try the attached patch?

if the patch doesn't help please give me the output of cbdump and cardctl
ident when the card is inserted and all drivers are loaded.

rgds
-daniel

-----

[PATCH] fix pcmcia_request_irq() for multifunction card

multifunction cards need to have the same irq assigned to both functions.
the code tries that but fails because ret is still set to CS_IN_USE
which results in the function having the CB irq assigned. yenta_set_socket
then just changes the irq routing to use the PCI interrupt but the first
functions irq handler is registered on an ISA interrupt. boom.

Signed-off-by: Daniel Ritz <daniel.ritz at gmx.ch>

diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c
--- a/drivers/pcmcia/pcmcia_resource.c
+++ b/drivers/pcmcia/pcmcia_resource.c
@@ -831,7 +831,8 @@ int pcmcia_request_irq(struct pcmcia_dev
 		}
 	}
 #endif
-	if (ret) {
+	/* only assign PCI irq if no IRQ already assigned */
+	if (ret && !s->irq.AssignedIRQ) {
 		if (!s->pci_irq)
 			return ret;
 		irq = s->pci_irq;




More information about the linux-pcmcia mailing list