• Jordan Niethe's avatar
    selftests/powerpc: Add missing clobbered register to to ptrace TM tests · c95278a0
    Jordan Niethe authored
    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: default avatarMichael Neuling <mikey@neuling.org>
    Signed-off-by: default avatarJordan Niethe <jniethe5@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20210729041317.366612-1-jniethe5@gmail.com
    c95278a0
ptrace-tm-spd-gpr.c 3.2 KB