From owner-cvs-src@FreeBSD.ORG Fri Apr 18 19:31:15 2003 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5660037B401; Fri, 18 Apr 2003 19:31:15 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C6AE743FDF; Fri, 18 Apr 2003 19:31:14 -0700 (PDT) (envelope-from davidxu@freebsd.org) Received: from tiger (davidxu@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with SMTP id h3J2VDUp048267; Fri, 18 Apr 2003 19:31:13 -0700 (PDT) (envelope-from davidxu@freebsd.org) Message-ID: <006c01c3061c$61a7e570$0701a8c0@tiger> From: "David Xu" To: "John Baldwin" , , , References: <200304182020.h3IKK02F035021@repoman.freebsd.org> Date: Sat, 19 Apr 2003 10:35:44 +0800 MIME-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 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-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: David Xu List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Apr 2003 02:31:15 -0000 er, I found some code in i386/i386/trap.c: PROC_LOCK(p); if ((p->p_flag & P_WEXIT) && (p->p_singlethread !=3D td)) { mtx_lock_spin(&sched_lock); thread_exit(); /* NOTREACHED */ } 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.=20 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 !=3D td)) { mtx_lock_spin(&sched_lock); if (p->p_flag & P_THREADED) thread_exit(); else thr_exit(); /* NOTREACHED */ } PROC_UNLOCK(p); 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 -----=20 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 >=20 > FreeBSD src repository >=20 > Modified files: > sys/alpha/alpha trap.c=20 > sys/i386/i386 trap.c=20 > sys/ia64/ia64 trap.c=20 > sys/kern kern_thread.c=20 > sys/sparc64/sparc64 trap.c=20 > 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(). > =20 > 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