summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDavid Laight <David.Laight@ACULAB.COM>2023-12-29 20:56:03 +0000
committerLinus Torvalds <torvalds@linux-foundation.org>2023-12-30 10:25:51 -0800
commitb106bcf0f99ae0459f3c8c2f0af575ef9f5d9bde (patch)
treeb6353e163374cfac2989c69b8398dcf205c8a62b /kernel
parent563adbfc351b2af9f1406b809ba60b9f1673a882 (diff)
locking/osq_lock: Clarify osq_wait_next()
Directly return NULL or 'next' instead of breaking out of the loop. Signed-off-by: David Laight <david.laight@aculab.com> [ Split original patch into two independent parts - Linus ] Link: https://lore.kernel.org/lkml/7c8828aec72e42eeb841ca0ee3397e9a@AcuMS.aculab.com/ Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/locking/osq_lock.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c
index 15955ce35c53..75a6f6133866 100644
--- a/kernel/locking/osq_lock.c
+++ b/kernel/locking/osq_lock.c
@@ -55,7 +55,6 @@ osq_wait_next(struct optimistic_spin_queue *lock,
struct optimistic_spin_node *node,
int old_cpu)
{
- struct optimistic_spin_node *next = NULL;
int curr = encode_cpu(smp_processor_id());
for (;;) {
@@ -66,7 +65,7 @@ osq_wait_next(struct optimistic_spin_queue *lock,
* will now observe @lock and will complete its
* unlock()/unqueue().
*/
- break;
+ return NULL;
}
/*
@@ -80,15 +79,15 @@ osq_wait_next(struct optimistic_spin_queue *lock,
* wait for a new @node->next from its Step-C.
*/
if (node->next) {
+ struct optimistic_spin_node *next;
+
next = xchg(&node->next, NULL);
if (next)
- break;
+ return next;
}
cpu_relax();
}
-
- return next;
}
bool osq_lock(struct optimistic_spin_queue *lock)