Skip to content

Commit

Permalink
tools/bootconfig: Add --init option for bconf2ftrace.sh
Browse files Browse the repository at this point in the history
Since the ftrace current setting may conflict with the new setting
from bootconfig, add the --init option to initialize ftrace before
setting for bconf2ftrace.sh.

E.g.
 $ bconf2ftrace.sh --init boottrace.bconf

This initialization method copied from selftests/ftrace.

Link: https://lkml.kernel.org/r/159704853203.175360.17029578033994278231.stgit@devnote2

Signed-off-by: Masami Hiramatsu <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
  • Loading branch information
mhiramat authored and rostedt committed Sep 19, 2020
1 parent 2b86062 commit 5675fd4
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 1 deletion.
12 changes: 11 additions & 1 deletion tools/bootconfig/scripts/bconf2ftrace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@

usage() {
echo "Ftrace boottime trace test tool"
echo "Usage: $0 [--apply] [--debug] BOOTCONFIG-FILE"
echo "Usage: $0 [--apply|--init] [--debug] BOOTCONFIG-FILE"
echo " --apply: Test actual apply to tracefs (need sudo)"
echo " --init: Initialize ftrace before applying (imply --apply)"
exit 1
}

Expand All @@ -13,12 +14,16 @@ usage() {
BCONF=
DEBUG=
APPLY=
INIT=
while [ x"$1" != x ]; do
case "$1" in
"--debug")
DEBUG=$1;;
"--apply")
APPLY=$1;;
"--init")
APPLY=$1
INIT=$1;;
*)
[ ! -f $1 ] && usage
BCONF=$1;;
Expand Down Expand Up @@ -57,6 +62,11 @@ if [ -z "$TRACEFS" ]; then
fi
fi

if [ x"$INIT" != x ]; then
. `dirname $0`/ftrace.sh
(cd $TRACEFS; initialize_ftrace)
fi

. `dirname $0`/xbc.sh

######## main #########
Expand Down
109 changes: 109 additions & 0 deletions tools/bootconfig/scripts/ftrace.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# SPDX-License-Identifier: GPL-2.0-only

clear_trace() { # reset trace output
echo > trace
}

disable_tracing() { # stop trace recording
echo 0 > tracing_on
}

enable_tracing() { # start trace recording
echo 1 > tracing_on
}

reset_tracer() { # reset the current tracer
echo nop > current_tracer
}

reset_trigger_file() {
# remove action triggers first
grep -H ':on[^:]*(' $@ |
while read line; do
cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
file=`echo $line | cut -f1 -d:`
echo "!$cmd" >> $file
done
grep -Hv ^# $@ |
while read line; do
cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
file=`echo $line | cut -f1 -d:`
echo "!$cmd" > $file
done
}

reset_trigger() { # reset all current setting triggers
if [ -d events/synthetic ]; then
reset_trigger_file events/synthetic/*/trigger
fi
reset_trigger_file events/*/*/trigger
}

reset_events_filter() { # reset all current setting filters
grep -v ^none events/*/*/filter |
while read line; do
echo 0 > `echo $line | cut -f1 -d:`
done
}

reset_ftrace_filter() { # reset all triggers in set_ftrace_filter
if [ ! -f set_ftrace_filter ]; then
return 0
fi
echo > set_ftrace_filter
grep -v '^#' set_ftrace_filter | while read t; do
tr=`echo $t | cut -d: -f2`
if [ "$tr" = "" ]; then
continue
fi
if ! grep -q "$t" set_ftrace_filter; then
continue;
fi
name=`echo $t | cut -d: -f1 | cut -d' ' -f1`
if [ $tr = "enable_event" -o $tr = "disable_event" ]; then
tr=`echo $t | cut -d: -f2-4`
limit=`echo $t | cut -d: -f5`
else
tr=`echo $t | cut -d: -f2`
limit=`echo $t | cut -d: -f3`
fi
if [ "$limit" != "unlimited" ]; then
tr="$tr:$limit"
fi
echo "!$name:$tr" > set_ftrace_filter
done
}

disable_events() {
echo 0 > events/enable
}

clear_synthetic_events() { # reset all current synthetic events
grep -v ^# synthetic_events |
while read line; do
echo "!$line" >> synthetic_events
done
}

initialize_ftrace() { # Reset ftrace to initial-state
# As the initial state, ftrace will be set to nop tracer,
# no events, no triggers, no filters, no function filters,
# no probes, and tracing on.
disable_tracing
reset_tracer
reset_trigger
reset_events_filter
reset_ftrace_filter
disable_events
[ -f set_event_pid ] && echo > set_event_pid
[ -f set_ftrace_pid ] && echo > set_ftrace_pid
[ -f set_ftrace_notrace ] && echo > set_ftrace_notrace
[ -f set_graph_function ] && echo | tee set_graph_*
[ -f stack_trace_filter ] && echo > stack_trace_filter
[ -f kprobe_events ] && echo > kprobe_events
[ -f uprobe_events ] && echo > uprobe_events
[ -f synthetic_events ] && echo > synthetic_events
[ -f snapshot ] && echo 0 > snapshot
clear_trace
enable_tracing
}

0 comments on commit 5675fd4

Please sign in to comment.