[RFC PATCH 11/11] selftests/powerpc: Adapt the test
Michael Neuling
mikey at neuling.org
Tue Sep 18 16:36:23 AEST 2018
On Wed, 2018-09-12 at 16:40 -0300, Breno Leitao wrote:
> The Documentation/powerpc/transactional_memory.txt says:
>
> "Syscalls made from within a suspended transaction are performed as normal
> and the transaction is not explicitly doomed by the kernel. However,
> what the kernel does to perform the syscall may result in the transaction
> being doomed by the hardware."
>
> With this new TM mechanism, the syscall will continue to be executed if the
> syscall happens on a suspended syscall, but, the syscall will *fail* if the
> transaction is still active during the syscall invocation.
Not sure I get this. This doesn't seem any different to before.
An active (not suspended) transaction *will* result in the syscall failing and
the transaction being doomed.
A syscall in a suspended transaction should succeed and the transaction.
You might need to clean up the language. I try to use:
Active == transactional but not suspended (ie MSR[TS] = T)
Suspended == suspended (ie MSR [TS] = S)
Doomed == transaction to be rolled back at next opportinity (ie tcheck returns doomed)
(note: the kernel MSR_TM_ACTIVE() macro is not consistent with this since it's
MSR[TS] == S or T).
> On the syscall path, if the transaction is active and not suspended, it
> will call TM_KERNEL_ENTRY which will reclaim and recheckpoint the
> transaction, thus, dooming the transaction on userspace return, with
> failure code TM_CAUSE_SYSCALL.
But the test below is on a suspend transaction?
> This new model will break part of this test, but I understand that that the
> documentation above didn't guarantee that the syscall would succeed, and it
> will never succeed anymore now on.
The syscall should pass in suspend (modulo the normal syscall checks). The
transaction may fail as a result.
> In fact, glibc is calling 'tabort' before every syscalls, thus, any syscall
> called through glibc from inside a transaction will be doomed anyhow.
>
> This patch updates the test case to not assume that a syscall inside a
> active transaction will succeed, because it will not anymore.
>
> Signed-off-by: Breno Leitao <leitao at debian.org>
> ---
> tools/testing/selftests/powerpc/tm/tm-syscall.c | 6 ------
> 1 file changed, 6 deletions(-)
>
> diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall.c
> b/tools/testing/selftests/powerpc/tm/tm-syscall.c
> index 454b965a2db3..1439a87eba3a 100644
> --- a/tools/testing/selftests/powerpc/tm/tm-syscall.c
> +++ b/tools/testing/selftests/powerpc/tm/tm-syscall.c
> @@ -78,12 +78,6 @@ int tm_syscall(void)
> timeradd(&end, &now, &end);
>
> for (count = 0; timercmp(&now, &end, <); count++) {
> - /*
> - * Test a syscall within a suspended transaction and verify
> - * that it succeeds.
> - */
> - FAIL_IF(getppid_tm(true) == -1); /* Should succeed. */
> -
> /*
> * Test a syscall within an active transaction and verify that
> * it fails with the correct failure code.
More information about the Linuxppc-dev
mailing list