#!/bin/bash # # SPDX-License-Identifier: Apache-2.0 # Copyright (C) 2018 IBM Corp. set -eou pipefail if [ $# -lt 2 ] then echo Usage: $0 [USER@]HOST EVENTSET [EVENTSET...] echo echo Valid EVENTSETs: fsi, occ, sbefifo, timer, sched exit 1 fi TRACE_TARGET="$1" shift 1 TRACE_EVENT_SET="$@" TRACESCRIPT_PATH="$(mktemp obmc-fsi-trace.XXXXXX)" TRACESCRIPT="$(basename "${TRACESCRIPT_PATH}")" on_exit() { rm -f "${TRACESCRIPT_PATH}" } trap on_exit EXIT cat > "${TRACESCRIPT_PATH}" <<-EOF set -eou pipefail set -x # Look Ma! Associative arrays in ash! EVENT_fsi="fsi fsi_master_gpio" EVENT_occ="occ hwmon_occ" EVENT_sbefifo="sbefifo" EVENT_timer="timer/timer_start timer/timer_cancel timer/timer_expire_entry timer/timer_expire_exit" EVENT_sched="sched/sched_switch sched/sched_wakeup sched/sched_wakeup_new sched/sched_waking" on_exit() { for elem in ${TRACE_EVENT_SET} do # Abuse eval(1) to extract the list of tracepoints to enable from our # fake associative arrays eval 'trace=\\\${EVENT_\${elem}}' for event in \$(eval echo \${trace}) do echo 0 > /sys/kernel/debug/tracing/events/\${event}/enable done done echo 0 > /sys/kernel/debug/tracing/tracing_on } trap on_exit EXIT cat /sys/kernel/debug/tracing/per_cpu/cpu0/trace_pipe & CAT_PID=\$! for elem in ${TRACE_EVENT_SET} do # See comment in the disable path eval 'trace=\\\${EVENT_\${elem}}' for event in \$(eval echo \${trace}) do echo 1 > /sys/kernel/debug/tracing/events/\${event}/enable done done echo 1 > /sys/kernel/debug/tracing/tracing_on read kill \${CAT_PID} EOF scp "${TRACESCRIPT_PATH}" "${TRACE_TARGET}":/tmp/"${TRACESCRIPT}" ssh "${TRACE_TARGET}" "/bin/sh -x /tmp/'${TRACESCRIPT}'"