All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Lawrence <joe.lawrence@redhat.com>
To: Filipe Xavier <felipeaggger@gmail.com>
Cc: Josh Poimboeuf <jpoimboe@kernel.org>,
	Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>,
	Petr Mladek <pmladek@suse.com>, Shuah Khan <shuah@kernel.org>,
	Marcos Paulo de Souza <mpdesouza@suse.com>,
	live-patching@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org, felipe_life@live.com
Subject: Re: [PATCH v2 1/2] selftests: livepatch: add new ftrace helpers functions
Date: Mon, 24 Mar 2025 14:22:53 -0400	[thread overview]
Message-ID: <Z+Gi/QEFPffEonTE@redhat.com> (raw)
In-Reply-To: <20250318-ftrace-sftest-livepatch-v2-1-60cb0aa95cca@gmail.com>

On Tue, Mar 18, 2025 at 06:20:35PM -0300, Filipe Xavier wrote:
> Add new ftrace helpers functions cleanup_tracing, trace_function and
> check_traced_functions.
> 
> Signed-off-by: Filipe Xavier <felipeaggger@gmail.com>
> ---
>  tools/testing/selftests/livepatch/functions.sh | 49 ++++++++++++++++++++++++++
>  1 file changed, 49 insertions(+)
> 
> diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh
> index 15601402dee6567837c2c49ba342eb357e410d18..dea9cc10a3f09662c57c2593cff49423302c8a5c 100644
> --- a/tools/testing/selftests/livepatch/functions.sh
> +++ b/tools/testing/selftests/livepatch/functions.sh
> @@ -10,6 +10,7 @@ SYSFS_KERNEL_DIR="/sys/kernel"
>  SYSFS_KLP_DIR="$SYSFS_KERNEL_DIR/livepatch"
>  SYSFS_DEBUG_DIR="$SYSFS_KERNEL_DIR/debug"
>  SYSFS_KPROBES_DIR="$SYSFS_DEBUG_DIR/kprobes"
> +SYSFS_TRACING_DIR="$SYSFS_DEBUG_DIR/tracing"
>  
>  # Kselftest framework requirement - SKIP code is 4
>  ksft_skip=4
> @@ -62,6 +63,9 @@ function push_config() {
>  			awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}')
>  	FTRACE_ENABLED=$(sysctl --values kernel.ftrace_enabled)
>  	KPROBE_ENABLED=$(cat "$SYSFS_KPROBES_DIR/enabled")
> +	TRACING_ON=$(cat "$SYSFS_TRACING_DIR/tracing_on")
> +	CURRENT_TRACER=$(cat "$SYSFS_TRACING_DIR/current_tracer")
> +	FTRACE_FILTER=$(cat "$SYSFS_TRACING_DIR/set_ftrace_filter")
>  }
>  
>  function pop_config() {
> @@ -74,6 +78,17 @@ function pop_config() {
>  	if [[ -n "$KPROBE_ENABLED" ]]; then
>  		echo "$KPROBE_ENABLED" > "$SYSFS_KPROBES_DIR/enabled"
>  	fi
> +	if [[ -n "$TRACING_ON" ]]; then
> +		echo "$TRACING_ON" > "$SYSFS_TRACING_DIR/tracing_on"
> +	fi
> +	if [[ -n "$CURRENT_TRACER" ]]; then
> +		echo "$CURRENT_TRACER" > "$SYSFS_TRACING_DIR/current_tracer"
> +	fi
> +	if [[ -n "$FTRACE_FILTER" ]]; then
> +		echo "$FTRACE_FILTER" \
> +			| sed -e "/#### all functions enabled ####/d"
> +			> "$SYSFS_TRACING_DIR/set_ftrace_filter"
> +	fi
>  }
>  
>  function set_dynamic_debug() {
> @@ -352,3 +367,37 @@ function check_sysfs_value() {
>  		die "Unexpected value in $path: $expected_value vs. $value"
>  	fi
>  }
> +
> +# cleanup_tracing() - stop and clean up function tracing
> +function cleanup_tracing() {
> +	echo 0 > "$SYSFS_TRACING_DIR/tracing_on"
> +	echo "" > "$SYSFS_TRACING_DIR/set_ftrace_filter"
> +	echo "nop" > "$SYSFS_TRACING_DIR/current_tracer"
> +	echo "" > "$SYSFS_TRACING_DIR/trace"
> +}
> +
> +# trace_function(function) - start tracing of a function
> +#	function - to be traced function
> +function trace_function() {
> +	local function="$1"; shift
> +
> +	cleanup_tracing
> +
> +	echo "function" > "$SYSFS_TRACING_DIR/current_tracer"
> +	echo "$function" > "$SYSFS_TRACING_DIR/set_ftrace_filter"
> +	echo 1 > "$SYSFS_TRACING_DIR/tracing_on"
> +}
> +
> +# check_traced_functions(functions...) - check whether each function appeared in the trace log
> +#	functions - list of functions to be checked
> +function check_traced_functions() {
> +	local function
> +
> +	for function in "$@"; do
> +		if ! grep -q "$function" "$SYSFS_TRACING_DIR/trace" ; then

Small suggestion here: grep on "$function" may find partial string
matches, like:

  $ echo 'hamburger' | grep 'ham'
  hamburger

so it's probably safer to user --word-regexp to avoid longer function
names inadvertently matching:

  $ echo 'hamburger' | grep -w 'ham'
  $ echo 'ham' | grep -w 'ham'
  ham

Also, maybe also --fixed-strings for the extra paranoid?  Off the top of
my head, I don't think any C function characters are special regex (like
$ ^ [ ] etc.) so it's probably safe w/o.

-- Joe


  reply	other threads:[~2025-03-24 18:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-18 21:20 [PATCH v2 0/2] selftests: livepatch: test if ftrace can trace a livepatched function Filipe Xavier
2025-03-18 21:20 ` [PATCH v2 1/2] selftests: livepatch: add new ftrace helpers functions Filipe Xavier
2025-03-24 18:22   ` Joe Lawrence [this message]
2025-03-24 18:36   ` Joe Lawrence
2025-03-24 22:49     ` Filipe Xavier
2025-03-18 21:20 ` [PATCH v2 2/2] selftests: livepatch: test if ftrace can trace a livepatched function Filipe Xavier
2025-03-24 18:43   ` Joe Lawrence
2025-03-21 13:13 ` [PATCH v2 0/2] " Miroslav Benes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z+Gi/QEFPffEonTE@redhat.com \
    --to=joe.lawrence@redhat.com \
    --cc=felipe_life@live.com \
    --cc=felipeaggger@gmail.com \
    --cc=jikos@kernel.org \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mpdesouza@suse.com \
    --cc=pmladek@suse.com \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.