Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) #!/bin/sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) # SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) usage() {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 	echo "Ftrace boottime trace test tool"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 	echo "Usage: $0 [--apply|--init] [--debug] BOOTCONFIG-FILE"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 	echo "    --apply: Test actual apply to tracefs (need sudo)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 	echo "    --init:  Initialize ftrace before applying (imply --apply)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 	exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) [ $# -eq 0 ] && usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) BCONF=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) DEBUG=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) APPLY=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) INIT=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) while [ x"$1" != x ]; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	case "$1" in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	"--debug")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 		DEBUG=$1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	"--apply")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 		APPLY=$1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	"--init")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 		APPLY=$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 		INIT=$1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 		[ ! -f $1 ] && usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 		BCONF=$1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	shift 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) if [ x"$APPLY" != x ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	if [ `id -u` -ne 0 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 		echo "This must be run by root user. Try sudo." 1>&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 		exec sudo $0 $DEBUG $APPLY $BCONF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) run_cmd() { # command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	echo "$*"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	if [ x"$APPLY" != x ]; then # apply command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 		eval $*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) if [ x"$DEBUG" != x ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	set -x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) TRACEFS=`grep -m 1 -w tracefs /proc/mounts | cut -f 2 -d " "`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) if [ -z "$TRACEFS" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	if ! grep -wq debugfs /proc/mounts; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 		echo "Error: No tracefs/debugfs was mounted." 1>&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	TRACEFS=`grep -m 1 -w debugfs /proc/mounts | cut -f 2 -d " "`/tracing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	if [ ! -d $TRACEFS ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 		echo "Error: ftrace is not enabled on this kernel." 1>&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) if [ x"$INIT" != x ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	. `dirname $0`/ftrace.sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	(cd $TRACEFS; initialize_ftrace)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) . `dirname $0`/xbc.sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) ######## main #########
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) set -e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) xbc_init $BCONF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) set_value_of() { # key file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	if xbc_has_key $1; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 		val=`xbc_get_val $1 1`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 		run_cmd "echo '$val' >> $2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) set_array_of() { # key file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	if xbc_has_key $1; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 		xbc_get_val $1 | while read line; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 			run_cmd "echo '$line' >> $2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 		done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) compose_synth() { # event_name branch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	echo -n "$1 "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	xbc_get_val $2 | while read field; do echo -n "$field; "; done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) setup_event() { # prefix group event [instance]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	branch=$1.$2.$3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	if [ "$4" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		eventdir="$TRACEFS/instances/$4/events/$2/$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 		eventdir="$TRACEFS/events/$2/$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	case $2 in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	kprobes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 		xbc_get_val ${branch}.probes | while read line; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 			run_cmd "echo 'p:kprobes/$3 $line' >> $TRACEFS/kprobe_events"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 		done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 		;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	synthetic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 		run_cmd "echo '`compose_synth $3 ${branch}.fields`' >> $TRACEFS/synthetic_events"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 		;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	set_value_of ${branch}.filter ${eventdir}/filter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	set_array_of ${branch}.actions ${eventdir}/trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	if xbc_has_key ${branch}.enable; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 		run_cmd "echo 1 > ${eventdir}/enable"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) setup_events() { # prefix("ftrace" or "ftrace.instance.INSTANCE") [instance]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	prefix="${1}.event"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	if xbc_has_branch ${1}.event; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 		for grpev in `xbc_subkeys ${1}.event 2`; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 			setup_event $prefix ${grpev%.*} ${grpev#*.} $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 		done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) size2kb() { # size[KB|MB]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	case $1 in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	*KB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 		echo ${1%KB};;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	*MB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 		expr ${1%MB} \* 1024;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 		expr $1 / 1024 ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) setup_instance() { # [instance]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	if [ "$1" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 		instance="ftrace.instance.${1}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 		instancedir=$TRACEFS/instances/$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 		instance="ftrace"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 		instancedir=$TRACEFS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	set_array_of ${instance}.options ${instancedir}/trace_options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	set_value_of ${instance}.trace_clock ${instancedir}/trace_clock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	set_value_of ${instance}.cpumask ${instancedir}/tracing_cpumask
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	set_value_of ${instance}.tracing_on ${instancedir}/tracing_on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	set_value_of ${instance}.tracer ${instancedir}/current_tracer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	set_array_of ${instance}.ftrace.filters \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 		${instancedir}/set_ftrace_filter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	set_array_of ${instance}.ftrace.notrace \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 		${instancedir}/set_ftrace_notrace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	if xbc_has_key ${instance}.alloc_snapshot; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		run_cmd "echo 1 > ${instancedir}/snapshot"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	if xbc_has_key ${instance}.buffer_size; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 		size=`xbc_get_val ${instance}.buffer_size 1`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 		size=`eval size2kb $size`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		run_cmd "echo $size >> ${instancedir}/buffer_size_kb"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	setup_events ${instance} $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	set_array_of ${instance}.events ${instancedir}/set_event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) # ftrace global configs (kernel.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) if xbc_has_key "kernel.dump_on_oops"; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	dump_mode=`xbc_get_val "kernel.dump_on_oops" 1`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	[ "$dump_mode" ] && dump_mode=`eval echo $dump_mode` || dump_mode=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	run_cmd "echo \"$dump_mode\" > /proc/sys/kernel/ftrace_dump_on_oops"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) set_value_of kernel.fgraph_max_depth $TRACEFS/max_graph_depth
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) set_array_of kernel.fgraph_filters $TRACEFS/set_graph_function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) set_array_of kernel.fgraph_notraces $TRACEFS/set_graph_notrace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) # Per-instance/per-event configs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) if ! xbc_has_branch "ftrace" ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	exit 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) setup_instance # root instance
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) if xbc_has_branch "ftrace.instance"; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	for i in `xbc_subkeys "ftrace.instance" 1`; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		run_cmd "mkdir -p $TRACEFS/instances/$i"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		setup_instance $i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)