Commit 872d11bc authored by Michael Ellerman's avatar Michael Ellerman
Browse files

selftests/powerpc: Skip vmx/vsx/tar/etc tests on older CPUs



Some of our tests use VSX or newer VMX instructions, so need to be
skipped on older CPUs to avoid SIGILL'ing.

Similarly TAR was added in v2.07, and the PMU event used in the stcx
fail test only works on Power8 or later.

Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200803020719.96114-1-mpe@ellerman.id.au
parent 8d8a629d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -11,9 +11,9 @@ $(OUTPUT)/fpu_syscall: fpu_asm.S
$(OUTPUT)/fpu_preempt: fpu_asm.S
$(OUTPUT)/fpu_signal:  fpu_asm.S

$(OUTPUT)/vmx_syscall: vmx_asm.S
$(OUTPUT)/vmx_preempt: vmx_asm.S
$(OUTPUT)/vmx_signal: vmx_asm.S
$(OUTPUT)/vmx_syscall: vmx_asm.S ../utils.c
$(OUTPUT)/vmx_preempt: vmx_asm.S ../utils.c
$(OUTPUT)/vmx_signal: vmx_asm.S ../utils.c

$(OUTPUT)/vsx_preempt: CFLAGS += -mvsx
$(OUTPUT)/vsx_preempt: vsx_asm.S
$(OUTPUT)/vsx_preempt: vsx_asm.S ../utils.c
+3 −0
Original line number Diff line number Diff line
@@ -57,6 +57,9 @@ int test_preempt_vmx(void)
	int i, rc, threads;
	pthread_t *tids;

	// vcmpequd used in vmx_asm.S is v2.07
	SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));

	threads = sysconf(_SC_NPROCESSORS_ONLN) * THREAD_FACTOR;
	tids = malloc(threads * sizeof(pthread_t));
	FAIL_IF(!tids);
+3 −0
Original line number Diff line number Diff line
@@ -96,6 +96,9 @@ int test_signal_vmx(void)
	void *rc_p;
	pthread_t *tids;

	// vcmpequd used in vmx_asm.S is v2.07
	SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));

	threads = sysconf(_SC_NPROCESSORS_ONLN) * THREAD_FACTOR;
	tids = malloc(threads * sizeof(pthread_t));
	FAIL_IF(!tids);
+6 −1
Original line number Diff line number Diff line
@@ -49,9 +49,14 @@ int test_vmx_syscall(void)
	 * Setup an environment with much context switching
	 */
	pid_t pid2;
	pid_t pid = fork();
	pid_t pid;
	int ret;
	int child_ret;

	// vcmpequd used in vmx_asm.S is v2.07
	SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));

	pid = fork();
	FAIL_IF(pid == -1);

	pid2 = fork();
+2 −0
Original line number Diff line number Diff line
@@ -92,6 +92,8 @@ int test_preempt_vsx(void)
	int i, rc, threads;
	pthread_t *tids;

	SKIP_IF(!have_hwcap(PPC_FEATURE_HAS_VSX));

	threads = sysconf(_SC_NPROCESSORS_ONLN) * THREAD_FACTOR;
	tids = malloc(threads * sizeof(pthread_t));
	FAIL_IF(!tids);
Loading