@@ -10,6 +10,7 @@ SYSFS_KERNEL_DIR="/sys/kernel"
10
10
SYSFS_KLP_DIR=" $SYSFS_KERNEL_DIR /livepatch"
11
11
SYSFS_DEBUG_DIR=" $SYSFS_KERNEL_DIR /debug"
12
12
SYSFS_KPROBES_DIR=" $SYSFS_DEBUG_DIR /kprobes"
13
+ SYSFS_TRACING_DIR=" $SYSFS_DEBUG_DIR /tracing"
13
14
14
15
# Kselftest framework requirement - SKIP code is 4
15
16
ksft_skip=4
@@ -62,6 +63,9 @@ function push_config() {
62
63
awk -F' [: ]' ' {print "file " $1 " line " $2 " " $4}' )
63
64
FTRACE_ENABLED=$( sysctl --values kernel.ftrace_enabled)
64
65
KPROBE_ENABLED=$( cat " $SYSFS_KPROBES_DIR /enabled" )
66
+ TRACING_ON=$( cat " $SYSFS_TRACING_DIR /tracing_on" )
67
+ CURRENT_TRACER=$( cat " $SYSFS_TRACING_DIR /current_tracer" )
68
+ FTRACE_FILTER=$( cat " $SYSFS_TRACING_DIR /set_ftrace_filter" )
65
69
}
66
70
67
71
function pop_config() {
@@ -74,6 +78,17 @@ function pop_config() {
74
78
if [[ -n " $KPROBE_ENABLED " ]]; then
75
79
echo " $KPROBE_ENABLED " > " $SYSFS_KPROBES_DIR /enabled"
76
80
fi
81
+ if [[ -n " $TRACING_ON " ]]; then
82
+ echo " $TRACING_ON " > " $SYSFS_TRACING_DIR /tracing_on"
83
+ fi
84
+ if [[ -n " $CURRENT_TRACER " ]]; then
85
+ echo " $CURRENT_TRACER " > " $SYSFS_TRACING_DIR /current_tracer"
86
+ fi
87
+ if [[ -n " $FTRACE_FILTER " ]]; then
88
+ echo " $FTRACE_FILTER " \
89
+ | sed -e " /#### all functions enabled ####/d" \
90
+ > " $SYSFS_TRACING_DIR /set_ftrace_filter"
91
+ fi
77
92
}
78
93
79
94
function set_dynamic_debug() {
@@ -351,3 +366,37 @@ function check_sysfs_value() {
351
366
die " Unexpected value in $path : $expected_value vs. $value "
352
367
fi
353
368
}
369
+
370
+ # cleanup_tracing() - stop and clean up function tracing
371
+ function cleanup_tracing() {
372
+ echo 0 > " $SYSFS_TRACING_DIR /tracing_on"
373
+ echo " " > " $SYSFS_TRACING_DIR /set_ftrace_filter"
374
+ echo " nop" > " $SYSFS_TRACING_DIR /current_tracer"
375
+ echo " " > " $SYSFS_TRACING_DIR /trace"
376
+ }
377
+
378
+ # trace_function(function) - start tracing of a function
379
+ # function - to be traced function
380
+ function trace_function() {
381
+ local function=" $1 " ; shift
382
+
383
+ cleanup_tracing
384
+
385
+ echo " function" > " $SYSFS_TRACING_DIR /current_tracer"
386
+ echo " $function " > " $SYSFS_TRACING_DIR /set_ftrace_filter"
387
+ echo 1 > " $SYSFS_TRACING_DIR /tracing_on"
388
+ }
389
+
390
+ # check_traced_functions(functions...) - check whether each function appeared in the trace log
391
+ # functions - list of functions to be checked
392
+ function check_traced_functions() {
393
+ local function
394
+
395
+ for function in " $@ " ; do
396
+ if ! grep -Fwq " $function " " $SYSFS_TRACING_DIR /trace" ; then
397
+ die " Function ($function ) did not appear in the trace"
398
+ fi
399
+ done
400
+
401
+ cleanup_tracing
402
+ }
0 commit comments