Date: Mon, 29 Jul 2002 13:47:31 -0400 (EDT) From: John Baldwin <jhb@FreeBSD.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: mobile@FreeBSD.org Subject: Re: docs/41104: Stale comment removal from pccardd(8) Message-ID: <XFMail.20020729134731.jhb@FreeBSD.org> In-Reply-To: <20020729.091923.98343767.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[ cc's adjusted to better conform to reality ] On 29-Jul-2002 M. Warner Losh wrote: > In message: <XFMail.20020729111003.jhb@FreeBSD.org> > John Baldwin <jhb@FreeBSD.org> writes: >: >: On 29-Jul-2002 M. Warner Losh wrote: >: > In message: <XFMail.20020729081434.jhb@FreeBSD.org> >: > John Baldwin <jhb@FreeBSD.org> writes: >: >: Unfortunately using KLD's does not fix this problem and it is still an >: >: issue. I can't eject my cardbus rl0 card w/o my laptop locking up for >: >: exactly this reason. This patch should not be committed unless Warner >: >: (imp@, cc'd) approves. >: > >: > Yes, the comments in the pccardd man page are correct (eg, that's why >: > things are they way they are). However, once the underlying problems >: > in the kernel were fixed, pccardd wasn't updated to be less smart >: > about the resources a card uses. Likely it should read: >: > >: > The primary reasons are historical. >: >: Ah, ok. >: >: > What happens in NEWCARD with a rl card aren't relevant to this >: > discussion :-) The reason that you can't eject the rl0 card has to do >: > with something else (likely an ISR that doesn't properly terminate >: > when the card is gone or a detach routine that's minorly bogus). >: >: Well, it's the same behavior. :-P The rl(4) driver doesn't allow for >: devices to go away and gets stuck in a loop spinning forever waiting >: for a card reset to succeed and the reset keeps failing for obvious >: reasons. Completely hangs the machine. *sigh* > > Yes. I've seen it succeed for me. any chance you can get me a > traceback of where it is happening? This patch fixes it: Index: if_rl.c =================================================================== RCS file: /usr/cvs/src/sys/pci/if_rl.c,v retrieving revision 1.71 diff -u -r1.71 if_rl.c --- if_rl.c 30 Jun 2002 22:16:22 -0000 1.71 +++ if_rl.c 29 Jul 2002 17:09:35 -0000 @@ -1380,6 +1380,8 @@ u_int16_t status; status = CSR_READ_2(sc, RL_ISR); + if (status == 0xffff) + goto done; if (status) CSR_WRITE_2(sc, RL_ISR, status); @@ -1426,6 +1428,9 @@ for (;;) { status = CSR_READ_2(sc, RL_ISR); + /* If a cardbus card goes away, the read returns 0xffff. */ + if (status == 0xffff) + break; if (status) CSR_WRITE_2(sc, RL_ISR, status); I think this is hackish, and that 0xffff is too cardbus specific. We probably should be asking our parent if we are still around (device_present()?) before doing the read instead. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ 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?XFMail.20020729134731.jhb>