cvs commit: src/sys/kern subr_taskqueue.c
Scott Long
scottl at samsco.org
Wed Jan 11 05:56:48 PST 2006
John Baldwin wrote:
> On Tuesday 10 January 2006 07:37 pm, Scott Long wrote:
>
>>scottl 2006-01-11 00:37:13 UTC
>>
>> FreeBSD src repository
>>
>> Modified files:
>> sys/kern subr_taskqueue.c
>> Log:
>> The interlock in taskqueue_terminate() is completely wrong for taskqueues
>> that use spinlocks. Remove it for now.
>
>
> Eh? It's waiting for the wakeup that comes from kthread_exit() after the
> thread has exited which is locked via the proc lock. Sleeping on the
> taskqueue itself doesn't buy you anything. (In fact, it might sleep
> forever.) The simplest solution might be to acquire the proc lock a lot
> earlier before the taskqueue lock in this function so that you don't have to
> acquire it while holding the taskqueue lock since that is what gives you
> problems.
>
With the code the way it was, kthread_exit() in taskqueue_thread_loop
can wind up blocking on the proc lock while the lock is still held in
taskqueue_terminate. I don't know why this is actually a problem, but
turning on WITNESS to investigate revealed the immediate problem of
trying to grab the proc lock with a spinlock already held. The
interlock is really just a protection against drivers that don't
adequately quiesce themselves, so I removed it for now until we can
figure out something better.
Scott
More information about the cvs-all
mailing list