From owner-p4-projects@FreeBSD.ORG Wed May 7 12:30:59 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 368FC37B401; Wed, 7 May 2003 12:30:59 -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 C116E37B404 for ; Wed, 7 May 2003 12:30:58 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 524C443F93 for ; Wed, 7 May 2003 12:30:58 -0700 (PDT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h47JUw0U055295 for ; Wed, 7 May 2003 12:30:58 -0700 (PDT) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h47JUvKw055292 for perforce@freebsd.org; Wed, 7 May 2003 12:30:57 -0700 (PDT) Date: Wed, 7 May 2003 12:30:57 -0700 (PDT) Message-Id: <200305071930.h47JUvKw055292@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Subject: PERFORCE change 30716 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: Wed, 07 May 2003 19:31:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=30716 Change 30716 by peter@peter_daintree on 2003/05/07 12:30:10 Fix the context switch bug with a sledgehammer. Defer re-enabling interrupts till after we've retrieved the user stack pointer from PCPU area, otherwise if we preempt and another process makes a syscall before we resume saving, then all hell breaks loose. This defers the sti for too long and that needs to be fixed, but that can be fixed later. Affected files ... .. //depot/projects/hammer/sys/amd64/amd64/exception.S#2 edit Differences ... ==== //depot/projects/hammer/sys/amd64/amd64/exception.S#2 (text+ko) ==== @@ -202,7 +202,6 @@ #swapgs movq %rsp,PCPU(SCRATCH_RSP) movq common_tss+COMMON_TSS_RSP0,%rsp - sti /* Now emulate a trapframe. Ugh. */ subq $TF_SIZE,%rsp movq $KUDSEL,TF_SS(%rsp) @@ -226,6 +225,7 @@ movq %r15,TF_R15(%rsp) /* C preserved */ movq PCPU(SCRATCH_RSP),%r12 /* %r12 already saved */ movq %r12,TF_RSP(%rsp) /* user stack pointer */ + sti call syscall movq PCPU(CURPCB),%rax testq $PCB_FULLCTX,PCB_FLAGS(%rax)