]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
selftests/powerpc: Add missing clobbered register to to ptrace TM tests
authorJordan Niethe <jniethe5@gmail.com>
Thu, 29 Jul 2021 04:13:16 +0000 (14:13 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 26 Aug 2021 11:21:06 +0000 (21:21 +1000)
ISA v3.1 removes TM but includes a synthetic implementation for
backwards compatibility.  With this implementation,  the tests
ptrace-tm-spd-gpr and ptrace-tm-gpr should never be able to make any
forward progress and eventually should be killed by the timeout.
Instead on a P10 running in P9 mode, ptrace_tm_gpr fails like so:

test: ptrace_tm_gpr
tags: git_version:unknown
Starting the child
...
...
GPR[27]: 1 Expected: 2
GPR[28]: 1 Expected: 2
GPR[29]: 1 Expected: 2
GPR[30]: 1 Expected: 2
GPR[31]: 1 Expected: 2
[FAIL] Test FAILED on line 98
failure: ptrace_tm_gpr
selftests:  ptrace-tm-gpr [FAIL]

The problem is in the inline assembly of the child. r0 is loaded with a
value in the child's transaction abort handler but this register is not
included in the clobbers list.  This means it is possible that this
statement:
cptr[1] = 0;
which is meant to signal the parent to wait may actually use the value
placed into r0 by the inline assembly incorrectly signal the parent to
continue.

By inspection the same problem is present in ptrace-tm-spd-gpr.

Adding r0 to the clobbbers list makes the test fail correctly via a
timeout on a P10 running in P8/P9 compatibility mode.

Suggested-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210729041317.366612-1-jniethe5@gmail.com
tools/testing/selftests/powerpc/ptrace/ptrace-tm-gpr.c
tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-gpr.c

index 82f7bdc2e5e6f4fb9dc384ca39c2d9a7479e7938..7df7100a29beb3e6e51a401a43461bcfdcf43e25 100644 (file)
@@ -57,7 +57,7 @@ trans:
                : [gpr_1]"i"(GPR_1), [gpr_2]"i"(GPR_2),
                [sprn_texasr] "i" (SPRN_TEXASR), [flt_1] "b" (&a),
                [flt_2] "b" (&b), [cptr1] "b" (&cptr[1])
-               : "memory", "r7", "r8", "r9", "r10",
+               : "memory", "r0", "r7", "r8", "r9", "r10",
                "r11", "r12", "r13", "r14", "r15", "r16",
                "r17", "r18", "r19", "r20", "r21", "r22",
                "r23", "r24", "r25", "r26", "r27", "r28",
index ad65be6e8e85bf303bda411c38e4d1f1eec8992f..8706bea5d015f5e170d108e994c13dfd3ab3399b 100644 (file)
@@ -65,7 +65,7 @@ trans:
                : [gpr_1]"i"(GPR_1), [gpr_2]"i"(GPR_2), [gpr_4]"i"(GPR_4),
                [sprn_texasr] "i" (SPRN_TEXASR), [flt_1] "b" (&a),
                [flt_4] "b" (&d)
-               : "memory", "r5", "r6", "r7",
+               : "memory", "r0", "r5", "r6", "r7",
                "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
                "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
                "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"