[PATCH] powerpc: Fix emulate_step() on POWER6

Michael Neuling mikey at neuling.org
Fri May 11 11:35:39 AEST 2018


emulate_step() will fail on POWER6 currently with:

  emulate_step_test: lfdx           : PASS
  emulate_step_test: stfdx          : PASS
  emulate_step_test: lvx            : PASS
  emulate_step_test: stvx           : PASS
  Oops: Exception in kernel mode, sig: 4 [#1]
  BE SMP NR_CPUS=2048 NUMA pSeries
  Modules linked in:
  CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.17.0-rc4-gcc5x-g036db8b #1
  NIP:  c000000000095c24 LR: c000000000094bdc CTR: c00000000008f4a0
  REGS: c0000000494c34f0 TRAP: 0700   Not tainted  (4.17.0-rc4-gcc5x-g036db8b)
  MSR:  8000000000089032 <SF,EE,ME,IR,DR,RI>  CR: 48004224  XER: 20000009
  CFAR: c000000000094bd0 SOFTE: 0
  GPR00: c000000000094bdc c0000000494c3770 c000000001238400 0000000000000027
  GPR04: c0000000494c3870 0000000000000008 8000000000009032 8000000000809032
  GPR08: 0000000000000070 800000000280b032 c0000000494c0000 0000000000000000
  GPR12: 0000000044000428 c000000007fff300 c00000000000e1c0 0000000000000000
  GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
  GPR20: 0000000000000000 bfffffffffffffff c0000000494c3870 0000000000000027
  GPR24: c0000000494c3860 0000000000000000 c000000000da0538 c0000000494c3b90
  GPR28: 0000000000000000 c0000000494c3970 c0000000494c3a20 0000000000000008
  NIP [c000000000095c24] .load_vsrn+0x28/0x54
  LR [c000000000094bdc] .emulate_loadstore+0x167c/0x17b0
  Call Trace:
  [c0000000494c3770] [40fe240c7ae147ae] 0x40fe240c7ae147ae (unreliable)
  [c0000000494c37f0] [c000000000094bdc] .emulate_loadstore+0x167c/0x17b0
  [c0000000494c3900] [c000000000094f6c] .emulate_step+0x25c/0x5bc
  [c0000000494c39b0] [c000000000ec90dc] .test_lxvd2x_stxvd2x+0x64/0x154
  [c0000000494c3b90] [c000000000ec9204] .test_emulate_step+0x38/0x4c
  [c0000000494c3c00] [c00000000000de2c] .do_one_initcall+0x5c/0x2c0
  [c0000000494c3cd0] [c000000000eb4bf8] .kernel_init_freeable+0x314/0x4cc
  [c0000000494c3db0] [c00000000000e1e4] .kernel_init+0x24/0x160
  [c0000000494c3e30] [c00000000000bc24] .ret_from_kernel_thread+0x58/0xb4

The below fixes this by gating the VSX tests on CPU_FTR_VSX.

Tested on POWER9 with VSX disabled and skips the test correctly. Not
tested on POWER6 but the fix is pretty simple.

Fixes: https://github.com/linuxppc/linux/issues/148

Signed-off-by: Michael Neuling <mikey at neuling.org>
---
 arch/powerpc/lib/test_emulate_step.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/powerpc/lib/test_emulate_step.c b/arch/powerpc/lib/test_emulate_step.c
index 2534c14475..f2f2d6e728 100644
--- a/arch/powerpc/lib/test_emulate_step.c
+++ b/arch/powerpc/lib/test_emulate_step.c
@@ -371,6 +371,12 @@ static void __init test_lxvd2x_stxvd2x(void)
 	u32 cached_b[4];
 	int stepped = -1;
 
+	if (!cpu_has_feature(CPU_FTR_VSX)) {
+		show_result("lxvd2x", "SKIP (no VSX on this CPU)");
+		show_result("stxvd2x", "SKIP (no VSX on this CPU)");
+		return;
+	}
+
 	init_pt_regs(&regs);
 
 
-- 
2.14.1



More information about the Linuxppc-dev mailing list