Module Name:    src
Committed By:   martin
Date:           Thu Feb 27 18:32:08 UTC 2020

Modified Files:
        src/sys/arch/powerpc/powerpc [netbsd-9]: fpu.c powerpc_machdep.c

Log Message:
Pull up following revision(s) (requested by rin in ticket #733):

        sys/arch/powerpc/powerpc/fpu.c: revision 1.39
        sys/arch/powerpc/powerpc/powerpc_machdep.c: revision 1.77

Provide no-op's as pcu_ops_md_defs[PCU_FPU] even if !PPC_HAVE_FPU.

This is required by subr_pcu.c rev 1.21 and later:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/subr_pcu.c#rev1.21

Otherwise, panic occurs when FP instruction is emulated on machines
without FPU.

Note that PowerPC UISA as well as SVR4 ABI require FP instructions,
and emulation is enabled unconditionally on machines without FPU.


To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.38.18.1 src/sys/arch/powerpc/powerpc/fpu.c
cvs rdiff -u -r1.72 -r1.72.4.1 src/sys/arch/powerpc/powerpc/powerpc_machdep.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.38 src/sys/arch/powerpc/powerpc/fpu.c:1.38.18.1
--- src/sys/arch/powerpc/powerpc/fpu.c:1.38	Thu Mar 16 16:13:20 2017
+++ src/sys/arch/powerpc/powerpc/fpu.c	Thu Feb 27 18:32:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu.c,v 1.38 2017/03/16 16:13:20 chs Exp $	*/
+/*	$NetBSD: fpu.c,v 1.38.18.1 2020/02/27 18:32:08 martin Exp $	*/
 
 /*
  * Copyright (C) 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.38 2017/03/16 16:13:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.38.18.1 2020/02/27 18:32:08 martin Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -47,19 +47,15 @@ __KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.38
 #include <machine/fpu.h>
 #include <machine/psl.h>
 
-#ifdef PPC_HAVE_FPU
 static void fpu_state_load(lwp_t *, u_int);
 static void fpu_state_save(lwp_t *);
 static void fpu_state_release(lwp_t *);
-#endif
 
 const pcu_ops_t fpu_ops = {
 	.pcu_id = PCU_FPU,
-#ifdef PPC_HAVE_FPU
 	.pcu_state_load = fpu_state_load,
 	.pcu_state_save = fpu_state_save,
 	.pcu_state_release = fpu_state_release,
-#endif
 };
 
 bool
@@ -74,10 +70,10 @@ fpu_mark_used(lwp_t *l)
 	pcu_discard(&fpu_ops, l, true);
 }
 
-#ifdef PPC_HAVE_FPU
 void
 fpu_state_load(lwp_t *l, u_int flags)
 {
+#ifdef PPC_HAVE_FPU
 	struct pcb * const pcb = lwp_getpcb(l);
 
 	if ((flags & PCU_VALID) == 0) {
@@ -98,6 +94,7 @@ fpu_state_load(lwp_t *l, u_int flags)
 
 	curcpu()->ci_ev_fpusw.ev_count++;
 	l->l_md.md_utf->tf_srr1 |= PSL_FP|(pcb->pcb_flags & (PCB_FE0|PCB_FE1));
+#endif
 }
 
 /*
@@ -106,6 +103,7 @@ fpu_state_load(lwp_t *l, u_int flags)
 void
 fpu_state_save(lwp_t *l)
 {
+#ifdef PPC_HAVE_FPU
 	struct pcb * const pcb = lwp_getpcb(l);
 
 	const register_t msr = mfmsr();
@@ -117,14 +115,18 @@ fpu_state_save(lwp_t *l)
 
 	mtmsr(msr);
 	__asm volatile ("isync");
+#endif
 }
 
 void
 fpu_state_release(lwp_t *l)
 {
+#ifdef PPC_HAVE_FPU
 	l->l_md.md_utf->tf_srr1 &= ~PSL_FP;
+#endif
 }
 
+#ifdef PPC_HAVE_FPU
 #define	STICKYBITS	(FPSCR_VX|FPSCR_OX|FPSCR_UX|FPSCR_ZX|FPSCR_XX)
 #define	STICKYSHIFT	25
 #define	MASKBITS	(FPSCR_VE|FPSCR_OE|FPSCR_UE|FPSCR_ZE|FPSCR_XE)

Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c
diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.72 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.72.4.1
--- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.72	Sun Sep 16 09:25:47 2018
+++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c	Thu Feb 27 18:32:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: powerpc_machdep.c,v 1.72 2018/09/16 09:25:47 skrll Exp $	*/
+/*	$NetBSD: powerpc_machdep.c,v 1.72.4.1 2020/02/27 18:32:08 martin Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.72 2018/09/16 09:25:47 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.72.4.1 2020/02/27 18:32:08 martin Exp $");
 
 #include "opt_altivec.h"
 #include "opt_ddb.h"
@@ -89,9 +89,7 @@ extern int powersave;
 char *booted_kernel;
 
 const pcu_ops_t * const pcu_ops_md_defs[PCU_UNIT_COUNT] = {
-#if defined(PPC_HAVE_FPU)
 	[PCU_FPU] = &fpu_ops,
-#endif
 #if defined(ALTIVEC) || defined(PPC_HAVE_SPE)
 	[PCU_VEC] = &vec_ops,
 #endif

Reply via email to