Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Oct 2000 14:46:49 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        freebsd-current@FreeBSD.org, freebsd-smp@FreeBSD.org, Boris Popov <bp@butya.kz>
Subject:   RE: Problems with kthread_exit() and SMPng
Message-ID:  <XFMail.001005144649.jhb@FreeBSD.org>
In-Reply-To: <XFMail.001005143107.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Ugh, my mail client ate my reply, lemme try again.
 
> On 05-Oct-00 Boris Popov wrote:
>>      Hello,
>> 
>>      Currently I'm trying to make KLD which uses kernel threads
>> unloadable under recent -current. The prototype of functions looks like
>> this:
>> 
>> void
>> my_thread(void*arg)
>> {
>>      while(wearewanted) {
>>              do_something();
>>              tsleep();
>>      }
>>      exited = 1;
>>      kthread_exit(0);
>> }

You need Giant before calling kthread_exit().

>> void
>> my_unload()
>> {
>>      wearewanted = 0;
>>      while (!exited)
>>              tsleep(1sec);
>> }
>> 
>>      my_unload() function called from the module unload event which
>> issued from the kldunload() syscall.
>> 
>>      Unfortunately, kernel panics in the mtx_exit_hard() function.
>> After some examination I've found that two fields in the Giant mutex
>> structure set to unexpected values:

It should have died much earlier if you had INVARIANTS turned on. :(  It
looks like you are releasing a mutex you probably do not own because
cpu_exit() (called by exit1() -> exit() -> kthread_exit()) releases Giant
as one of its final tasks.

>> ----
>> empty mtx_blocked for mutex Giant
>> mtx_contested not in any list for mutex Giant
>> ----
>> 
>>      These messages printed by added diagnostics code. With this patch
>> (see attachment) it is possible to load and unload KLD without any
>> problems on UP machine except that the above messages printed. However,
>> I'm don't know if they are correct. (btw, 4.1 doesn't have this problem).

This patch is bogus I'm afraid.  A contested mutex should always have a
process waiting to grab it when it is released.

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.001005144649.jhb>