| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0 |
| # description: Basic tests on writing to trace_marker |
| # requires: trace_marker |
| # flags: instance |
| |
| get_buffer_data_size() { |
| sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page |
| } |
| |
| get_buffer_data_offset() { |
| sed -ne 's/^.*data.*offset:\([0-9][0-9]*\).*/\1/p' events/header_page |
| } |
| |
| get_event_header_size() { |
| type_len=`sed -ne 's/^.*type_len.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` |
| time_len=`sed -ne 's/^.*time_delta.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` |
| array_len=`sed -ne 's/^.*array.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` |
| total_bits=$((type_len+time_len+array_len)) |
| total_bits=$((total_bits+7)) |
| echo $((total_bits/8)) |
| } |
| |
| get_print_event_buf_offset() { |
| sed -ne 's/^.*buf.*offset:\([0-9][0-9]*\).*/\1/p' events/ftrace/print/format |
| } |
| |
| event_header_size=`get_event_header_size` |
| print_header_size=`get_print_event_buf_offset` |
| |
| data_offset=`get_buffer_data_offset` |
| |
| marker_meta=$((event_header_size+print_header_size)) |
| |
| make_str() { |
| cnt=$1 |
| # subtract two for \n\0 as marker adds these |
| cnt=$((cnt-2)) |
| printf -- 'X%.0s' $(seq $cnt) |
| } |
| |
| write_buffer() { |
| size=$1 |
| |
| str=`make_str $size` |
| |
| # clear the buffer |
| echo > trace |
| |
| # write the string into the marker |
| echo -n $str > trace_marker |
| |
| echo $str |
| } |
| |
| test_buffer() { |
| |
| size=`get_buffer_data_size` |
| oneline_size=$((size-marker_meta)) |
| echo size = $size |
| echo meta size = $marker_meta |
| |
| # Now add a little more the meta data overhead will overflow |
| |
| str=`write_buffer $size` |
| |
| # Make sure the line was broken |
| new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: /,"");printf "%s", $0; exit}' trace` |
| |
| if [ "$new_str" = "$str" ]; then |
| exit fail; |
| fi |
| |
| # Make sure the entire line can be found |
| new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: /,"");printf "%s", $0; }' trace` |
| |
| if [ "$new_str" != "$str" ]; then |
| exit fail; |
| fi |
| } |
| |
| test_buffer |