From owner-cvs-all@FreeBSD.ORG Mon Apr 21 10:21:58 2003 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 81D9D37B4A0 for ; Mon, 21 Apr 2003 10:21:57 -0700 (PDT) Received: from mail.speakeasy.net (mail12.speakeasy.net [216.254.0.212]) by mx1.FreeBSD.org (Postfix) with ESMTP id D0CBF43FE0 for ; Mon, 21 Apr 2003 10:21:55 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Received: (qmail 15311 invoked from network); 21 Apr 2003 17:22:00 -0000 Received: from unknown (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender )encrypted SMTP for ; 21 Apr 2003 17:22:00 -0000 Received: from laptop.baldwin.cx (gw1.twc.weather.com [216.133.140.1]) by server.baldwin.cx (8.12.8/8.12.8) with ESMTP id h3LHLrOv090316; Mon, 21 Apr 2003 13:21:53 -0400 (EDT) (envelope-from jhb@FreeBSD.org) Message-ID: X-Mailer: XFMail 1.5.4 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <006c01c3061c$61a7e570$0701a8c0@tiger> Date: Mon, 21 Apr 2003 13:21:56 -0400 (EDT) From: John Baldwin To: David Xu cc: cvs-src@freebsd.org cc: src-committers@freebsd.org cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/alpha/alpha trap.c src/sys/i386/i386 trap.c src/sys/ia64/ia64 trap.c src/sys/kern kern_thread.c src/sys/sparc64/sparc64 trap.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Apr 2003 17:21:58 -0000 On 19-Apr-2003 David Xu wrote: > er, I found some code in i386/i386/trap.c: > > PROC_LOCK(p); > if ((p->p_flag & P_WEXIT) && (p->p_singlethread != td)) { > mtx_lock_spin(&sched_lock); > thread_exit(); > /* NOTREACHED */ > } > PROC_UNLOCK(p); 1.246 (jhb 18-Apr-03): PROC_LOCK(p); 1.228 (julian 29-Jun-02): if ((p->p_flag & P_WEXIT) && (p- >p_singlethread != td)) { 1.228 (julian 29-Jun-02): mtx_lock_spin(&sched_loc k); 1.228 (julian 29-Jun-02): thread_exit(); 1.228 (julian 29-Jun-02): /* NOTREACHED */ 1.228 (julian 29-Jun-02): } 1.246 (jhb 18-Apr-03): PROC_UNLOCK(p); > The P_WEXIT and p_singlethread will never be set at same > time. see kern_exit.c. so the code never be executed. > replacing P_WEXIT with P_SINGLE_EXIT will work, > and because 1:1 thread borrows KSE code, so you now need code > like this: > > PROC_LOCK(p); > if ((p->p_flag & P_SINGLE_EXIT) && (p->p_singlethread != td)) { > mtx_lock_spin(&sched_lock); > if (p->p_flag & P_THREADED) > thread_exit(); > else > thr_exit(); > /* NOTREACHED */ > } > PROC_UNLOCK(p); Well, I'm only fixing locking, I'll leave fixing internal KSE bugs to you. :) If you wanted to consolidate this code into a thread_kern_enter() or some such that would work for me. > I suggest remove such code from trap.c, just keep it in kernel > thread control code (e.g kern_thread.c or kern_thr.c) to reduce > maintain overhead. > > David Xu > > ----- Original Message ----- > From: "John Baldwin" > To: ; ; > Sent: Saturday, April 19, 2003 4:20 AM > Subject: cvs commit: src/sys/alpha/alpha trap.c src/sys/i386/i386 trap.c src/sys/ia64/ia64 trap.c > src/sys/kern kern_thread.c src/sys/sparc64/sparc64 trap.c > > >> jhb 2003/04/18 13:20:00 PDT >> >> FreeBSD src repository >> >> Modified files: >> sys/alpha/alpha trap.c >> sys/i386/i386 trap.c >> sys/ia64/ia64 trap.c >> sys/kern kern_thread.c >> sys/sparc64/sparc64 trap.c >> Log: >> Use the proc lock to protect p_singlethread and a P_WEXIT test. This >> fixes a couple of potential KSE panics on non-i386 arch's that weren't >> holding the proc lock when calling thread_exit(). >> >> Revision Changes Path >> 1.111 +2 -1 src/sys/alpha/alpha/trap.c >> 1.246 +2 -2 src/sys/i386/i386/trap.c >> 1.73 +3 -1 src/sys/ia64/ia64/trap.c >> 1.117 +2 -2 src/sys/kern/kern_thread.c >> 1.59 +2 -1 src/sys/sparc64/sparc64/trap.c > -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/