All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] futex: add memory barrier commentary to futex_wait_queue_me
@ 2009-09-24 18:54 Darren Hart
  2009-09-25  6:20 ` [tip:core/urgent] futex: Add memory barrier commentary to futex_wait_queue_me() tip-bot for Darren Hart
  0 siblings, 1 reply; 2+ messages in thread
From: Darren Hart @ 2009-09-24 18:54 UTC (permalink / raw)
  To: linux-kernel
  Cc: Darren Hart, Thomas Gleixner, Peter Zijlstra, Ingo Molnar,
	Eric Dumazet, Dinakar Guniguntala, John Stultz

The memory barrier semantics of futex_wait_queue_me() are non-obvious.
Add some commentary to try and clarify it.

Signed-off-by: Darren Hart <dvhltc@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@elte.hu>
CC: Eric Dumazet <eric.dumazet@gmail.com>
CC: Dinakar Guniguntala <dino@in.ibm.com>
CC: John Stultz <johnstul@us.ibm.com>
---

 kernel/futex.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/kernel/futex.c b/kernel/futex.c
index 463af2e..b911adc 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1656,6 +1656,12 @@ out:
 static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
 				struct hrtimer_sleeper *timeout)
 {
+	/*
+	 * The task state is guaranteed to be set before another task can
+	 * wake it. set_current_state() is implemented using set_mb() and
+	 * queue_me() calls spin_unlock() upon completion, both serializing
+	 * access to the hash list and forcing another memory barrier.
+	 */
 	set_current_state(TASK_INTERRUPTIBLE);
 	queue_me(q, hb);
 


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [tip:core/urgent] futex: Add memory barrier commentary to futex_wait_queue_me()
  2009-09-24 18:54 [PATCH] futex: add memory barrier commentary to futex_wait_queue_me Darren Hart
@ 2009-09-25  6:20 ` tip-bot for Darren Hart
  0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Darren Hart @ 2009-09-25  6:20 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, dvhltc, hpa, mingo, eric.dumazet, johnstul, peterz,
	dino, tglx, mingo

Commit-ID:  9beba3c54dd180a26a1da2027cfbe9edfaf9c40e
Gitweb:     http://git.kernel.org/tip/9beba3c54dd180a26a1da2027cfbe9edfaf9c40e
Author:     Darren Hart <dvhltc@us.ibm.com>
AuthorDate: Thu, 24 Sep 2009 11:54:47 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Thu, 24 Sep 2009 22:30:10 +0200

futex: Add memory barrier commentary to futex_wait_queue_me()

The memory barrier semantics of futex_wait_queue_me() are
non-obvious. Add some commentary to try and clarify it.

Signed-off-by: Darren Hart <dvhltc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Dinakar Guniguntala <dino@in.ibm.com>
Cc: John Stultz <johnstul@us.ibm.com>
LKML-Reference: <20090924185447.694.38948.stgit@Aeon>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 kernel/futex.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/kernel/futex.c b/kernel/futex.c
index 463af2e..b911adc 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1656,6 +1656,12 @@ out:
 static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
 				struct hrtimer_sleeper *timeout)
 {
+	/*
+	 * The task state is guaranteed to be set before another task can
+	 * wake it. set_current_state() is implemented using set_mb() and
+	 * queue_me() calls spin_unlock() upon completion, both serializing
+	 * access to the hash list and forcing another memory barrier.
+	 */
 	set_current_state(TASK_INTERRUPTIBLE);
 	queue_me(q, hb);
 

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-09-25  6:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-24 18:54 [PATCH] futex: add memory barrier commentary to futex_wait_queue_me Darren Hart
2009-09-25  6:20 ` [tip:core/urgent] futex: Add memory barrier commentary to futex_wait_queue_me() tip-bot for Darren Hart

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.