FreeBSD module inference count problem

dragonfly dragonfly dragonylffly at hotmail.com
Wed Mar 30 17:24:51 PST 2005


Hi all, 
Recently I am doing some programming on FreeBSD KLD. 
In my KLD codes,I will start some kernel threads to serve requests,but i 
can not find how to increase the module reference count,something like 
'MOD_INC_USE_COUNT' in Linux.If not do so,if the user 
downloaded the module before all kernel threads exit, 
the system must be panic.I searched the file 'module.h' 
carefully,only find module_reference().But it seemed in 
total kernel source,the function does not be used.Even 
use it,when i use kldstat to see its reference count,it keep __1__! 
When i download the module before the kernel thread wake up, 
system panic as expect. 
my KLD codes like below: 
module_t curmod; 
void do_job(void *arg) 
{ 
if (!curmod) 
printf("Module not found\n"); 
else 
module_reference(curmod); 
tsleep(curproc,PRIBIO,"foo worker",15*hz); 
printf("Wake up\n"); 
if (curmod) 
module_release(curmod); 
kthread_exit(0); 
} 
static int foo_loader(struct module *m, int what, void *arg) 
{ 
int err = 0; 
struct proc *newpp; 

switch (what) { 
case MOD_LOAD: 
curmod=m; 
kthread_create(do_job,NULL,&newpp,0,0,"foo worker"); 
printf("foo loaded\n"); 
break; 
case MOD_UNLOAD: 
case MOD_SHUTDOWN: 
printf("foo unloaded.\n"); 
break; 
default: 
err = EOPNOTSUPP; 
break; 
} 

return(err); 
} 
Could you help me? 
Thanks.

_________________________________________________________________
ÓëÁª»úµÄÅóÓѽøÐн»Á÷£¬ÇëʹÓà MSN Messenger:  http://messenger.msn.com/cn  



More information about the freebsd-arch mailing list