cvs commit: src/sys/dev/fdc fdc.c fdcvar.h
jhb at FreeBSD.org
Thu Sep 23 18:35:31 PDT 2004
On Thursday 23 September 2004 09:19 pm, M. Warner Losh wrote:
> In message: <200409231923.40285.jhb at FreeBSD.org>
> John Baldwin <jhb at 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 at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the cvs-src