trace_marker_raw.tc expects the length of each raw event to be rounded
up to a multiple of 4 bytes. That is not the case when the ring buffer
forces 8-byte alignment of events (CONFIG_HAVE_64BIT_ALIGNED_ACCESS):
the id plus the data is rounded up to a multiple of 8 bytes instead, so
trace_pipe shows 8 * N + 4 items. This was seen on riscv64.

Make the test accept either rounding.

Fixes: 37f46601383a ("selftests/tracing: Add basic test for trace_marker_raw 
file")
Reported-by: Hui Wang <[email protected]>
Closes: 
https://lore.kernel.org/all/[email protected]/
Signed-off-by: Sarah Emery <[email protected]>
---
Original v1 patch from Hui Wang was posted in June and only patch 1/2
was merged (commit c37e0a4b79a6).
This is a v2 for commit 2/2, addressing reviews.

Changes since v1:
 - Drop kconfig_enabled() and the CONFIG_HAVE_64BIT_ALIGNED_ACCESS
   lookup. The review of v1 objected that it depends on the kernel config
   being readable from the test environment. The test now accepts the
   4 and 8 byte roundings based on what trace_pipe prints.
 - The expected length for the 8 byte case is unchanged (8 * N + 4).
 - Rebase on 65f26d15f7db ("selftests/ftrace: Fix trace_marker_raw test
   on 64K page kernels"), which changed how the test writes its events.

diff --git a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker_raw.tc 
b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker_raw.tc
index f985ff391463..dd2b94be0947 100644
--- a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker_raw.tc
+++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker_raw.tc
@@ -67,7 +67,8 @@ test_multiple_writes() {
        # add a little buffer
        echo stop > trace_marker
 
-       # Check to make sure the number of entries is the id (rounded up by 4)
+       # Check to make sure the number of entries is the id (rounded up by 4,
+       # or by 8 on architectures forcing 8 byte alignment of ring buffer 
events)
        awk '/.*: # [0-9a-f]* / {
                        print;
                        cnt = -1;
@@ -77,9 +78,12 @@ test_multiple_writes() {
                                        i++;
                                        cnt = strtonum("0x" $i);
                                        num = NF - (i + 1);
-                                       # The number of items is always rounded 
up by 4
+                                       # The number of items is rounded up by 4
-                                       cnt2 = int((cnt + 3) / 4) * 4;
+                                       cnt4 = int((cnt + 3) / 4) * 4;
-                                       if (cnt2 != num) {
+                                       # With forced 8 byte alignment, the id 
(4 bytes) plus the data
+                                       # is rounded up to a multiple of 8, and 
the id is not counted
+                                       cnt8 = int((cnt + 3) / 8) * 8 + 4;
+                                       if (num != cnt4 && num != cnt8) {
                                                exit 1;
                                        }
                                        break;
-- 
2.43.0


Reply via email to