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