From owner-p4-projects@FreeBSD.ORG Thu May 8 09:53:25 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 658FF37B404; Thu, 8 May 2003 09:53:24 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D388337B401 for ; Thu, 8 May 2003 09:53:23 -0700 (PDT) Received: from mail.speakeasy.net (mail15.speakeasy.net [216.254.0.215]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2D1B343F85 for ; Thu, 8 May 2003 09:53:23 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Received: (qmail 16470 invoked from network); 8 May 2003 16:53:25 -0000 Received: from unknown (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender )encrypted SMTP for ; 8 May 2003 16:53:25 -0000 Received: from laptop.baldwin.cx ([216.133.140.1]) by server.baldwin.cx (8.12.8/8.12.8) with ESMTP id h48Gr6p0008959; Thu, 8 May 2003 12:53:08 -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: <20030508151522.36B8D2A8AB@canning.wemm.org> Date: Thu, 08 May 2003 12:53:09 -0400 (EDT) From: John Baldwin To: Peter Wemm cc: Perforce Change Reviews Subject: Re: PERFORCE change 30777 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 May 2003 16:53:25 -0000 On 08-May-2003 Peter Wemm wrote: > John Baldwin wrote: >> >> On 08-May-2003 Peter Wemm wrote: >> > http://perforce.freebsd.org/chv.cgi?CH=30777 >> > >> > Change 30777 by peter@peter_overcee on 2003/05/08 01:21:28 >> > >> > Change the page IDTVEC back to an interrupt gate instead of a trap >> > gate. Otherwise we could preempt and %cr2 could be reused on another >> > process when it faults. >> > >> > Affected files ... >> > >> > .. //depot/projects/hammer/sys/amd64/amd64/machdep.c#12 edit >> > .. //depot/projects/hammer/sys/amd64/amd64/trap.c#6 edit >> > >> > Differences ... >> > >> > ==== //depot/projects/hammer/sys/amd64/amd64/machdep.c#12 (text+ko) ==== >> > >> > @@ -1219,7 +1219,7 @@ >> > setidt(11, &IDTVEC(missing), SDT_SYSTGT, SEL_KPL, 0); >> > setidt(12, &IDTVEC(stk), SDT_SYSTGT, SEL_KPL, 0); >> > setidt(13, &IDTVEC(prot), SDT_SYSTGT, SEL_KPL, 0); >> > - setidt(14, &IDTVEC(page), SDT_SYSTGT, SEL_KPL, 0); >> > + setidt(14, &IDTVEC(page), SDT_SYSIGT, SEL_KPL, 0); >> > setidt(15, &IDTVEC(rsvd), SDT_SYSTGT, SEL_KPL, 0); >> > setidt(16, &IDTVEC(fpu), SDT_SYSTGT, SEL_KPL, 0); >> > setidt(17, &IDTVEC(align), SDT_SYSTGT, SEL_KPL, 0); >> > >> > ==== //depot/projects/hammer/sys/amd64/amd64/trap.c#6 (text+ko) ==== >> > >> > @@ -213,9 +213,17 @@ >> > * do the VM lookup, so just consider it a fatal trap so the >> > * kernel can print out a useful trap message and even get >> > * to the debugger. >> > + * >> > + * Note that T_PAGEFLT is registered as an interrupt gate. T > his >> > + * is just like a trap gate, except interrupts are disabled. > This >> > + * happens to be critically important, because we could other > wise >> > + * preempt and run another process that may cause %cr2 to be >> > + * clobbered for something else. >> > */ >> > eva = rcr2(); >> > - if (PCPU_GET(spinlocks) != NULL) >> > + if (PCPU_GET(spinlocks) == NULL) >> > + enable_intr(); >> > + else >> > trap_fatal(&frame, eva); >> > } >> >> The spinlocks check only works if witness is on. What you want to >> do is check td_critnest > 0 instead. > > Hmm. I was just going by the i386 code. Is that wrong too, or is this > because I'm using the cheat implementation of the nonlazy critical masking? The i386 code is wrong, I fixed it this morning in the smpng branch. :) I need to make sure I didn't screw it up (make sure it boots ok and stuff) and then get it into HEAD. Then you can put the final version into amd64. It is actually less fatal to be wrong here on i386 because it has the lazy interrupt masking evil. -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/