1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0-only */ 3# 4# Wrapper script which performs setup and cleanup for nx_huge_pages_test. 5# Makes use of root privileges to set up huge pages and KVM module parameters. 6# 7# tools/testing/selftests/kvm/nx_huge_page_test.sh 8# Copyright (C) 2022, Google LLC. 9 10set -e 11 12NX_HUGE_PAGES=$(cat /sys/module/kvm/parameters/nx_huge_pages) 13NX_HUGE_PAGES_RECOVERY_RATIO=$(cat /sys/module/kvm/parameters/nx_huge_pages_recovery_ratio) 14NX_HUGE_PAGES_RECOVERY_PERIOD=$(cat /sys/module/kvm/parameters/nx_huge_pages_recovery_period_ms) 15HUGE_PAGES=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages) 16 17set +e 18 19function sudo_echo () { 20 echo "$1" | sudo tee -a "$2" > /dev/null 21} 22 23NXECUTABLE="$(dirname $0)/nx_huge_pages_test" 24 25sudo_echo test /dev/null || exit 4 # KSFT_SKIP=4 26 27( 28 set -e 29 30 sudo_echo 1 /sys/module/kvm/parameters/nx_huge_pages 31 sudo_echo 1 /sys/module/kvm/parameters/nx_huge_pages_recovery_ratio 32 sudo_echo 100 /sys/module/kvm/parameters/nx_huge_pages_recovery_period_ms 33 sudo_echo "$(( $HUGE_PAGES + 3 ))" /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 34 35 # Test with reboot permissions 36 if [ $(whoami) == "root" ] || sudo setcap cap_sys_boot+ep $NXECUTABLE 2> /dev/null; then 37 echo Running test with CAP_SYS_BOOT enabled 38 $NXECUTABLE -t 887563923 -p 100 -r 39 test $(whoami) == "root" || sudo setcap cap_sys_boot-ep $NXECUTABLE 40 else 41 echo setcap failed, skipping nx_huge_pages_test with CAP_SYS_BOOT enabled 42 fi 43 44 # Test without reboot permissions 45 if [ $(whoami) != "root" ] ; then 46 echo Running test with CAP_SYS_BOOT disabled 47 $NXECUTABLE -t 887563923 -p 100 48 else 49 echo Running as root, skipping nx_huge_pages_test with CAP_SYS_BOOT disabled 50 fi 51) 52RET=$? 53 54sudo_echo "$NX_HUGE_PAGES" /sys/module/kvm/parameters/nx_huge_pages 55sudo_echo "$NX_HUGE_PAGES_RECOVERY_RATIO" /sys/module/kvm/parameters/nx_huge_pages_recovery_ratio 56sudo_echo "$NX_HUGE_PAGES_RECOVERY_PERIOD" /sys/module/kvm/parameters/nx_huge_pages_recovery_period_ms 57sudo_echo "$HUGE_PAGES" /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 58 59exit $RET 60