Date: Mon, 16 Aug 2004 11:34:37 -0400 From: Brian Fundakowski Feldman <green@FreeBSD.org> To: "M. Warner Losh" <imp@bsdimp.com>, jhb@FreeBSD.org Cc: current@FreeBSD.org Subject: Re: pccbb crashes when detaching (unsafe interrupt handler) Message-ID: <20040816153437.GJ980@green.homeunix.org> In-Reply-To: <20040717.124803.33210527.imp@bsdimp.com> References: <20040717054014.GP1626@green.homeunix.org> <20040717.121712.83689795.imp@bsdimp.com> <20040717182841.GR1626@green.homeunix.org> <20040717.124803.33210527.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Can we start off again on a good foot so we can fix this before -STABLE? I think, at a very very low cost (instruction cache bloat, but few extra instructions in the fast-path), we can implement suspension of ithread handlers. This would completely solve the problem at hand, and all the "slowness" would be pushed onto the ithread munging calls. I get an immediate panic when running X and unloading a card on my notebook because they share interrupts. I get an immediate panic on eject and kldunload, the exact same case, on my desktop when I'm playing music and interrupts are shared between the cardbus and the sound card. I don't think there would be harm pausing the interrupt handler to create a critical section there. That is, it_need would be cleared, ih_need would be cleared and unsuspended interrupt handlers run, suspended interrupt handlers acknowledged and then run once they become unsuspended. Where IH_DEAD is checked would be added the test for suspension and acknowledgement. We could use the mutex to synchronize the ithread suspension function by setting a flag IH_WANTSUSPEND, use a flag IH_SUSPENDED to mark it suspended, and only allow a single suspension at a time (the ithread suspender would have to sleep until it can grab IH_WANTSUSPEND). The cost would be nil (testing (IH_DEAD | IH_*SUSPEND*) instead of IH_DEAD) plus one store and load (stack variable initialized to 0 for "need to run suspended handlers" after they have been iterated through the first time). Comments, please. -- Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\ <> green@FreeBSD.org \ The Power to Serve! \ Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040816153437.GJ980>