File Index
Files and directories
Sign in
FILE

srcu_lockdep.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0+
  3#
  4# Run SRCU-lockdep tests and report any that fail to meet expectations.
  5#
  6# Copyright (C) 2021 Meta Platforms, Inc.
  7#
  8# Authors: Paul E. McKenney <paulmck@kernel.org>
  9
 10usage () {
 11	echo "Usage: $scriptname optional arguments:"
 12	echo "       --datestamp string"
 13	exit 1
 14}
 15
 16ds=`date +%Y.%m.%d-%H.%M.%S`-srcu_lockdep
 17scriptname="$0"
 18
 19T="`mktemp -d ${TMPDIR-/tmp}/srcu_lockdep.sh.XXXXXX`"
 20trap 'rm -rf $T' 0
 21
 22RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
 23PATH=${RCUTORTURE}/bin:$PATH; export PATH
 24. functions.sh
 25
 26while test $# -gt 0
 27do
 28	case "$1" in
 29	--datestamp)
 30		checkarg --datestamp "(relative pathname)" "$#" "$2" '^[a-zA-Z0-9._/-]*$' '^--'
 31		ds=$2
 32		shift
 33		;;
 34	*)
 35		echo Unknown argument $1
 36		usage
 37		;;
 38	esac
 39	shift
 40done
 41
 42nerrs=0
 43
 44# Test lockdep's handling of deadlocks.
 45for d in 0 1
 46do
 47	for t in 0 1 2
 48	do
 49		for c in 1 2 3
 50		do
 51			err=
 52			val=$((d*1000+t*10+c))
 53			tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 5s --configs "SRCU-P" --kconfig "CONFIG_FORCE_NEED_SRCU_NMI_SAFE=y" --bootargs "rcutorture.test_srcu_lockdep=$val rcutorture.reader_flavor=0x2" --trust-make --datestamp "$ds/$val" > "$T/kvm.sh.out" 2>&1
 54			ret=$?
 55			mv "$T/kvm.sh.out" "$RCUTORTURE/res/$ds/$val"
 56			if ! grep -q '^CONFIG_PROVE_LOCKING=y' .config
 57			then
 58				echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING disabled in rcutorture SRCU-P scenario"
 59				nerrs=$((nerrs+1))
 60				err=1
 61			fi
 62			if test "$d" -ne 0 && test "$ret" -eq 0
 63			then
 64				err=1
 65				echo -n Unexpected success for > "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
 66			fi
 67			if test "$d" -eq 0 && test "$ret" -ne 0
 68			then
 69				err=1
 70				echo -n Unexpected failure for > "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
 71			fi
 72			if test -n "$err"
 73			then
 74				grep "rcu_torture_init_srcu_lockdep: test_srcu_lockdep = " "$RCUTORTURE/res/$ds/$val/SRCU-P/console.log" | sed -e 's/^.*rcu_torture_init_srcu_lockdep://' >> "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
 75				cat "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
 76				nerrs=$((nerrs+1))
 77			fi
 78		done
 79	done
 80done
 81
 82# Test lockdep-enabled testing of mixed SRCU readers.
 83for val in 0x1 0xf
 84do
 85	err=
 86	tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 5s --configs "SRCU-P" --kconfig "CONFIG_FORCE_NEED_SRCU_NMI_SAFE=y" --bootargs "rcutorture.reader_flavor=$val" --trust-make --datestamp "$ds/$val" > "$T/kvm.sh.out" 2>&1
 87	ret=$?
 88	mv "$T/kvm.sh.out" "$RCUTORTURE/res/$ds/$val"
 89	if ! grep -q '^CONFIG_PROVE_LOCKING=y' .config
 90	then
 91		echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING disabled in rcutorture SRCU-P scenario"
 92		nerrs=$((nerrs+1))
 93		err=1
 94	fi
 95	if test "$val" -eq 0xf && test "$ret" -eq 0
 96	then
 97		err=1
 98		echo -n Unexpected success for > "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
 99	fi
100	if test "$val" -eq 0x1 && test "$ret" -ne 0
101	then
102		err=1
103		echo -n Unexpected failure for > "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
104	fi
105	if test -n "$err"
106	then
107		grep "rcu_torture_init_srcu_lockdep: test_srcu_lockdep = " "$RCUTORTURE/res/$ds/$val/SRCU-P/console.log" | sed -e 's/^.*rcu_torture_init_srcu_lockdep://' >> "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
108		cat "$RCUTORTURE/res/$ds/$val/kvm.sh.err"
109		nerrs=$((nerrs+1))
110	fi
111done
112
113# Set up exit code.
114if test "$nerrs" -ne 0
115then
116	exit 1
117fi
118exit 0
~/ Read-only file preview.