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