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>