locking/osq_lock: Clarify osq_wait_next()
authorDavid Laight <David.Laight@ACULAB.COM>
Fri, 29 Dec 2023 20:56:03 +0000 (20:56 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Dec 2023 18:25:51 +0000 (10:25 -0800)
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>
kernel/locking/osq_lock.c

index 15955ce..75a6f61 100644 (file)
@@ -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)