Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Sep 2001 10:04:05 -0600
From:      Warner Losh <imp@harmony.village.org>
To:        Lars Eggert <larse@ISI.EDU>
Cc:        mobile@FreeBSD.ORG
Subject:   Re: Partial Success! (Re: PC-Card broken: 4.4-RC4 & Dell Latitude C600) 
Message-ID:  <200109121604.f8CG45t40527@harmony.village.org>
In-Reply-To: Your message of "Wed, 12 Sep 2001 08:56:43 PDT." <3B9F85BB.70DE18A6@isi.edu> 
References:  <3B9F85BB.70DE18A6@isi.edu>  <3B9EC74D.CF3DECBD@isi.edu> <3B9E81C4.5CB017D@isi.edu> <3B9D0A4C.2090203@isi.edu> <200109111837.f8BIbft34551@harmony.village.org> <200109112134.f8BLYkt35748@harmony.village.org> <3B9E843A.54EA07A7@isi.edu> <200109121453.f8CEr2t39965@harmony.village.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <3B9F85BB.70DE18A6@isi.edu> Lars Eggert writes:
: Sorry, it doesn't change anything. Still immediate hang (no pccardd
: message, etc.) when I eject any of the problematic cards. The good ones
: still eject fine, too.

A private message leads me to believe that we can't call the eject
routine from the ISR...  However, it looks like we're NOT acking the
interrupt before the detach.  So, if we enable interrupts any at all
they might storm us before we can do that ack.  I don't completely
understand this problem just yet. It sounds a little like a bug in the 
spl code still.

So, let's try the following patch.  It isn't perfect style-wise, but
let me know.  We may need to do a little more than this.

Index: pcic_pci.c
===================================================================
RCS file: /home/imp/FreeBSD/CVS/src/sys/pccard/pcic_pci.c,v
retrieving revision 1.54.2.16
diff -u -r1.54.2.16 pcic_pci.c
--- pcic_pci.c	2001/09/06 20:59:49	1.54.2.16
+++ pcic_pci.c	2001/09/12 16:01:09
@@ -912,6 +912,10 @@
 	event = bus_space_read_4(sp->bst, sp->bsh, CB_SOCKET_EVENT);
 	if (event != 0) {
 		stat = bus_space_read_4(sp->bst, sp->bsh, CB_SOCKET_STATE);
+
+		/* Ack the interrupt */
+		bus_space_write_4(sp->bst, sp->bsh, 0, event);
+
 		if (bootverbose)
 			device_printf(sc->dev, "Event mask 0x%x stat 0x%x\n",
 			    event, stat);
@@ -934,8 +938,6 @@
 		if (stat & CB_SS_BADVCC)
 			device_printf(sc->dev, "BAD Vcc request\n");
 
-		/* Ack the interrupt */
-		bus_space_write_4(sp->bst, sp->bsh, 0, event);
 	}
 
 	/*

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200109121604.f8CG45t40527>