forked from Minki/linux
locking/ww_mutex: Add kselftests for ww_mutex AA deadlock detection
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Maarten Lankhorst <dev@mblankhorst.nl> Cc: Nicolai Hähnle <nhaehnle@gmail.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20161201114711.28697-5-chris@chris-wilson.co.uk Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
f2a5fec173
commit
c22fb3807f
@ -118,6 +118,41 @@ static int test_mutex(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int test_aa(void)
|
||||||
|
{
|
||||||
|
struct ww_mutex mutex;
|
||||||
|
struct ww_acquire_ctx ctx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ww_mutex_init(&mutex, &ww_class);
|
||||||
|
ww_acquire_init(&ctx, &ww_class);
|
||||||
|
|
||||||
|
ww_mutex_lock(&mutex, &ctx);
|
||||||
|
|
||||||
|
if (ww_mutex_trylock(&mutex)) {
|
||||||
|
pr_err("%s: trylocked itself!\n", __func__);
|
||||||
|
ww_mutex_unlock(&mutex);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ww_mutex_lock(&mutex, &ctx);
|
||||||
|
if (ret != -EALREADY) {
|
||||||
|
pr_err("%s: missed deadlock for recursing, ret=%d\n",
|
||||||
|
__func__, ret);
|
||||||
|
if (!ret)
|
||||||
|
ww_mutex_unlock(&mutex);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
out:
|
||||||
|
ww_mutex_unlock(&mutex);
|
||||||
|
ww_acquire_fini(&ctx);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int __init test_ww_mutex_init(void)
|
static int __init test_ww_mutex_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -126,6 +161,10 @@ static int __init test_ww_mutex_init(void)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = test_aa();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user