1# SPDX-License-Identifier: GPL-2.0
2#
3#	init.sh
4#	Author: Michael Petlan <mpetlan@redhat.com>
5#
6#	Description:
7#
8#		This file should be used for initialization of basic functions
9#	for checking, reporting results etc.
10#
11#
12
13
14. ../common/settings.sh
15. ../common/patterns.sh
16
17THIS_TEST_NAME=`basename $0 .sh`
18
19_echo()
20{
21	test "$TESTLOG_VERBOSITY" -ne 0 && echo -e "$@"
22}
23
24print_results()
25{
26	PERF_RETVAL="$1"; shift
27	CHECK_RETVAL="$1"; shift
28	FAILURE_REASON=""
29	TASK_COMMENT="$*"
30	if [ $PERF_RETVAL -eq 0 ] && [ $CHECK_RETVAL -eq 0 ]; then
31		_echo "$MPASS-- [ PASS ] --$MEND $TEST_NAME :: $THIS_TEST_NAME :: $TASK_COMMENT"
32		return 0
33	else
34		if [ $PERF_RETVAL -ne 0 ]; then
35			FAILURE_REASON="command exitcode"
36		fi
37		if [ $CHECK_RETVAL -ne 0 ]; then
38			test -n "$FAILURE_REASON" && FAILURE_REASON="$FAILURE_REASON + "
39			FAILURE_REASON="$FAILURE_REASON""output regexp parsing"
40		fi
41		_echo "$MFAIL-- [ FAIL ] --$MEND $TEST_NAME :: $THIS_TEST_NAME :: $TASK_COMMENT ($FAILURE_REASON)"
42		return 1
43	fi
44}
45
46print_overall_results()
47{
48	RETVAL="$1"; shift
49	if [ $RETVAL -eq 0 ]; then
50		_echo "$MALLPASS## [ PASS ] ##$MEND $TEST_NAME :: $THIS_TEST_NAME SUMMARY"
51	else
52		_echo "$MALLFAIL## [ FAIL ] ##$MEND $TEST_NAME :: $THIS_TEST_NAME SUMMARY :: $RETVAL failures found"
53	fi
54	return $RETVAL
55}
56
57print_testcase_skipped()
58{
59	TASK_COMMENT="$*"
60	_echo "$MSKIP-- [ SKIP ] --$MEND $TEST_NAME :: $THIS_TEST_NAME :: $TASK_COMMENT :: testcase skipped"
61	return 0
62}
63
64print_overall_skipped()
65{
66	_echo "$MSKIP## [ SKIP ] ##$MEND $TEST_NAME :: $THIS_TEST_NAME :: testcase skipped"
67	return 0
68}
69
70print_warning()
71{
72	WARN_COMMENT="$*"
73	_echo "$MWARN-- [ WARN ] --$MEND $TEST_NAME :: $THIS_TEST_NAME :: $WARN_COMMENT"
74	return 0
75}
76
77# this function should skip a testcase if the testsuite is not run in
78# a runmode that fits the testcase --> if the suite runs in BASIC mode
79# all STANDARD and EXPERIMENTAL testcases will be skipped; if the suite
80# runs in STANDARD mode, all EXPERIMENTAL testcases will be skipped and
81# if the suite runs in EXPERIMENTAL mode, nothing is skipped
82consider_skipping()
83{
84	TESTCASE_RUNMODE="$1"
85	# the runmode of a testcase needs to be at least the current suite's runmode
86	if [ $PERFTOOL_TESTSUITE_RUNMODE -lt $TESTCASE_RUNMODE ]; then
87		print_overall_skipped
88		exit 0
89	fi
90}
91
92detect_baremetal()
93{
94	# return values:
95	# 0 = bare metal
96	# 1 = virtualization detected
97	# 2 = unknown state
98	VIRT=`systemd-detect-virt 2>/dev/null`
99	test $? -eq 127 && return 2
100	test "$VIRT" = "none"
101}
102
103detect_intel()
104{
105	# return values:
106	# 0 = is Intel
107	# 1 = is not Intel or unknown
108	grep "vendor_id" < /proc/cpuinfo | grep -q "GenuineIntel"
109}
110
111detect_amd()
112{
113	# return values:
114	# 0 = is AMD
115	# 1 = is not AMD or unknown
116	grep "vendor_id" < /proc/cpuinfo | grep -q "AMD"
117}
118
119# base probe utility
120check_kprobes_available()
121{
122	test -e /sys/kernel/debug/tracing/kprobe_events
123}
124
125check_uprobes_available()
126{
127	test -e /sys/kernel/debug/tracing/uprobe_events
128}
129
130clear_all_probes()
131{
132	echo 0 > /sys/kernel/debug/tracing/events/enable
133	check_kprobes_available && echo > /sys/kernel/debug/tracing/kprobe_events
134	check_uprobes_available && echo > /sys/kernel/debug/tracing/uprobe_events
135}
136
137check_sdt_support()
138{
139	$CMD_PERF list sdt | grep sdt > /dev/null 2> /dev/null
140}
141