162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Copyright (C) 2018 Uladzislau Rezki (Sony) <urezki@gmail.com> 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# This is a test script for the kernel test driver to analyse vmalloc 762306a36Sopenharmony_ci# allocator. Therefore it is just a kernel module loader. You can specify 862306a36Sopenharmony_ci# and pass different parameters in order to: 962306a36Sopenharmony_ci# a) analyse performance of vmalloc allocations; 1062306a36Sopenharmony_ci# b) stressing and stability check of vmalloc subsystem. 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciTEST_NAME="test_hmm" 1362306a36Sopenharmony_ciDRIVER="test_hmm" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci# 1 if fails 1662306a36Sopenharmony_ciexitcode=1 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 1962306a36Sopenharmony_ciksft_skip=4 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cicheck_test_requirements() 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci uid=$(id -u) 2462306a36Sopenharmony_ci if [ $uid -ne 0 ]; then 2562306a36Sopenharmony_ci echo "$0: Must be run as root" 2662306a36Sopenharmony_ci exit $ksft_skip 2762306a36Sopenharmony_ci fi 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci if ! which modprobe > /dev/null 2>&1; then 3062306a36Sopenharmony_ci echo "$0: You need modprobe installed" 3162306a36Sopenharmony_ci exit $ksft_skip 3262306a36Sopenharmony_ci fi 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci if ! modinfo $DRIVER > /dev/null 2>&1; then 3562306a36Sopenharmony_ci echo "$0: You must have the following enabled in your kernel:" 3662306a36Sopenharmony_ci echo "CONFIG_TEST_HMM=m" 3762306a36Sopenharmony_ci exit $ksft_skip 3862306a36Sopenharmony_ci fi 3962306a36Sopenharmony_ci} 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciload_driver() 4262306a36Sopenharmony_ci{ 4362306a36Sopenharmony_ci if [ $# -eq 0 ]; then 4462306a36Sopenharmony_ci modprobe $DRIVER > /dev/null 2>&1 4562306a36Sopenharmony_ci else 4662306a36Sopenharmony_ci if [ $# -eq 2 ]; then 4762306a36Sopenharmony_ci modprobe $DRIVER spm_addr_dev0=$1 spm_addr_dev1=$2 4862306a36Sopenharmony_ci > /dev/null 2>&1 4962306a36Sopenharmony_ci else 5062306a36Sopenharmony_ci echo "Missing module parameters. Make sure pass"\ 5162306a36Sopenharmony_ci "spm_addr_dev0 and spm_addr_dev1" 5262306a36Sopenharmony_ci usage 5362306a36Sopenharmony_ci fi 5462306a36Sopenharmony_ci fi 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciunload_driver() 5862306a36Sopenharmony_ci{ 5962306a36Sopenharmony_ci modprobe -r $DRIVER > /dev/null 2>&1 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cirun_smoke() 6362306a36Sopenharmony_ci{ 6462306a36Sopenharmony_ci echo "Running smoke test. Note, this test provides basic coverage." 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci load_driver $1 $2 6762306a36Sopenharmony_ci $(dirname "${BASH_SOURCE[0]}")/hmm-tests 6862306a36Sopenharmony_ci unload_driver 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciusage() 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci echo -n "Usage: $0" 7462306a36Sopenharmony_ci echo 7562306a36Sopenharmony_ci echo "Example usage:" 7662306a36Sopenharmony_ci echo 7762306a36Sopenharmony_ci echo "# Shows help message" 7862306a36Sopenharmony_ci echo "./${TEST_NAME}.sh" 7962306a36Sopenharmony_ci echo 8062306a36Sopenharmony_ci echo "# Smoke testing" 8162306a36Sopenharmony_ci echo "./${TEST_NAME}.sh smoke" 8262306a36Sopenharmony_ci echo 8362306a36Sopenharmony_ci echo "# Smoke testing with SPM enabled" 8462306a36Sopenharmony_ci echo "./${TEST_NAME}.sh smoke <spm_addr_dev0> <spm_addr_dev1>" 8562306a36Sopenharmony_ci echo 8662306a36Sopenharmony_ci exit 0 8762306a36Sopenharmony_ci} 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cifunction run_test() 9062306a36Sopenharmony_ci{ 9162306a36Sopenharmony_ci if [ $# -eq 0 ]; then 9262306a36Sopenharmony_ci usage 9362306a36Sopenharmony_ci else 9462306a36Sopenharmony_ci if [ "$1" = "smoke" ]; then 9562306a36Sopenharmony_ci run_smoke $2 $3 9662306a36Sopenharmony_ci else 9762306a36Sopenharmony_ci usage 9862306a36Sopenharmony_ci fi 9962306a36Sopenharmony_ci fi 10062306a36Sopenharmony_ci} 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cicheck_test_requirements 10362306a36Sopenharmony_cirun_test $@ 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ciexit 0 106