svn commit: r368604 - in head/sys/powerpc: include powerpc

Brandon Bergren bdragon at FreeBSD.org
Sun Dec 13 03:58:44 UTC 2020


Author: bdragon
Date: Sun Dec 13 03:58:43 2020
New Revision: 368604
URL: https://svnweb.freebsd.org/changeset/base/368604

Log:
  [PowerPC] Floating-point exception trap followup
  
  * Fix incorrect operation on 32-bit caused by incorrectly-sized storage
    for a temporary FPSCR.
  * Fix several whitespace problems.
  * Don't try to enable VSX during cleanup_fpscr().
  
  Reviewed by:	alfredo, jhibbits (earlier version)
  Sponsored by:	Tag1 Consulting, Inc.
  Differential Revision:	https://reviews.freebsd.org/D27453

Modified:
  head/sys/powerpc/include/cpufunc.h
  head/sys/powerpc/powerpc/exec_machdep.c
  head/sys/powerpc/powerpc/fpu.c

Modified: head/sys/powerpc/include/cpufunc.h
==============================================================================
--- head/sys/powerpc/include/cpufunc.h	Sun Dec 13 02:21:54 2020	(r368603)
+++ head/sys/powerpc/include/cpufunc.h	Sun Dec 13 03:58:43 2020	(r368604)
@@ -163,21 +163,21 @@ mttb(u_quad_t time)
 	mtspr(TBR_TBWL, (uint32_t)(time & 0xffffffff));
 }
 
-
 static __inline register_t
 mffs(void)
 {
-	register_t value;
+	uint64_t value;
 
 	__asm __volatile ("mffs 0; stfd 0,0(%0)"
 			:: "b"(&value));
 
-	return (value);
+	return ((register_t)value);
 }
 
 static __inline void
-mtfsf(register_t value)
+mtfsf(uint64_t value)
 {
+
 	__asm __volatile ("lfd 0,0(%0); mtfsf 0xff,0"
 			:: "b"(&value));
 }

Modified: head/sys/powerpc/powerpc/exec_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/exec_machdep.c	Sun Dec 13 02:21:54 2020	(r368603)
+++ head/sys/powerpc/powerpc/exec_machdep.c	Sun Dec 13 03:58:43 2020	(r368604)
@@ -239,14 +239,13 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask
 		usfp = (void *)((sp - rndfsize) & ~0xFul);
 	}
 
-	/* 
+	/*
 	 * Set Floating Point facility to "Ignore Exceptions Mode" so signal
-	 * handler can run. 
+	 * handler can run.
 	 */
 	if (td->td_pcb->pcb_flags & PCB_FPU)
 		tf->srr1 = tf->srr1 & ~(PSL_FE0 | PSL_FE1);
 
-
 	/*
 	 * Set up the registers to return to sigcode.
 	 *
@@ -334,10 +333,10 @@ sys_sigreturn(struct thread *td, struct sigreturn_args
 	if (error != 0)
 		return (error);
 
-	/* 
+	/*
 	 * Save FPU state if needed. User may have changed it on
-	 * signal handler 
-	 */ 
+	 * signal handler
+	 */
 	if (uc.uc_mcontext.mc_srr1 & PSL_FP)
 		save_fpu(td);
 

Modified: head/sys/powerpc/powerpc/fpu.c
==============================================================================
--- head/sys/powerpc/powerpc/fpu.c	Sun Dec 13 02:21:54 2020	(r368603)
+++ head/sys/powerpc/powerpc/fpu.c	Sun Dec 13 03:58:43 2020	(r368604)
@@ -209,7 +209,6 @@ save_fpu_nodrop(struct thread *td)
 		save_fpu_int(td);
 }
 
-
 /*
  * Clear Floating-Point Status and Control Register
  */
@@ -217,19 +216,18 @@ void
 cleanup_fpscr()
 {
 	register_t msr;
-	msr = mfmsr();
-	mtmsr(msr | PSL_FP | PSL_VSX);
 
+	msr = mfmsr();
+	mtmsr(msr | PSL_FP);
 	mtfsf(0);
 
 	isync();
 	mtmsr(msr);
 }
 
-
 /*
- *  * Returns the current fp exception
- *   */
+ * Get the current fp exception
+ */
 u_int
 get_fpu_exception(struct thread *td)
 {


More information about the svn-src-head mailing list