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