On Wed, 27 May 2026 17:54:37 +0800
Tianchen Ding <[email protected]> wrote:

> On ARM64 kernels with 64K pages, the trace_marker_raw test fails because
> bash's printf builtin uses stdio buffering which splits output into
> multiple small write() calls to the tracefs file. Since each individual
> write is within TRACE_MARKER_MAX_SIZE (4096), they all succeed, causing
> the "too big" write test to incorrectly pass.
> 
> Fix by piping make_str output through dd with iflag=fullblock to
> guarantee a single atomic write() syscall to trace_marker_raw.
> 
> Fixes: 37f46601383a ("selftests/tracing: Add basic test for trace_marker_raw 
> file")
> Signed-off-by: Tianchen Ding <[email protected]>
> ---
>  .../selftests/ftrace/test.d/00basic/trace_marker_raw.tc     | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> 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 8e905d4fe6dd..efd8263e6087 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
> @@ -43,8 +43,10 @@ write_buffer() {
>       id=$1
>       size=$2
>  
> -     # write the string into the raw marker
> -     make_str $id $size > trace_marker_raw
> +     # Pipe through dd to ensure a single atomic write() syscall.
> +     # Shell's printf builtin uses stdio buffering which may split the
> +     # output into multiple writes.

Could you comment that this is for architectures with 64K pages too.

Thanks for fixing this,

-- Steve

> +     make_str $id $size | dd of=trace_marker_raw bs=`expr $size + 4` 
> iflag=fullblock
>  }
>  
>  


Reply via email to