Skip to content

Commit

Permalink
kselftests: Add tests for the preemptoff and irqsoff tracers
Browse files Browse the repository at this point in the history
Here we add unit tests for the preemptoff and irqsoff tracer by using a
kernel module introduced previously to trigger long preempt or irq
disabled sections in the kernel.

Link: http://lkml.kernel.org/r/20180711063540.91101-3-joel@joelfernandes.org

Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
  • Loading branch information
Joel Fernandes (Google) authored and Steven Rostedt (VMware) committed Jul 26, 2018
1 parent f96e857 commit 8bd1369
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
3 changes: 3 additions & 0 deletions tools/testing/selftests/ftrace/config
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ CONFIG_FUNCTION_PROFILER=y
CONFIG_TRACER_SNAPSHOT=y
CONFIG_STACK_TRACER=y
CONFIG_HIST_TRIGGERS=y
CONFIG_PREEMPT_TRACER=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_PREEMPTIRQ_DELAY_TEST=m
73 changes: 73 additions & 0 deletions tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: test for the preemptirqsoff tracer

MOD=preemptirq_delay_test

fail() {
reset_tracer
rmmod $MOD || true
exit_fail
}

unsup() { #msg
reset_tracer
rmmod $MOD || true
echo $1
exit_unsupported
}

modprobe $MOD || unsup "$MOD module not available"
rmmod $MOD

grep -q "preemptoff" available_tracers || unsup "preemptoff tracer not enabled"
grep -q "irqsoff" available_tracers || unsup "irqsoff tracer not enabled"

reset_tracer

# Simulate preemptoff section for half a second couple of times
echo preemptoff > current_tracer
sleep 1
modprobe $MOD test_mode=preempt delay=500000 || fail
rmmod $MOD || fail
modprobe $MOD test_mode=preempt delay=500000 || fail
rmmod $MOD || fail
modprobe $MOD test_mode=preempt delay=500000 || fail
rmmod $MOD || fail

cat trace

# Confirm which tracer
grep -q "tracer: preemptoff" trace || fail

# Check the end of the section
egrep -q "5.....us : <stack trace>" trace || fail

# Check for 500ms of latency
egrep -q "latency: 5..... us" trace || fail

reset_tracer

# Simulate irqsoff section for half a second couple of times
echo irqsoff > current_tracer
sleep 1
modprobe $MOD test_mode=irq delay=500000 || fail
rmmod $MOD || fail
modprobe $MOD test_mode=irq delay=500000 || fail
rmmod $MOD || fail
modprobe $MOD test_mode=irq delay=500000 || fail
rmmod $MOD || fail

cat trace

# Confirm which tracer
grep -q "tracer: irqsoff" trace || fail

# Check the end of the section
egrep -q "5.....us : <stack trace>" trace || fail

# Check for 500ms of latency
egrep -q "latency: 5..... us" trace || fail

reset_tracer
exit 0

0 comments on commit 8bd1369

Please sign in to comment.