Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Oct 2007 14:20:33 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Julian Elischer <julian@freebsd.org>
Cc:        cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/sys kthread.h src/sys/kern kern_kthread.c
Message-ID:  <200710261420.34168.jhb@freebsd.org>
In-Reply-To: <200710261703.l9QH3Nmt061137@repoman.freebsd.org>
References:  <200710261703.l9QH3Nmt061137@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 26 October 2007 01:03:22 pm Julian Elischer wrote:
> julian      2007-10-26 17:03:22 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/sys              kthread.h 
>     sys/kern             kern_kthread.c 
>   Log:
>   kthread_exit needs no stinkin argument.

So an important property of the old kthread_exit() (now kproc_exit()) was that 
a kernel module could safely ensure that a kthread it created was out of the 
kernel module's text segment before returning from a module unload hook to 
prevent kernel panics by sleeping on the proc pointer with the proc lock like 
so:

	mtx_lock(&mylock);
	PROC_LOCK(p);
	signal_death = 1;
	mtx_unlock(&mylock);
	msleep(p, &p->p_mtx, ...);
	PROC_UNLOCK(p);

And have the main thread do this:

	...
	mtx_lock(&mylock);
	while (!signal_death) {
		... fetch work, may drop mylock...
	}
	mtx_unlock(&mylock);
	kthread_exit(0);
	...

That was the purpose of the 'wakeup(curthread->td_proc)' in the old 
kthread_exit().  How is this race handled now since the new kthread_exit() 
doesn't have any wakeups, etc.?

-- 
John Baldwin



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