diff options
author | David Laight <David.Laight@ACULAB.COM> | 2023-12-29 20:56:03 +0000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-12-30 10:25:51 -0800 |
commit | b106bcf0f99ae0459f3c8c2f0af575ef9f5d9bde (patch) | |
tree | b6353e163374cfac2989c69b8398dcf205c8a62b /kernel/locking | |
parent | 563adbfc351b2af9f1406b809ba60b9f1673a882 (diff) | |
download | linux-b106bcf0f99ae0459f3c8c2f0af575ef9f5d9bde.tar.gz linux-b106bcf0f99ae0459f3c8c2f0af575ef9f5d9bde.tar.bz2 linux-b106bcf0f99ae0459f3c8c2f0af575ef9f5d9bde.zip |
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/locking')
-rw-r--r-- | kernel/locking/osq_lock.c | 9 |
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) |