diff mbox series

[1/5] selftests/powerpc: Fix error handling in FPU/VMX preemption tests

Message ID 20231128132748.1990179-1-mpe@ellerman.id.au (mailing list archive)
State Accepted
Commit 9dbd5927408c4a0707de73ae9dd9306b184e8fee
Headers show
Series [1/5] selftests/powerpc: Fix error handling in FPU/VMX preemption tests | expand

Commit Message

Michael Ellerman Nov. 28, 2023, 1:27 p.m. UTC
The FPU & VMX preemption tests do not check for errors returned by the
low-level asm routines, preempt_fpu() / preempt_vsx() respectively.
That means any register corruption detected by the asm routines does not
result in a test failure.

Fix it by returning the return value of the asm routines from the
pthread child routines.

Fixes: e5ab8be68e44 ("selftests/powerpc: Test preservation of FPU and VMX regs across preemption")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 tools/testing/selftests/powerpc/math/fpu_preempt.c |  9 +++++----
 tools/testing/selftests/powerpc/math/vmx_preempt.c | 10 ++++++----
 2 files changed, 11 insertions(+), 8 deletions(-)

Comments

Michael Ellerman Dec. 21, 2023, 10:38 a.m. UTC | #1
On Wed, 29 Nov 2023 00:27:44 +1100, Michael Ellerman wrote:
> The FPU & VMX preemption tests do not check for errors returned by the
> low-level asm routines, preempt_fpu() / preempt_vsx() respectively.
> That means any register corruption detected by the asm routines does not
> result in a test failure.
> 
> Fix it by returning the return value of the asm routines from the
> pthread child routines.
> 
> [...]

Applied to powerpc/next.

[1/5] selftests/powerpc: Fix error handling in FPU/VMX preemption tests
      https://git.kernel.org/powerpc/c/9dbd5927408c4a0707de73ae9dd9306b184e8fee
[2/5] selftests/powerpc: Check all FPRs in fpu_preempt
      https://git.kernel.org/powerpc/c/e5d00aaac651a69b8016d355123438387bfd37be
[3/5] selftests/powerpc: Generate better bit patterns for FPU tests
      https://git.kernel.org/powerpc/c/2ba107f6795d780bb54b85040a9b2c6a60fccb15
[4/5] selftests/powerpc: Run fpu_preempt test for 60 seconds
      https://git.kernel.org/powerpc/c/60d2c3af9a0c04dc2d34a62e9f5e7033b40dfed8
[5/5] selftests/powerpc: Check all FPRs in fpu_syscall test
      https://git.kernel.org/powerpc/c/1bdf22580b794a498b17617bcd7ae417d6b78444

cheers
diff mbox series

Patch

diff --git a/tools/testing/selftests/powerpc/math/fpu_preempt.c b/tools/testing/selftests/powerpc/math/fpu_preempt.c
index 5235bdc8c0b1..3e5b5663d244 100644
--- a/tools/testing/selftests/powerpc/math/fpu_preempt.c
+++ b/tools/testing/selftests/powerpc/math/fpu_preempt.c
@@ -37,19 +37,20 @@  __thread double darray[] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,
 int threads_starting;
 int running;
 
-extern void preempt_fpu(double *darray, int *threads_starting, int *running);
+extern int preempt_fpu(double *darray, int *threads_starting, int *running);
 
 void *preempt_fpu_c(void *p)
 {
+	long rc;
 	int i;
+
 	srand(pthread_self());
 	for (i = 0; i < 21; i++)
 		darray[i] = rand();
 
-	/* Test failed if it ever returns */
-	preempt_fpu(darray, &threads_starting, &running);
+	rc = preempt_fpu(darray, &threads_starting, &running);
 
-	return p;
+	return (void *)rc;
 }
 
 int test_preempt_fpu(void)
diff --git a/tools/testing/selftests/powerpc/math/vmx_preempt.c b/tools/testing/selftests/powerpc/math/vmx_preempt.c
index 6761d6ce30ec..6f7cf400c687 100644
--- a/tools/testing/selftests/powerpc/math/vmx_preempt.c
+++ b/tools/testing/selftests/powerpc/math/vmx_preempt.c
@@ -37,19 +37,21 @@  __thread vector int varray[] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10,11,12},
 int threads_starting;
 int running;
 
-extern void preempt_vmx(vector int *varray, int *threads_starting, int *running);
+extern int preempt_vmx(vector int *varray, int *threads_starting, int *running);
 
 void *preempt_vmx_c(void *p)
 {
 	int i, j;
+	long rc;
+
 	srand(pthread_self());
 	for (i = 0; i < 12; i++)
 		for (j = 0; j < 4; j++)
 			varray[i][j] = rand();
 
-	/* Test fails if it ever returns */
-	preempt_vmx(varray, &threads_starting, &running);
-	return p;
+	rc = preempt_vmx(varray, &threads_starting, &running);
+
+	return (void *)rc;
 }
 
 int test_preempt_vmx(void)