cvs commit: src/sys/sys kthread.h src/sys/kern kern_kthread.c

Julian Elischer julian at elischer.org
Fri Oct 26 12:01:23 PDT 2007


John Baldwin wrote:
> 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);

the kproc_exit still does..

I didn't see any users of it in the code that I've switched to kthreads
so far so I haven't added it to the kthread_exit() yet.

the intr code does:
    thread_lock(td);
        ithread->it_flags |= IT_DEAD;
        if (TD_AWAITING_INTR(td)) {
                TD_CLR_IWAIT(td);
                sched_add(td, SRQ_INTR);
        }
        thread_unlock(td);

but no wait.

but I'll look further.. maybe it's in the drivers?



> 	...
> 
> 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.?
> 



More information about the cvs-all mailing list