From owner-p4-projects@FreeBSD.ORG Tue Mar 21 05:21:27 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3ABA816A424; Tue, 21 Mar 2006 05:21:27 +0000 (UTC) X-Original-To: perforce@freebsd.org 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 0342716A401 for ; Tue, 21 Mar 2006 05:21:27 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id A649543D45 for ; Tue, 21 Mar 2006 05:21:26 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k2L5LQo2007726 for ; Tue, 21 Mar 2006 05:21:26 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k2L5LQJ5007723 for perforce@freebsd.org; Tue, 21 Mar 2006 05:21:26 GMT (envelope-from kmacy@freebsd.org) Date: Tue, 21 Mar 2006 05:21:26 GMT Message-Id: <200603210521.k2L5LQJ5007723@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 93690 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2006 05:21:27 -0000 http://perforce.freebsd.org/chv.cgi?CH=93690 Change 93690 by kmacy@kmacy_storage:sun4vtmp on 2006/03/21 05:20:52 track pcb's real address Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sparc64/sparc64/genassym.c#14 edit .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/swtch.S#14 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sparc64/sparc64/genassym.c#14 (text+ko) ==== @@ -219,6 +219,9 @@ ASSYM(PC_KWBUF_SP, offsetof(struct pcpu, pc_kwbuf_sp)); ASSYM(PC_KWBUF, offsetof(struct pcpu, pc_kwbuf)); ASSYM(PC_PMAP, offsetof(struct pcpu, pc_curpmap)); +ASSYM(PC_CURPCB_RA, offsetof(struct pcpu, pc_curpcb_ra)); + +ASSYM(PCB_RA, offsetof(struct pcb, pcb_ra)); #else ASSYM(PC_TLB_CTX, offsetof(struct pcpu, pc_tlb_ctx)); ASSYM(PC_TLB_CTX_MAX, offsetof(struct pcpu, pc_tlb_ctx_max)); @@ -286,6 +289,10 @@ ASSYM(PCB_NSAVED, offsetof(struct pcb, pcb_nsaved)); ASSYM(PCB_PC, offsetof(struct pcb, pcb_pc)); ASSYM(PCB_SP, offsetof(struct pcb, pcb_sp)); + + + + ASSYM(PCB_FEF, PCB_FEF); ASSYM(VM_PMAP, offsetof(struct vmspace, vm_pmap)); ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/swtch.S#14 (text+ko) ==== @@ -49,6 +49,25 @@ mov %i1, %i0 END(cpu_throw) + +ENTRY(pcb_ra_miss) + call pmap_kextract + mov PCB_REG, %o0 + mov %o0, %l0 +#ifdef DEBUG + ! sanity check lookup + brnz %o0, 1f + nop + MAGIC_TRAP_ON + MAGIC_EXIT +1: +#endif + ba,pt %xcc, pcb_ra_uptodate + stx %l0, [PCB_REG + PCB_RA] +END(pcb_ra_miss) + + + /* * void cpu_switch(struct thread *old, struct thread *new) */ @@ -102,7 +121,7 @@ * the current thread and pcb. */ .Lsw1: -#if KTR_COMPILE & KTR_PROC +#if KTR_COMPILE & KTR_PROC & 0 CATR(KTR_PROC, "cpu_switch: new td=%p pc=%#lx fp=%#lx" , %g1, %g2, %g3, 7, 8, 9) stx %i0, [%g1 + KTR_PARM1] @@ -128,19 +147,24 @@ */ ldx [PCB_REG + PCB_SP], %fp ldx [PCB_REG + PCB_PC], %i7 + ldx [PCB_REG + PCB_RA], %l0 sub %fp, CCFSZ, %sp - + brz %l0, pcb_ra_miss + nop +pcb_ra_uptodate: + /* * Point to the pmaps of the new process, and of the last non-kernel * process to run. */ + stx %l0, [PCPU(CURPCB_RA)] ldx [%i0 + TD_PROC], %i2 ldx [PCPU(PMAP)], %l2 ldx [%i2 + P_VMSPACE], %i5 add %i5, VM_PMAP, %i2 -#if KTR_COMPILE & KTR_PROC +#if KTR_COMPILE & KTR_PROC & 0 CATR(KTR_PROC, "cpu_switch: new pmap=%p old pmap=%p" , %g1, %g2, %g3, 7, 8, 9) stx %i2, [%g1 + KTR_PARM1]