Module Name: src Committed By: matt Date: Mon Jul 6 01:55:50 UTC 2015
Modified Files: src/sys/arch/powerpc/powerpc: fpu.c Log Message: Don't reload the FPU register if this is just a re-enable. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/powerpc/powerpc/fpu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/powerpc/fpu.c diff -u src/sys/arch/powerpc/powerpc/fpu.c:1.35 src/sys/arch/powerpc/powerpc/fpu.c:1.36 --- src/sys/arch/powerpc/powerpc/fpu.c:1.35 Fri May 16 00:48:41 2014 +++ src/sys/arch/powerpc/powerpc/fpu.c Mon Jul 6 01:55:50 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu.c,v 1.35 2014/05/16 00:48:41 rmind Exp $ */ +/* $NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.35 2014/05/16 00:48:41 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $"); #include "opt_multiprocessor.h" @@ -84,15 +84,17 @@ fpu_state_load(lwp_t *l, u_int flags) memset(&pcb->pcb_fpu, 0, sizeof(pcb->pcb_fpu)); } - const register_t msr = mfmsr(); - mtmsr((msr & ~PSL_EE) | PSL_FP); - __asm volatile ("isync"); + if ((flags & PCU_REENABLE) == 0) { + const register_t msr = mfmsr(); + mtmsr((msr & ~PSL_EE) | PSL_FP); + __asm volatile ("isync"); - fpu_load_from_fpreg(&pcb->pcb_fpu); - __asm volatile ("sync"); + fpu_load_from_fpreg(&pcb->pcb_fpu); + __asm volatile ("sync"); - mtmsr(msr); - __asm volatile ("isync"); + mtmsr(msr); + __asm volatile ("isync"); + } curcpu()->ci_ev_fpusw.ev_count++; l->l_md.md_utf->tf_srr1 |= PSL_FP|(pcb->pcb_flags & (PCB_FE0|PCB_FE1));