run_vmtests.sh loads hwpoison_inject for the memory-failure test when it is not there yet, remembers that in a variable local to run_test() and unloads the module right after the test.
The thp tests need xfs loaded in the same way, and repeating the load, the bookkeeping and the unload for every module that some test needs does not scale. Add load_module(), which loads a module unless it is already present and records it, and unload every recorded module, in reverse order, before the script exits. Use it for hwpoison_inject. Signed-off-by: Qiliang Yuan <[email protected]> --- tools/testing/selftests/mm/run_vmtests.sh | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh index d09f9f6a384ee..56f5416681da7 100755 --- a/tools/testing/selftests/mm/run_vmtests.sh +++ b/tools/testing/selftests/mm/run_vmtests.sh @@ -177,11 +177,30 @@ pretty_name() { echo "$*" | sed -e 's/^\(bash \)\?\.\///' } +# Modules this script loaded, unloaded again before it exits +LOADED_MODULES=() + +# Usage: load_module [module] +load_module() { + if [ -d "/sys/module/$1" ]; then + return 0 + fi + modprobe -q "$1" || return 1 + LOADED_MODULES+=("$1") +} + +unload_modules() { + local i + + for (( i = ${#LOADED_MODULES[@]} - 1; i >= 0; i-- )); do + modprobe -r -q "${LOADED_MODULES[i]}" + done +} + # Usage: run_test [test binary] [arbitrary test arguments...] run_test() { if test_selected ${CATEGORY}; then local skip=0 - local LOADED_HWPOISON_INJECT_MOD=0 # On memory constrainted systems some tests can fail to allocate hugepages. # perform some cleanup before the test for a higher success rate. @@ -207,8 +226,7 @@ run_test() { | tap_prefix skip=1 else - modprobe hwpoison_inject > /dev/null 2>&1 - LOADED_HWPOISON_INJECT_MOD=1 + load_module hwpoison_inject if [ ! -d "$HWPOISON_DIR" ]; then echo "hwpoison debugfs interface not present" \ | tap_prefix @@ -231,11 +249,6 @@ run_test() { local ret=${PIPESTATUS[0]} fi - # Unload hwpoison_inject if we loaded it - if [ "${LOADED_HWPOISON_INJECT_MOD}" = "1" ]; then - modprobe -r hwpoison_inject > /dev/null 2>&1 - fi - count_total=$(( count_total + 1 )) if [ $ret -eq 0 ]; then count_pass=$(( count_pass + 1 )) @@ -465,4 +478,6 @@ CATEGORY="memory-failure" run_test ./memory-failure echo "SUMMARY: PASS=${count_pass} SKIP=${count_skip} FAIL=${count_fail}" | tap_prefix echo "1..${count_total}" | tap_output +unload_modules + exit $exitcode -- 2.43.0

