Re: [PATCH] powerpc/selftests: Fix and enhance TM signal context tests

2019-08-27 Thread Michael Ellerman
On Wed, 2019-08-14 at 20:52:11 UTC, Gustavo Romero wrote:
> Currently TM signal context tests for GPR, FPR, VMX, and VSX registers
> print wrong register numbers (wrongly starting from register 0 instead of
> the first register in the non-volatile subset). Besides it the output when
> a mismatch happens is poor giving not much information about which context
> and which register mismatches, because it prints both contexts at the same
> time and not a comparison between the value that mismatches and the value
> expected and, moreover, it stops printing on the first mismatch, but it's
> important to know if there are other mismatches happening beyond the first
> one.
> 
> For instance, this is the current output when a mismatch happens:
> 
> test: tm_signal_context_chk_gpr
> tags: git_version:v5.2-8249-g02e970fae465-dirty
> Failed on 0 GPR 1 or 18446744073709551615
> failure: tm_signal_context_chk_gpr
> 
> test: tm_signal_context_chk_fpu
> tags: git_version:v5.2-8248-g09c289e3ef80
> Failed on 0 FP -1 or -1
> failure: tm_signal_context_chk_fpu
> 
> test: tm_signal_context_chk_vmx
> tags: git_version:v5.2-8248-g09c289e3ef80
> Failed on 0 vmx 0xfffefffdfffc vs 
> 0xfffefffdfffc
> failure: tm_signal_context_chk_vmx
> 
> test: tm_signal_context_chk_vsx
> tags: git_version:v5.2-8248-g09c289e3ef80
> Failed on 0 vsx 0xfefffdfffcff vs 
> 0xfefffdfffcff
> failure: tm_signal_context_chk_vsx
> 
> This commit fixes the register numbers printed and enhances the error
> output by providing a full list of mismatching registers separated by the
> context (non-speculative or speculative context), for example:
> 
> test: tm_signal_context_chk_gpr
> tags: git_version:v5.2-8249-g02e970fae465-dirty
> GPR14 (1st context) == 1 instead of -1 (expected)
> GPR15 (1st context) == 2 instead of -2 (expected)
> GPR14 (2nd context) == 0 instead of 18446744073709551615 (expected)
> GPR15 (2nd context) == 0 instead of 18446744073709551614 (expected)
> failure: tm_signal_context_chk_gpr
> 
> test: tm_signal_context_chk_fpu
> tags: git_version:v5.2-8249-g02e970fae465-dirty
> FPR14 (1st context) == -1 instead of 1 (expected)
> FPR15 (1st context) == -2 instead of 2 (expected)
> failure: tm_signal_context_chk_fpu
> 
> test: tm_signal_context_chk_vmx
> tags: git_version:v5.2-8249-g02e970fae465-dirty
> VMX20 (1st context) == 0xfffefffdfffc instead of 
> 0x0001000200030004 (expected)
> VMX21 (1st context) == 0xfffbfffafff9fff8 instead of 
> 0x0005000600070008 (expected)
> failure: tm_signal_context_chk_vmx
> 
> test: tm_signal_context_chk_vsx
> tags: git_version:v5.2-8249-g02e970fae465-dirty
> VSX20 (1st context) == 0xfefffdfffcff instead of 
> 0x0001000200030004 (expected)
> VSX21 (1st context) == 0xfbfffafff9fff8ff instead of 
> 0x0005000600070008 (expected)
> failure: tm_signal_context_chk_vsx
> 
> Finally, this commit adds comments to the tests in the hope that it will
> help people not so familiar with TM understand the tests.
> 
> Signed-off-by: Gustavo Romero 

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/9d535e200f09ce347afc38c81ec7f2901187e5f0

cheers


[PATCH] powerpc/selftests: Fix and enhance TM signal context tests

2019-08-15 Thread Gustavo Romero
Currently TM signal context tests for GPR, FPR, VMX, and VSX registers
print wrong register numbers (wrongly starting from register 0 instead of
the first register in the non-volatile subset). Besides it the output when
a mismatch happens is poor giving not much information about which context
and which register mismatches, because it prints both contexts at the same
time and not a comparison between the value that mismatches and the value
expected and, moreover, it stops printing on the first mismatch, but it's
important to know if there are other mismatches happening beyond the first
one.

For instance, this is the current output when a mismatch happens:

test: tm_signal_context_chk_gpr
tags: git_version:v5.2-8249-g02e970fae465-dirty
Failed on 0 GPR 1 or 18446744073709551615
failure: tm_signal_context_chk_gpr

