mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
locktorture: Add nested locking to rtmutex torture tests
This patch adds randomized nested locking to the rtmutex torture tests. Additionally it adds LOCK09 config files for testing rtmutexes with nested locking. Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Josh Triplett <josh@joshtriplett.org> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Valentin Schneider <vschneid@redhat.com> Cc: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: kernel-team@android.com Reviewed-by: Davidlohr Bueso <dave@stgolabs.net> Co-developed-by: Connor O'Brien <connoro@google.com> Signed-off-by: Connor O'Brien <connoro@google.com> Signed-off-by: John Stultz <jstultz@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
3e5aeaf534
commit
ae4823e427
@ -544,6 +544,28 @@ static struct lock_torture_ops ww_mutex_lock_ops = {
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
static DEFINE_RT_MUTEX(torture_rtmutex);
|
||||
static struct rt_mutex torture_nested_rtmutexes[MAX_NESTED_LOCKS];
|
||||
static struct lock_class_key nested_rtmutex_keys[MAX_NESTED_LOCKS];
|
||||
|
||||
static void torture_rtmutex_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_NESTED_LOCKS; i++)
|
||||
__rt_mutex_init(&torture_nested_rtmutexes[i], __func__,
|
||||
&nested_rtmutex_keys[i]);
|
||||
}
|
||||
|
||||
static int torture_rtmutex_nested_lock(int tid __maybe_unused,
|
||||
u32 lockset)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nested_locks; i++)
|
||||
if (lockset & (1 << i))
|
||||
rt_mutex_lock(&torture_nested_rtmutexes[i]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int torture_rtmutex_lock(int tid __maybe_unused)
|
||||
__acquires(torture_rtmutex)
|
||||
@ -585,11 +607,24 @@ static void torture_rt_boost_rtmutex(struct torture_random_state *trsp)
|
||||
__torture_rt_boost(trsp);
|
||||
}
|
||||
|
||||
static void torture_rtmutex_nested_unlock(int tid __maybe_unused,
|
||||
u32 lockset)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = nested_locks - 1; i >= 0; i--)
|
||||
if (lockset & (1 << i))
|
||||
rt_mutex_unlock(&torture_nested_rtmutexes[i]);
|
||||
}
|
||||
|
||||
static struct lock_torture_ops rtmutex_lock_ops = {
|
||||
.init = torture_rtmutex_init,
|
||||
.nested_lock = torture_rtmutex_nested_lock,
|
||||
.writelock = torture_rtmutex_lock,
|
||||
.write_delay = torture_rtmutex_delay,
|
||||
.task_boost = torture_rt_boost_rtmutex,
|
||||
.writeunlock = torture_rtmutex_unlock,
|
||||
.nested_unlock = torture_rtmutex_nested_unlock,
|
||||
.readlock = NULL,
|
||||
.read_delay = NULL,
|
||||
.readunlock = NULL,
|
||||
|
@ -6,3 +6,4 @@ LOCK05
|
||||
LOCK06
|
||||
LOCK07
|
||||
LOCK08
|
||||
LOCK09
|
||||
|
6
tools/testing/selftests/rcutorture/configs/lock/LOCK09
Normal file
6
tools/testing/selftests/rcutorture/configs/lock/LOCK09
Normal file
@ -0,0 +1,6 @@
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
@ -0,0 +1 @@
|
||||
locktorture.torture_type=rtmutex_lock locktorture.nested_locks=8
|
Loading…
Reference in New Issue
Block a user