Date: Thu, 23 Sep 2004 21:35:31 -0400 From: John Baldwin <jhb@FreeBSD.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: nate@root.org Subject: Re: cvs commit: src/sys/dev/fdc fdc.c fdcvar.h Message-ID: <200409232135.31918.jhb@FreeBSD.org> In-Reply-To: <20040923.191950.04529674.imp@bsdimp.com> References: <20040923224739.GE959@green.homeunix.org> <200409231923.40285.jhb@FreeBSD.org> <20040923.191950.04529674.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 23 September 2004 09:19 pm, M. Warner Losh wrote: > In message: <200409231923.40285.jhb@FreeBSD.org> > > John Baldwin <jhb@freebsd.org> writes: > : Note that relying on a wakeup from your own code is not safe if you > : expect fdc to be a module since you could wakeup the thread doing the > : kldunload (and thus detach) and then be interrupted for an interrupt and > : it could unmap the memory backing that function before you get a chance > : to run again resulting in a panic. There is a special wakeup on the > : proc pointer in exit1() for kthreads to handle this case. > > Wouldn't simply unregistering your interrupt before killing the worker > thread handle this case? You are sleeping in the detach path then > until the worker thread goes away. Once it is gone, it is safe to > proceed to detach. cbb does this and I've not had any problems > unloading it. In fact, it was how you told me to write cbb a long > time ago. Once the bus_teardown_intr() returns, you are guaranteed > the interrupt won't get called. What about someone else's interrupt preempting you? > : I should > : likely move that into kthread_exit() however (which wouldn't be a > : functional change as far as you are concerned). > > I'm not sure I understand this part of your statement. I currently have a wakeup() buried in exit1() conditional on p_flag & P_KTHREAD. I should just move it to kthread_exit() so it happens sooner and is less obfuscated. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200409232135.31918.jhb>