test: tm_signal_context_chk_fpu
tags: git_version:v5.2-8248-g09c289e3ef80
Failed on 0 FP -1 or -1
failure: tm_signal_context_chk_fpu

test: tm_signal_context_chk_vmx
tags: git_version:v5.2-8248-g09c289e3ef80
Failed on 0 vmx 0xfffefffdfffc vs 
0xfffefffdfffc
failure: tm_signal_context_chk_vmx

test: tm_signal_context_chk_vsx
tags: git_version:v5.2-8248-g09c289e3ef80
Failed on 0 vsx 0xfefffdfffcff vs 
0xfefffdfffcff
failure: tm_signal_context_chk_vsx

This commit fixes the register numbers printed and enhances the error
output by providing a full list of mismatching registers separated by the
context (non-speculative or speculative context), for example:

test: tm_signal_context_chk_gpr
tags: git_version:v5.2-8249-g02e970fae465-dirty
GPR14 (1st context) == 1 instead of -1 (expected)
GPR15 (1st context) == 2 instead of -2 (expected)
GPR14 (2nd context) == 0 instead of 18446744073709551615 (expected)
GPR15 (2nd context) == 0 instead of 18446744073709551614 (expected)
failure: tm_signal_context_chk_gpr

test: tm_signal_context_chk_fpu
tags: git_version:v5.2-8249-g02e970fae465-dirty
FPR14 (1st context) == -1 instead of 1 (expected)
FPR15 (1st context) == -2 instead of 2 (expected)
failure: tm_signal_context_chk_fpu

test: tm_signal_context_chk_vmx
tags: git_version:v5.2-8249-g02e970fae465-dirty
VMX20 (1st context) == 0xfffefffdfffc instead of 
0x0001000200030004 (expected)
VMX21 (1st context) == 0xfffbfffafff9fff8 instead of 
0x0005000600070008 (expected)
failure: tm_signal_context_chk_vmx

test: tm_signal_context_chk_vsx
tags: git_version:v5.2-8249-g02e970fae465-dirty
VSX20 (1st context) == 0xfefffdfffcff instead of 
0x0001000200030004 (expected)
VSX21 (1st context) == 0xfbfffafff9fff8ff instead of 
0x0005000600070008 (expected)
failure: tm_signal_context_chk_vsx

Finally, this commit adds comments to the tests in the hope that it will
help people not so familiar with TM understand the tests.

Signed-off-by: Gustavo Romero 
---
 .../powerpc/tm/tm-signal-context-chk-fpu.c|  49 +--
 .../powerpc/tm/tm-signal-context-chk-gpr.c|  59 +---
 .../powerpc/tm/tm-signal-context-chk-vmx.c|  74 +++---
 .../powerpc/tm/tm-signal-context-chk-vsx.c| 130 +-
 4 files changed, 228 insertions(+), 84 deletions(-)

diff --git a/tools/testing/selftests/powerpc/tm/tm-signal-context-chk-fpu.c 
b/tools/testing/selftests/powerpc/tm/tm-signal-context-chk-fpu.c
index d57c2d2ab6ec..254f912ad611 100644
--- a/tools/testing/selftests/powerpc/tm/tm-signal-context-chk-fpu.c
+++ b/tools/testing/selftests/powerpc/tm/tm-signal-context-chk-fpu.c
@@ -5,10 +5,11 @@
  * Test the kernel's signal frame code.
  *
  * The kernel sets up two sets of ucontexts if the signal was to be
- * delivered while the thread was in a transaction.
+ * delivered while the thread was in a transaction (referred too as
+ * first and second contexts).
  * Expected behaviour is that the checkpointed state is in the user
- * context passed to the signal handler. The speculated state can be
- * accessed with the uc_link pointer.
+ * context passed to the signal handler (first context). The speculated
+ * state can be accessed with the uc_link pointer (second context).
  *
  * The rationale for this is that if TM unaware code (which linked
  * against TM libs) installs a signal handler it will not know of the
@@ -28,17 +29,20 @@
 
 #define MAX_ATTEMPT 50
 
-#define NV_FPU_REGS 18
+#define NV_FPU_REGS 18 /* Number of non-volatile FP registers */
+#define FPR14 14 /* First non-volatile FP register to check in f14-31 subset */
 
 long tm_signal_self_context_load(pid_t pid, long *gprs, double *fps, vector 
int *vms, vector int *vss);
 
-/* Be sure there are 2x as many as there are NV FPU regs (2x18) */
+/* Test only non-volatile registers, i.e. 18 fpr registers from f14 to f31 */
 static double fps[] = {
+   /* First context will be set with these values, i.e. non-speculative */
 1, 2, 3, 4, 5, 6, 7, 8,