Commit 7e01c4c5 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Joel Fernandes
Browse files

torture: Add testing of RCU's Rust bindings to torture.sh



This commit adds a --do-rcu-rust parameter to torture.sh, which invokes
a rust_doctests_kernel kunit run.  Note that kunit wants a clean source
tree, so this runs "make mrproper", which might come as a surprise to
some users.  Should there be a --mrproper parameter to torture.sh to make
the user explicitly ask for it?

Co-developed-by: default avatarBoqun Feng <boqun.feng@gmail.com>
Signed-off-by: default avatarBoqun Feng <boqun.feng@gmail.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Signed-off-by: default avatarJoel Fernandes <joelagnelf@nvidia.com>
parent fa11a54c
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ do_clocksourcewd=yes
do_rt=yes
do_rcutasksflavors=yes
do_srcu_lockdep=yes
do_rcu_rust=no

# doyesno - Helper function for yes/no arguments
function doyesno () {
@@ -89,6 +90,7 @@ usage () {
	echo "       --do-rcutorture / --do-no-rcutorture / --no-rcutorture"
	echo "       --do-refscale / --do-no-refscale / --no-refscale"
	echo "       --do-rt / --do-no-rt / --no-rt"
	echo "       --do-rcu-rust / --do-no-rcu-rust / --no-rcu-rust"
	echo "       --do-scftorture / --do-no-scftorture / --no-scftorture"
	echo "       --do-srcu-lockdep / --do-no-srcu-lockdep / --no-srcu-lockdep"
	echo "       --duration [ <minutes> | <hours>h | <days>d ]"
@@ -191,6 +193,9 @@ do
	--do-rt|--do-no-rt|--no-rt)
		do_rt=`doyesno "$1" --do-rt`
		;;
	--do-rcu-rust|--do-no-rcu-rust|--no-rcu-rust)
		do_rcu_rust=`doyesno "$1" --do-rcu-rust`
		;;
	--do-scftorture|--do-no-scftorture|--no-scftorture)
		do_scftorture=`doyesno "$1" --do-scftorture`
		;;
@@ -485,6 +490,46 @@ then
	torture_set "rcurttorture-exp" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration "$duration_rcutorture" --configs "TREE03" --kconfig "CONFIG_PREEMPT_RT=y CONFIG_EXPERT=y CONFIG_HZ_PERIODIC=n CONFIG_NO_HZ_FULL=y CONFIG_RCU_NOCB_CPU=y" --trust-make
fi

if test "$do_rcu_rust" = "yes"
then
	echo " --- do-rcu-rust:" Start `date` | tee -a $T/log
	rrdir="tools/testing/selftests/rcutorture/res/$ds/results-rcu-rust"
	mkdir -p "$rrdir"
	echo " --- make LLVM=1 rustavailable " | tee -a $rrdir/log > $rrdir/rustavailable.out
	make LLVM=1 rustavailable > $T/rustavailable.out 2>&1
	retcode=$?
	echo $retcode > $rrdir/rustavailable.exitcode
	cat $T/rustavailable.out | tee -a $rrdir/log >> $rrdir/rustavailable.out 2>&1
	buildphase=rustavailable
	if test "$retcode" -eq 0
	then
		echo " --- Running 'make mrproper' in order to run kunit." | tee -a $rrdir/log > $rrdir/mrproper.out
		make mrproper > $rrdir/mrproper.out 2>&1
		retcode=$?
		echo $retcode > $rrdir/mrproper.exitcode
		buildphase=mrproper
	fi
	if test "$retcode" -eq 0
	then
		echo " --- Running rust_doctests_kernel." | tee -a $rrdir/log > $rrdir/rust_doctests_kernel.out
		./tools/testing/kunit/kunit.py run --make_options LLVM=1 --make_options CLIPPY=1 --arch arm64 --kconfig_add CONFIG_SMP=y --kconfig_add CONFIG_WERROR=y --kconfig_add CONFIG_RUST=y rust_doctests_kernel >> $rrdir/rust_doctests_kernel.out 2>&1
		# @@@ Remove "--arch arm64" in order to test on native architecture?
		# @@@ Analyze $rrdir/rust_doctests_kernel.out contents?
		retcode=$?
		echo $retcode > $rrdir/rust_doctests_kernel.exitcode
		buildphase=rust_doctests_kernel
	fi
	if test "$retcode" -eq 0
	then
		echo "rcu-rust($retcode)" $rrdir >> $T/successes
		echo Success >> $rrdir/log
	else
		echo "rcu-rust($retcode)" $rrdir >> $T/failures
		echo " --- rcu-rust Test summary:" >> $rrdir/log
		echo " --- Summary: Exit code $retcode from $buildphase, see $rrdir/$buildphase.out" >> $rrdir/log
	fi
fi

if test "$do_srcu_lockdep" = "yes"
then
	echo " --- do-srcu-lockdep:" Start `date` | tee -a $T/log