mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
tools/bootconfig: Add --init option for bconf2ftrace.sh
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 <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
2b86062a34
commit
5675fd4ef5
@ -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
|
||||
}
|
||||
|
||||
@ -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;;
|
||||
@ -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 #########
|
||||
|
109
tools/bootconfig/scripts/ftrace.sh
Normal file
109
tools/bootconfig/scripts/ftrace.sh
Normal file
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user