lkml.org 
[lkml]   [2018]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 7/7] kselftests: Add tests for the preemptoff and irqsoff tracers
    Date
    From: "Joel Fernandes (Google)" <joel@joelfernandes.org>

    Here we add unit tests for the preemptoff and irqsoff tracer by using a
    kernel module introduced previously to trigger atomic sections in the
    kernel.

    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    ---
    tools/testing/selftests/ftrace/config | 3 +
    .../test.d/preemptirq/irqsoff_tracer.tc | 74 +++++++++++++++++++
    2 files changed, 77 insertions(+)
    create mode 100644 tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc

    diff --git a/tools/testing/selftests/ftrace/config b/tools/testing/selftests/ftrace/config
    index b01924c71c09..29588b328345 100644
    --- a/tools/testing/selftests/ftrace/config
    +++ b/tools/testing/selftests/ftrace/config
    @@ -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_TEST_ATOMIC_SECTIONS=m
    diff --git a/tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc b/tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc
    new file mode 100644
    index 000000000000..1764ff22c02b
    --- /dev/null
    +++ b/tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc
    @@ -0,0 +1,74 @@
    +#!/bin/sh
    +# SPDX-License-Identifier: GPL-2.0
    +# description: test for the preemptirqsoff tracer
    +
    +MOD=test_atomic_sections
    +
    +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 test_atomic_sections atomic_mode=preempt atomic_time=500000 || fail
    +rmmod test_atomic_sections || fail
    +modprobe test_atomic_sections atomic_mode=preempt atomic_time=500000 || fail
    +rmmod test_atomic_sections || fail
    +modprobe test_atomic_sections atomic_mode=preempt atomic_time=500000 || fail
    +rmmod test_atomic_sections || 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 test_atomic_sections atomic_mode=irq atomic_time=500000 || fail
    +rmmod test_atomic_sections || fail
    +modprobe test_atomic_sections atomic_mode=irq atomic_time=500000 || fail
    +rmmod test_atomic_sections || fail
    +modprobe test_atomic_sections atomic_mode=irq atomic_time=500000 || fail
    +rmmod test_atomic_sections || 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
    +
    --
    2.17.1.1185.g55be947832-goog
    \
     
     \ /
      Last update: 2018-06-07 22:40    [W:2.327 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site