From: Waiman Long <Waiman.Long@hpe.com> To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com> Cc: linux-kernel@vger.kernel.org, x86@kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-s390@vger.kernel.org, linux-arch@vger.kernel.org, Davidlohr Bueso <dave@stgolabs.net>, Jason Low <jason.low2@hp.com>, Dave Chinner <david@fromorbit.com>, Scott J Norton <scott.norton@hpe.com>, Douglas Hatch <doug.hatch@hpe.com>, Waiman Long <Waiman.Long@hpe.com> Subject: [RFC PATCH-tip v2 1/6] locking/osq: Make lock/unlock proper acquire/release barrier Date: Tue, 14 Jun 2016 18:48:04 -0400 [thread overview] Message-ID: <1465944489-43440-2-git-send-email-Waiman.Long@hpe.com> (raw) In-Reply-To: <1465944489-43440-1-git-send-email-Waiman.Long@hpe.com> The osq_lock() and osq_unlock() function may not provide the necessary acquire and release barrier in some cases. This patch makes sure that the proper barriers are provided when osq_lock() is successful or when osq_unlock() is called. Signed-off-by: Waiman Long <Waiman.Long@hpe.com> --- kernel/locking/osq_lock.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c index 05a3785..7dd4ee5 100644 --- a/kernel/locking/osq_lock.c +++ b/kernel/locking/osq_lock.c @@ -115,7 +115,7 @@ bool osq_lock(struct optimistic_spin_queue *lock) * cmpxchg in an attempt to undo our queueing. */ - while (!READ_ONCE(node->locked)) { + while (!smp_load_acquire(&node->locked)) { /* * If we need to reschedule bail... so we can block. */ @@ -198,7 +198,7 @@ void osq_unlock(struct optimistic_spin_queue *lock) * Second most likely case. */ node = this_cpu_ptr(&osq_node); - next = xchg(&node->next, NULL); + next = xchg_release(&node->next, NULL); if (next) { WRITE_ONCE(next->locked, 1); return; -- 1.7.1
WARNING: multiple messages have this Message-ID (diff)
From: Waiman Long <Waiman.Long@hpe.com> To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com> Cc: linux-kernel@vger.kernel.org, x86@kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-s390@vger.kernel.org, linux-arch@vger.kernel.org, Davidlohr Bueso <dave@stgolabs.net>, Jason Low <jason.low2@hp.com>, Dave Chinner <david@fromorbit.com>, Scott J Norton <scott.norton@hpe.com>, Douglas Hatch <doug.hatch@hpe.com>, Waiman Long <Waiman.Long@hpe.com> Subject: [RFC PATCH-tip v2 1/6] locking/osq: Make lock/unlock proper acquire/release barrier Date: Tue, 14 Jun 2016 22:48:04 +0000 [thread overview] Message-ID: <1465944489-43440-2-git-send-email-Waiman.Long@hpe.com> (raw) In-Reply-To: <1465944489-43440-1-git-send-email-Waiman.Long@hpe.com> The osq_lock() and osq_unlock() function may not provide the necessary acquire and release barrier in some cases. This patch makes sure that the proper barriers are provided when osq_lock() is successful or when osq_unlock() is called. Signed-off-by: Waiman Long <Waiman.Long@hpe.com> --- kernel/locking/osq_lock.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c index 05a3785..7dd4ee5 100644 --- a/kernel/locking/osq_lock.c +++ b/kernel/locking/osq_lock.c @@ -115,7 +115,7 @@ bool osq_lock(struct optimistic_spin_queue *lock) * cmpxchg in an attempt to undo our queueing. */ - while (!READ_ONCE(node->locked)) { + while (!smp_load_acquire(&node->locked)) { /* * If we need to reschedule bail... so we can block. */ @@ -198,7 +198,7 @@ void osq_unlock(struct optimistic_spin_queue *lock) * Second most likely case. */ node = this_cpu_ptr(&osq_node); - next = xchg(&node->next, NULL); + next = xchg_release(&node->next, NULL); if (next) { WRITE_ONCE(next->locked, 1); return; -- 1.7.1
next prev parent reply other threads:[~2016-06-14 22:48 UTC|newest] Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-14 22:48 [RFC PATCH-tip v2 0/6] locking/rwsem: Enable reader optimistic spinning Waiman Long 2016-06-14 22:48 ` Waiman Long 2016-06-14 22:48 ` Waiman Long [this message] 2016-06-14 22:48 ` [RFC PATCH-tip v2 1/6] locking/osq: Make lock/unlock proper acquire/release barrier Waiman Long 2016-06-15 8:04 ` Boqun Feng 2016-06-15 8:04 ` Boqun Feng 2016-06-15 17:18 ` Peter Zijlstra 2016-06-15 17:18 ` Peter Zijlstra 2016-06-15 19:01 ` Waiman Long 2016-06-15 19:01 ` Waiman Long 2016-06-15 19:01 ` Waiman Long 2016-06-16 2:19 ` Boqun Feng 2016-06-16 2:19 ` Boqun Feng 2016-06-16 10:16 ` Will Deacon 2016-06-16 10:16 ` Will Deacon 2016-06-16 21:35 ` Waiman Long 2016-06-16 21:35 ` Waiman Long 2016-06-16 21:35 ` Waiman Long 2016-06-17 0:48 ` Boqun Feng 2016-06-17 0:48 ` Boqun Feng 2016-06-17 15:26 ` Waiman Long 2016-06-17 15:26 ` Waiman Long 2016-06-17 15:26 ` Waiman Long 2016-06-17 15:45 ` Will Deacon 2016-06-17 15:45 ` Will Deacon 2016-06-17 18:17 ` Waiman Long 2016-06-17 18:17 ` Waiman Long 2016-06-17 18:17 ` Waiman Long 2016-06-18 8:46 ` Boqun Feng 2016-06-18 8:46 ` Boqun Feng 2016-06-20 7:59 ` Will Deacon 2016-06-20 7:59 ` Will Deacon 2016-06-15 16:56 ` Davidlohr Bueso 2016-06-15 16:56 ` Davidlohr Bueso 2016-06-15 17:12 ` Peter Zijlstra 2016-06-15 17:12 ` Peter Zijlstra 2016-06-15 18:27 ` Davidlohr Bueso 2016-06-15 18:27 ` Davidlohr Bueso 2016-06-15 18:40 ` Peter Zijlstra 2016-06-15 18:40 ` Peter Zijlstra 2016-06-15 18:56 ` Davidlohr Bueso 2016-06-15 18:56 ` Davidlohr Bueso 2016-06-17 1:11 ` Davidlohr Bueso 2016-06-17 1:11 ` Davidlohr Bueso 2016-06-17 14:28 ` Waiman Long 2016-06-17 14:28 ` Waiman Long 2016-06-17 14:28 ` Waiman Long 2016-06-17 16:29 ` Davidlohr Bueso 2016-06-17 16:29 ` Davidlohr Bueso 2016-06-17 16:46 ` Davidlohr Bueso 2016-06-17 16:46 ` Davidlohr Bueso 2016-06-15 19:08 ` Waiman Long 2016-06-15 19:08 ` Waiman Long 2016-06-15 19:08 ` Waiman Long 2016-06-15 20:04 ` Waiman Long 2016-06-15 20:04 ` Waiman Long 2016-06-15 20:04 ` Waiman Long 2016-06-15 21:59 ` Peter Zijlstra 2016-06-15 21:59 ` Peter Zijlstra 2016-06-14 22:48 ` [RFC PATCH-tip v2 2/6] locking/rwsem: Stop active read lock ASAP Waiman Long 2016-06-14 22:48 ` Waiman Long 2016-06-15 17:22 ` Peter Zijlstra 2016-06-15 17:22 ` Peter Zijlstra 2016-06-15 19:17 ` Waiman Long 2016-06-15 19:17 ` Waiman Long 2016-06-15 19:17 ` Waiman Long 2016-06-16 2:14 ` Davidlohr Bueso 2016-06-16 2:14 ` Davidlohr Bueso 2016-06-16 21:25 ` Waiman Long 2016-06-16 21:25 ` Waiman Long 2016-06-16 21:25 ` Waiman Long 2016-06-14 22:48 ` [RFC PATCH-tip v2 3/6] locking/rwsem: Enable count-based spinning on reader Waiman Long 2016-06-14 22:48 ` Waiman Long 2016-06-15 17:38 ` Peter Zijlstra 2016-06-15 17:38 ` Peter Zijlstra 2016-06-15 19:28 ` Waiman Long 2016-06-15 19:28 ` Waiman Long 2016-06-15 19:28 ` Waiman Long 2016-06-14 22:48 ` [RFC PATCH-tip v2 4/6] locking/rwsem: move down rwsem_down_read_failed function Waiman Long 2016-06-14 22:48 ` Waiman Long 2016-06-15 17:40 ` Peter Zijlstra 2016-06-15 17:40 ` Peter Zijlstra 2016-06-15 19:21 ` Waiman Long 2016-06-15 19:21 ` Waiman Long 2016-06-15 19:21 ` Waiman Long 2016-06-14 22:48 ` [RFC PATCH-tip v2 5/6] locking/rwsem: Change RWSEM_WAITING_BIAS for better disambiguation Waiman Long 2016-06-14 22:48 ` Waiman Long 2016-06-15 17:43 ` Peter Zijlstra 2016-06-15 17:43 ` Peter Zijlstra 2016-06-15 19:31 ` Waiman Long 2016-06-15 19:31 ` Waiman Long 2016-06-15 19:31 ` Waiman Long 2016-06-15 21:57 ` Peter Zijlstra 2016-06-15 21:57 ` Peter Zijlstra 2016-06-15 17:45 ` Peter Zijlstra 2016-06-15 17:45 ` Peter Zijlstra 2016-06-15 19:35 ` Waiman Long 2016-06-15 19:35 ` Waiman Long 2016-06-15 19:35 ` Waiman Long 2016-06-14 22:48 ` [RFC PATCH-tip v2 6/6] locking/rwsem: Enable spinning readers Waiman Long 2016-06-14 22:48 ` Waiman Long
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1465944489-43440-2-git-send-email-Waiman.Long@hpe.com \ --to=waiman.long@hpe.com \ --cc=dave@stgolabs.net \ --cc=david@fromorbit.com \ --cc=doug.hatch@hpe.com \ --cc=jason.low2@hp.com \ --cc=linux-alpha@vger.kernel.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-ia64@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-s390@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=scott.norton@hpe.com \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.