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 [EMAIL PROTECTED] -- 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 [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message