Date: Thu, 31 Mar 2005 09:24:51 +0800 From: "dragonfly dragonfly" <dragonylffly@hotmail.com> To: freebsd-arch@freebsd.org Subject: FreeBSD module inference count problem Message-ID: <BAY19-F23ED19BA60458B19900181DE470@phx.gbl>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BAY19-F23ED19BA60458B19900181DE470>