From owner-freebsd-smp Thu Oct 5 11:54:35 2000 Delivered-To: freebsd-smp@freebsd.org Received: from pike.osd.bsdi.com (pike.osd.bsdi.com [204.216.28.222]) by hub.freebsd.org (Postfix) with ESMTP id 1768C37B502 for ; Thu, 5 Oct 2000 11:54:33 -0700 (PDT) Received: from laptop.baldwin.cx (john@dhcp248.osd.bsdi.com [204.216.28.248]) by pike.osd.bsdi.com (8.11.0/8.9.3) with ESMTP id e95Irdi09935; Thu, 5 Oct 2000 11:53:39 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Message-ID: X-Mailer: XFMail 1.4.0 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <200010051826.e95IQfJ12260@grimreaper.grondar.za> Date: Thu, 05 Oct 2000 11:53:53 -0700 (PDT) From: John Baldwin To: Mark Murray Subject: Re: Problems with kthread_exit() and SMPng Cc: freebsd-smp@FreeBSD.org, Boris Popov , Jake Burkholder Sender: owner-freebsd-smp@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On 05-Oct-00 Mark Murray wrote: >> I'll bet that you just need to hold Giant before calling >> kthread_exit(), since exit1() isn't MP-safe yet. Running >> kernel threads outside of the lock is pretty iffy right now. >> >> void >> my_thread(void*arg) >> { >> while(wearewanted) { >> do_something(); >> tsleep(); >> } >> exited = 1; >> mtx_enter(&Giant, MTX_DEF); >> kthread_exit(0); >> } >> >> This should work, but depending on what you're doing it might >> be better to grab Giant as the first thing the thread does. > > Hmm. I'll try that. Will the (kthread_)exit release Giant? Yes. cpu_exit() (called by exit1()) releases Giant as its final act before calling cpu_switch() (should be cpu_throw()) to run the next process. > My thread does a lot of work; if it holds Giant, then it can't be > preempted. That would be a problem. Errr, it can be pre-empted, but your thread doesn't need Giant except for kthread_exit(). > There is another problem; printf's inside a kthread corrupt like > crazy. They look very unthreadsafe. printf() is not MP safe. :-P You probably want to grab Giant before calling printf(). > M > -- > Mark Murray > Join the anti-SPAM movement: http://www.cauce.org -- John Baldwin -- http://www.FreeBSD.org/~jhb/ PGP Key: http://www.baldwin.cx/~john/pgpkey.asc "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message