1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: ftrace - function graph filters with stack tracer
4# requires: stack_trace set_ftrace_filter function_graph:tracer
5
6# Make sure that function graph filtering works, and is not
7# affected by other tracers enabled (like stack tracer)
8
9do_reset() {
10    if [ -e /proc/sys/kernel/stack_tracer_enabled ]; then
11	    echo 0 > /proc/sys/kernel/stack_tracer_enabled
12    fi
13}
14
15fail() { # msg
16    do_reset
17    echo $1
18    exit_fail
19}
20
21disable_tracing
22clear_trace;
23
24# filter something, schedule is always good
25if ! echo "schedule" > set_ftrace_filter; then
26    # test for powerpc 64
27    if ! echo ".schedule" > set_ftrace_filter; then
28	fail "can not enable schedule filter"
29    fi
30fi
31
32echo function_graph > current_tracer
33
34echo "Now testing with stack tracer"
35
36echo 1 > /proc/sys/kernel/stack_tracer_enabled
37
38disable_tracing
39clear_trace
40enable_tracing
41sleep 1
42
43count=`cat trace | grep '()' | grep -v schedule | wc -l`
44
45if [ $count -ne 0 ]; then
46    fail "Graph filtering not working with stack tracer?"
47fi
48
49# Make sure we did find something
50count=`cat trace | grep 'schedule()' | wc -l` 
51if [ $count -eq 0 ]; then
52    fail "No schedule traces found?"
53fi
54
55echo 0 > /proc/sys/kernel/stack_tracer_enabled
56clear_trace
57sleep 1
58
59
60count=`cat trace | grep '()' | grep -v schedule | wc -l`
61
62if [ $count -ne 0 ]; then
63    fail "Graph filtering not working after stack tracer disabled?"
64fi
65
66count=`cat trace | grep 'schedule()' | wc -l` 
67if [ $count -eq 0 ]; then
68    fail "No schedule traces found?"
69fi
70
71do_reset
72
73exit 0
74