[PATCH 28/28] torture.sh: Add hazptr torturing

From: Paul E. McKenney

Date: Fri Sep 18 2026 - 20:07:37 EST


This commit adds hazard-pointer torturing to the torture.sh script
as a default-on option. This uses the same duration as rcutorture.
While in the area, change kvm.sh to tolerate the empty-string arguments
that torture.sh can generate, for example, if a given test needs no
boot arguments.

Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
Cc: Boqun Feng <boqun@xxxxxxxxxx>
Cc: Bradley Morgan <brads@xxxxxxxxxxxxxx>
---
tools/testing/selftests/rcutorture/bin/kvm.sh | 4 +++
.../selftests/rcutorture/bin/torture.sh | 26 ++++++++++++++++++-
2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/rcutorture/bin/kvm.sh b/tools/testing/selftests/rcutorture/bin/kvm.sh
index 32c319997638..2f386cf536e3 100755
--- a/tools/testing/selftests/rcutorture/bin/kvm.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm.sh
@@ -98,6 +98,7 @@ usage () {

while test $# -gt 0
do
+ echo Argument: :$1:
case "$1" in
--allcpus)
cpus=$TORTURE_ALLOTED_CPUS
@@ -271,6 +272,9 @@ do
--trust-make)
TORTURE_TRUST_MAKE="y"
;;
+ "")
+ # torture.sh can pass empty arguments. Ignore them.
+ ;;
*)
echo Unknown argument $1
usage
diff --git a/tools/testing/selftests/rcutorture/bin/torture.sh b/tools/testing/selftests/rcutorture/bin/torture.sh
index f0083891ee81..2824dab14d41 100755
--- a/tools/testing/selftests/rcutorture/bin/torture.sh
+++ b/tools/testing/selftests/rcutorture/bin/torture.sh
@@ -43,6 +43,7 @@ fi
configs_rcutorture=
configs_locktorture=
configs_scftorture=
+configs_hazptr=
kcsan_kmake_args=

# Default compression, duration, and apportionment.
@@ -69,6 +70,7 @@ do_rt=yes
do_rcutasksflavors="${ifnotaarch64}" # FIXME: Back to "yes" when SMP=n auto-avoided
do_srcu_lockdep=yes
do_rcu_rust=no
+do_hazptr=yes

# doyesno - Helper function for yes/no arguments
function doyesno () {
@@ -89,6 +91,7 @@ usage () {
echo " --do-all"
echo " --do-allmodconfig / --do-no-allmodconfig / --no-allmodconfig"
echo " --do-clocksourcewd / --do-no-clocksourcewd / --no-clocksourcewd"
+ echo " --do-hazptr / --do-no-hazptr / --no-hazptr"
echo " --do-kasan / --do-no-kasan / --no-kasan"
echo " --do-kcsan / --do-no-kcsan / --no-kcsan"
echo " --do-kvfree / --do-no-kvfree / --no-kvfree"
@@ -117,6 +120,11 @@ do
compress_concurrency=$2
shift
;;
+ --config-hazptr|--configs-hazptr)
+ checkarg --configs-hazptr "(list of config files)" "$#" "$2" '^[^/]\+$' '^--'
+ configs_hazptr="$configs_hazptr $2"
+ shift
+ ;;
--config-rcutorture|--configs-rcutorture)
checkarg --configs-rcutorture "(list of config files)" "$#" "$2" '^[^/]\+$' '^--'
configs_rcutorture="$configs_rcutorture $2"
@@ -147,6 +155,7 @@ do
do_kasan=yes
do_kcsan=yes
do_clocksourcewd="${ifnotaarch64}"
+ do_hazptr=yes
do_srcu_lockdep=yes
;;
--do-allmodconfig|--do-no-allmodconfig|--no-allmodconfig)
@@ -155,6 +164,9 @@ do
--do-clocksourcewd|--do-no-clocksourcewd|--no-clocksourcewd)
do_clocksourcewd=`doyesno "$1" --do-clocksourcewd`
;;
+ --do-hazptr|--do-no-hazptr|--no-hazptr)
+ do_hazptr=`doyesno "$1" --do-hazptr`
+ ;;
--do-kasan|--do-no-kasan|--no-kasan)
do_kasan=`doyesno "$1" --do-kasan`
;;
@@ -182,6 +194,7 @@ do
do_kasan=no
do_kcsan=no
do_clocksourcewd=no
+ do_hazptr=no
do_srcu_lockdep=no
;;
--do-normal|--do-norm|--do-no-normal|--do-no-norm|--no-normal|--no-norm)
@@ -343,7 +356,7 @@ function torture_one {
boottag="--bootargs"
cur_bootargs="$torture_bootargs"
fi
- "$@" $boottag "$cur_bootargs" --datestamp "$ds/results-$curflavor" > $T/$curflavor.out 2>&1
+ "$@" "${boottag}" "$cur_bootargs" --datestamp "$ds/results-$curflavor" > $T/$curflavor.out 2>&1
retcode=$?
resdir="`grep '^Results directory: ' $T/$curflavor.out | tail -1 | sed -e 's/^Results directory: //'`"
if test -z "$resdir"
@@ -704,6 +717,17 @@ then
fi
fi

+# Calculate hazptr defaults and apportion time
+if test -z "$configs_hazptr"
+then
+ configs_hazptr=CFLIST
+fi
+if test "$do_hazptr" = "yes"
+then
+ torture_bootargs=""
+ torture_set "hazptr" tools/testing/selftests/rcutorture/bin/kvm.sh --torture hazptr --allcpus --duration "$duration_rcutorture" --configs "$configs_hazptr" --trust-make
+fi
+
echo " --- " $scriptname $args
echo " --- " Done `date` | tee -a $T/log
ret=0
--
2.40.1