1*baa489faSSeongJae Park#!/bin/bash
2*baa489faSSeongJae Park# SPDX-License-Identifier: GPL-2.0
3*baa489faSSeongJae Park#
4*baa489faSSeongJae Park# Copyright (C) 2018 Uladzislau Rezki (Sony) <urezki@gmail.com>
5*baa489faSSeongJae Park#
6*baa489faSSeongJae Park# This is a test script for the kernel test driver to analyse vmalloc
7*baa489faSSeongJae Park# allocator. Therefore it is just a kernel module loader. You can specify
8*baa489faSSeongJae Park# and pass different parameters in order to:
9*baa489faSSeongJae Park#     a) analyse performance of vmalloc allocations;
10*baa489faSSeongJae Park#     b) stressing and stability check of vmalloc subsystem.
11*baa489faSSeongJae Park
12*baa489faSSeongJae ParkTEST_NAME="test_hmm"
13*baa489faSSeongJae ParkDRIVER="test_hmm"
14*baa489faSSeongJae Park
15*baa489faSSeongJae Park# 1 if fails
16*baa489faSSeongJae Parkexitcode=1
17*baa489faSSeongJae Park
18*baa489faSSeongJae Park# Kselftest framework requirement - SKIP code is 4.
19*baa489faSSeongJae Parkksft_skip=4
20*baa489faSSeongJae Park
21*baa489faSSeongJae Parkcheck_test_requirements()
22*baa489faSSeongJae Park{
23*baa489faSSeongJae Park	uid=$(id -u)
24*baa489faSSeongJae Park	if [ $uid -ne 0 ]; then
25*baa489faSSeongJae Park		echo "$0: Must be run as root"
26*baa489faSSeongJae Park		exit $ksft_skip
27*baa489faSSeongJae Park	fi
28*baa489faSSeongJae Park
29*baa489faSSeongJae Park	if ! which modprobe > /dev/null 2>&1; then
30*baa489faSSeongJae Park		echo "$0: You need modprobe installed"
31*baa489faSSeongJae Park		exit $ksft_skip
32*baa489faSSeongJae Park	fi
33*baa489faSSeongJae Park
34*baa489faSSeongJae Park	if ! modinfo $DRIVER > /dev/null 2>&1; then
35*baa489faSSeongJae Park		echo "$0: You must have the following enabled in your kernel:"
36*baa489faSSeongJae Park		echo "CONFIG_TEST_HMM=m"
37*baa489faSSeongJae Park		exit $ksft_skip
38*baa489faSSeongJae Park	fi
39*baa489faSSeongJae Park}
40*baa489faSSeongJae Park
41*baa489faSSeongJae Parkload_driver()
42*baa489faSSeongJae Park{
43*baa489faSSeongJae Park	if [ $# -eq 0 ]; then
44*baa489faSSeongJae Park		modprobe $DRIVER > /dev/null 2>&1
45*baa489faSSeongJae Park	else
46*baa489faSSeongJae Park		if [ $# -eq 2 ]; then
47*baa489faSSeongJae Park			modprobe $DRIVER spm_addr_dev0=$1 spm_addr_dev1=$2
48*baa489faSSeongJae Park				> /dev/null 2>&1
49*baa489faSSeongJae Park		else
50*baa489faSSeongJae Park			echo "Missing module parameters. Make sure pass"\
51*baa489faSSeongJae Park			"spm_addr_dev0 and spm_addr_dev1"
52*baa489faSSeongJae Park			usage
53*baa489faSSeongJae Park		fi
54*baa489faSSeongJae Park	fi
55*baa489faSSeongJae Park}
56*baa489faSSeongJae Park
57*baa489faSSeongJae Parkunload_driver()
58*baa489faSSeongJae Park{
59*baa489faSSeongJae Park	modprobe -r $DRIVER > /dev/null 2>&1
60*baa489faSSeongJae Park}
61*baa489faSSeongJae Park
62*baa489faSSeongJae Parkrun_smoke()
63*baa489faSSeongJae Park{
64*baa489faSSeongJae Park	echo "Running smoke test. Note, this test provides basic coverage."
65*baa489faSSeongJae Park
66*baa489faSSeongJae Park	load_driver $1 $2
67*baa489faSSeongJae Park	$(dirname "${BASH_SOURCE[0]}")/hmm-tests
68*baa489faSSeongJae Park	unload_driver
69*baa489faSSeongJae Park}
70*baa489faSSeongJae Park
71*baa489faSSeongJae Parkusage()
72*baa489faSSeongJae Park{
73*baa489faSSeongJae Park	echo -n "Usage: $0"
74*baa489faSSeongJae Park	echo
75*baa489faSSeongJae Park	echo "Example usage:"
76*baa489faSSeongJae Park	echo
77*baa489faSSeongJae Park	echo "# Shows help message"
78*baa489faSSeongJae Park	echo "./${TEST_NAME}.sh"
79*baa489faSSeongJae Park	echo
80*baa489faSSeongJae Park	echo "# Smoke testing"
81*baa489faSSeongJae Park	echo "./${TEST_NAME}.sh smoke"
82*baa489faSSeongJae Park	echo
83*baa489faSSeongJae Park	echo "# Smoke testing with SPM enabled"
84*baa489faSSeongJae Park	echo "./${TEST_NAME}.sh smoke <spm_addr_dev0> <spm_addr_dev1>"
85*baa489faSSeongJae Park	echo
86*baa489faSSeongJae Park	exit 0
87*baa489faSSeongJae Park}
88*baa489faSSeongJae Park
89*baa489faSSeongJae Parkfunction run_test()
90*baa489faSSeongJae Park{
91*baa489faSSeongJae Park	if [ $# -eq 0 ]; then
92*baa489faSSeongJae Park		usage
93*baa489faSSeongJae Park	else
94*baa489faSSeongJae Park		if [ "$1" = "smoke" ]; then
95*baa489faSSeongJae Park			run_smoke $2 $3
96*baa489faSSeongJae Park		else
97*baa489faSSeongJae Park			usage
98*baa489faSSeongJae Park		fi
99*baa489faSSeongJae Park	fi
100*baa489faSSeongJae Park}
101*baa489faSSeongJae Park
102*baa489faSSeongJae Parkcheck_test_requirements
103*baa489faSSeongJae Parkrun_test $@
104*baa489faSSeongJae Park
105*baa489faSSeongJae Parkexit 0
106