From owner-freebsd-arch@FreeBSD.ORG Thu Mar 31 01:24:51 2005 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9203D16A4CE for ; Thu, 31 Mar 2005 01:24:51 +0000 (GMT) Received: from hotmail.com (bay19-f23.bay19.hotmail.com [64.4.53.73]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6FB4D43D1D for ; Thu, 31 Mar 2005 01:24:51 +0000 (GMT) (envelope-from dragonylffly@hotmail.com) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 30 Mar 2005 17:24:51 -0800 Message-ID: Received: from 61.187.16.2 by by19fd.bay19.hotmail.msn.com with HTTP; Thu, 31 Mar 2005 01:24:51 GMT X-Originating-IP: [61.187.16.2] X-Originating-Email: [dragonylffly@hotmail.com] X-Sender: dragonylffly@hotmail.com From: "dragonfly dragonfly" To: freebsd-arch@freebsd.org Date: Thu, 31 Mar 2005 09:24:51 +0800 Mime-Version: 1.0 Content-Type: text/plain; charset=gb2312; format=flowed X-OriginalArrivalTime: 31 Mar 2005 01:24:51.0275 (UTC) FILETIME=[6F8929B0:01C53590] X-Mailman-Approved-At: Thu, 31 Mar 2005 12:39:15 +0000 Subject: FreeBSD module inference count problem X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 31 Mar 2005 01:24:51 -0000 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