diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2017-05-19 03:29:04 +0200 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-05-19 11:46:34 +0200 |
commit | fe06fe860250a4f01d0eaf70a2563b1997174a74 (patch) | |
tree | 0bcce900e1a98434d35aa9bf6e9a4dfccc80d800 /tools/testing/selftests | |
parent | powerpc/mm: Fix virt_addr_valid() etc. on 64-bit hash (diff) | |
download | linux-fe06fe860250a4f01d0eaf70a2563b1997174a74.tar.xz linux-fe06fe860250a4f01d0eaf70a2563b1997174a74.zip |
selftests/powerpc: Fix TM resched DSCR test with some compilers
The tm-resched-dscr test has started failing sometimes, depending on
what compiler it's built with, eg:
test: tm_resched_dscr
Check DSCR TM context switch: tm-resched-dscr: tm-resched-dscr.c:76: test_body: Assertion `rv' failed.
!! child died by signal 6
When it fails we see that the compiler doesn't initialise rv to 1 before
entering the inline asm block. Although that's counter intuitive, it
is allowed because we tell the compiler that the inline asm will write
to rv (using "=r"), meaning the original value is irrelevant.
Marking it as a read/write parameter would presumably work, but it seems
simpler to fix it by setting the initial value of rv in the inline asm.
Fixes: 96d016108640 ("powerpc: Correct DSCR during TM context switch")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Acked-by: Michael Neuling <mikey@neuling.org>
Diffstat (limited to 'tools/testing/selftests')
-rw-r--r-- | tools/testing/selftests/powerpc/tm/tm-resched-dscr.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c index d9c49f41515e..e79ccd6aada1 100644 --- a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c +++ b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c @@ -42,12 +42,12 @@ int test_body(void) printf("Check DSCR TM context switch: "); fflush(stdout); for (;;) { - rv = 1; asm __volatile__ ( /* set a known value into the DSCR */ "ld 3, %[dscr1];" "mtspr %[sprn_dscr], 3;" + "li %[rv], 1;" /* start and suspend a transaction */ "tbegin.;" "beq 1f;" |