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