From owner-p4-projects@FreeBSD.ORG Thu May 8 08:15:24 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 521C737B401; Thu, 8 May 2003 08:15:23 -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 CC25237B49F; Thu, 8 May 2003 08:15:22 -0700 (PDT) Received: from canning.wemm.org (canning.wemm.org [192.203.228.65]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4D6FA43F85; Thu, 8 May 2003 08:15:22 -0700 (PDT) (envelope-from peter@wemm.org) Received: from wemm.org (localhost [127.0.0.1]) by canning.wemm.org (Postfix) with ESMTP id 36B8D2A8AB; Thu, 8 May 2003 08:15:22 -0700 (PDT) (envelope-from peter@wemm.org) X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 To: John Baldwin In-Reply-To: Date: Thu, 08 May 2003 08:15:22 -0700 From: Peter Wemm Message-Id: <20030508151522.36B8D2A8AB@canning.wemm.org> 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 15:15:24 -0000 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? Cheers, -Peter -- Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com "All of this is for nothing if we don't go to the stars" - JMS/B5