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