[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <162923125167.25758.9665327938530667311.tip-bot2@tip-bot2>
Date: Tue, 17 Aug 2021 20:14:11 -0000
From: "tip-bot2 for Peter Zijlstra" <tip-bot2@...utronix.de>
To: linux-tip-commits@...r.kernel.org
Cc: "Peter Zijlstra (Intel)" <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...nel.org>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: [tip: locking/core] locking/ww_mutex: Abstract out waiter enqueueing
The following commit has been merged into the locking/core branch of tip:
Commit-ID: 843dac28f90ef80535b0aee0b78446f1770c8611
Gitweb: https://git.kernel.org/tip/843dac28f90ef80535b0aee0b78446f1770c8611
Author: Peter Zijlstra <peterz@...radead.org>
AuthorDate: Sun, 15 Aug 2021 23:28:47 +02:00
Committer: Ingo Molnar <mingo@...nel.org>
CommitterDate: Tue, 17 Aug 2021 19:04:54 +02:00
locking/ww_mutex: Abstract out waiter enqueueing
The upcoming rtmutex based ww_mutex needs a different handling for
enqueueing a waiter. Split it out into a helper function.
Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>
Signed-off-by: Ingo Molnar <mingo@...nel.org>
Link: https://lore.kernel.org/r/20210815211304.566318143@linutronix.de
---
kernel/locking/ww_mutex.h | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/kernel/locking/ww_mutex.h b/kernel/locking/ww_mutex.h
index 1cd178c..f5aaf2f 100644
--- a/kernel/locking/ww_mutex.h
+++ b/kernel/locking/ww_mutex.h
@@ -44,6 +44,15 @@ __ww_waiter_last(struct mutex *lock)
return w;
}
+static inline void
+__ww_waiter_add(struct mutex *lock, struct mutex_waiter *waiter, struct mutex_waiter *pos)
+{
+ struct list_head *p = &lock->wait_list;
+ if (pos)
+ p = &pos->list;
+ __mutex_add_waiter(lock, waiter, p);
+}
+
/*
* Wait-Die:
* The newer transactions are killed when:
@@ -337,12 +346,11 @@ __ww_mutex_add_waiter(struct mutex_waiter *waiter,
struct mutex *lock,
struct ww_acquire_ctx *ww_ctx)
{
- struct mutex_waiter *cur;
- struct list_head *pos;
+ struct mutex_waiter *cur, *pos = NULL;
bool is_wait_die;
if (!ww_ctx) {
- __mutex_add_waiter(lock, waiter, &lock->wait_list);
+ __ww_waiter_add(lock, waiter, NULL);
return 0;
}
@@ -355,7 +363,6 @@ __ww_mutex_add_waiter(struct mutex_waiter *waiter,
* never die here, but they are sorted in stamp order and
* may wound the lock holder.
*/
- pos = &lock->wait_list;
for (cur = __ww_waiter_last(lock); cur;
cur = __ww_waiter_prev(lock, cur)) {
@@ -378,13 +385,13 @@ __ww_mutex_add_waiter(struct mutex_waiter *waiter,
break;
}
- pos = &cur->list;
+ pos = cur;
/* Wait-Die: ensure younger waiters die. */
__ww_mutex_die(lock, cur, ww_ctx);
}
- __mutex_add_waiter(lock, waiter, pos);
+ __ww_waiter_add(lock, waiter, pos);
/*
* Wound-Wait: if we're blocking on a mutex owned by a younger context,
Powered by blists - more mailing lists