ipc: Replace spin_unlock_wait() with lock/unlock pair
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 29 Jun 2017 19:59:32 +0000 (12:59 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 17 Aug 2017 15:08:57 +0000 (08:08 -0700)
There is no agreed-upon definition of spin_unlock_wait()'s semantics,
and it appears that all callers could do just as well with a lock/unlock
pair.  This commit therefore replaces the spin_unlock_wait() call in
exit_sem() with spin_lock() followed immediately by spin_unlock().
This should be safe from a performance perspective because exit_sem()
is rarely invoked in production.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Andrea Parri <parri.andrea@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Acked-by: Manfred Spraul <manfred@colorfullife.com>
ipc/sem.c

index 9e70cd7..2570830 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -2091,7 +2091,8 @@ void exit_sem(struct task_struct *tsk)
                         * possibility where we exit while freeary() didn't
                         * finish unlocking sem_undo_list.
                         */
-                       spin_unlock_wait(&ulp->lock);
+                       spin_lock(&ulp->lock);
+                       spin_unlock(&ulp->lock);
                        rcu_read_unlock();
                        break;
                }