Commit bf7b3ac2 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

locking/ww_mutex: Improve test to cover acquire context changes

Currently each thread starts an acquire context only once, and
performs all its loop iterations under it.

This means that the Wound/Wait relations between threads are fixed.

To make things a little more realistic and cover more of the
functionality with the test, open a new acquire context for each loop.
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 383776fa
...@@ -398,12 +398,11 @@ static void stress_inorder_work(struct work_struct *work) ...@@ -398,12 +398,11 @@ static void stress_inorder_work(struct work_struct *work)
if (!order) if (!order)
return; return;
ww_acquire_init(&ctx, &ww_class);
do { do {
int contended = -1; int contended = -1;
int n, err; int n, err;
ww_acquire_init(&ctx, &ww_class);
retry: retry:
err = 0; err = 0;
for (n = 0; n < nlocks; n++) { for (n = 0; n < nlocks; n++) {
...@@ -433,9 +432,9 @@ static void stress_inorder_work(struct work_struct *work) ...@@ -433,9 +432,9 @@ static void stress_inorder_work(struct work_struct *work)
__func__, err); __func__, err);
break; break;
} }
} while (--stress->nloops);
ww_acquire_fini(&ctx); ww_acquire_fini(&ctx);
} while (--stress->nloops);
kfree(order); kfree(order);
kfree(stress); kfree(stress);
...@@ -470,9 +469,9 @@ static void stress_reorder_work(struct work_struct *work) ...@@ -470,9 +469,9 @@ static void stress_reorder_work(struct work_struct *work)
kfree(order); kfree(order);
order = NULL; order = NULL;
ww_acquire_init(&ctx, &ww_class);
do { do {
ww_acquire_init(&ctx, &ww_class);
list_for_each_entry(ll, &locks, link) { list_for_each_entry(ll, &locks, link) {
err = ww_mutex_lock(ll->lock, &ctx); err = ww_mutex_lock(ll->lock, &ctx);
if (!err) if (!err)
...@@ -495,9 +494,9 @@ static void stress_reorder_work(struct work_struct *work) ...@@ -495,9 +494,9 @@ static void stress_reorder_work(struct work_struct *work)
dummy_load(stress); dummy_load(stress);
list_for_each_entry(ll, &locks, link) list_for_each_entry(ll, &locks, link)
ww_mutex_unlock(ll->lock); ww_mutex_unlock(ll->lock);
} while (--stress->nloops);
ww_acquire_fini(&ctx); ww_acquire_fini(&ctx);
} while (--stress->nloops);
out: out:
list_for_each_entry_safe(ll, ln, &locks, link) list_for_each_entry_safe(ll, ln, &locks, link)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment