From owner-p4-projects@FreeBSD.ORG Tue Apr 8 15:50:34 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0B58537B404; Tue, 8 Apr 2003 15:50:34 -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 B684E37B401 for ; Tue, 8 Apr 2003 15:50:33 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5BDAF43FA3 for ; Tue, 8 Apr 2003 15:50:33 -0700 (PDT) (envelope-from marcel@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 h38MoX0U098506 for ; Tue, 8 Apr 2003 15:50:33 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h38MoWb1098485 for perforce@freebsd.org; Tue, 8 Apr 2003 15:50:32 -0700 (PDT) Date: Tue, 8 Apr 2003 15:50:32 -0700 (PDT) Message-Id: <200304082250.h38MoWb1098485@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 28571 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: Tue, 08 Apr 2003 22:50:35 -0000 http://perforce.freebsd.org/chv.cgi?CH=28571 Change 28571 by marcel@marcel_nfs on 2003/04/08 15:50:16 Have savectx() return 0 and restorectx() return 1. That way we can swap contexts without actually having to create a swapctx() function, because we can write it like: if (!savectx(oldpcb)) restorectx(newpcb); This pretty much behaves like setjmp()/longjmp() this way. The prime reason is that we have the right pmap installed when we save and restore the contexts. Keep swapctx() around for now in case things don't turn out the way I thought it would do. Affected files ... .. //depot/projects/ia64_epc/sys/ia64/ia64/context.s#7 edit .. //depot/projects/ia64_epc/sys/ia64/ia64/machdep.c#7 edit .. //depot/projects/ia64_epc/sys/ia64/include/pcb.h#5 edit Differences ... ==== //depot/projects/ia64_epc/sys/ia64/ia64/context.s#7 (text+ko) ==== @@ -148,9 +148,12 @@ ldf.fill f26=[r32],32 ldf.fill f27=[r31],32 ;; +{ .mmi ldf.fill f28=[r32],32 ldf.fill f29=[r31],32 + add r8=1,r0 ;; +} { .mmb ldf.fill f30=[r32] ldf.fill f31=[r31] @@ -284,9 +287,9 @@ stf.spill [r31]=f29,32 stf.spill [r32]=f30 ;; -{ .mfb +{ .mib stf.spill [r31]=f31 - nop 0 +(p15) add r8=0,r0 (p15) br.ret.sptk rp ;; } ==== //depot/projects/ia64_epc/sys/ia64/ia64/machdep.c#7 (text+ko) ==== @@ -215,9 +215,11 @@ oldpcb = old->td_pcb; oldpcb->pcb_current_pmap = PCPU_GET(current_pmap); - newpcb = new->td_pcb; - pmap_install(newpcb->pcb_current_pmap); - swapctx(oldpcb, newpcb); + if (!savectx(oldpcb)) { + newpcb = new->td_pcb; + pmap_install(newpcb->pcb_current_pmap); + restorectx(newpcb); + } } void ==== //depot/projects/ia64_epc/sys/ia64/include/pcb.h#5 (text+ko) ==== @@ -49,8 +49,8 @@ }; #ifdef _KERNEL -void restorectx(struct pcb *); -void savectx(struct pcb *); +void restorectx(struct pcb *) __dead2; +int savectx(struct pcb *); void swapctx(struct pcb *old, struct pcb *new); #endif