From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Davidlohr Bueso <davidlohr@hp.com>, Jason Low <jason.low2@hp.com>,
Ingo Molnar <mingo@kernel.org>,
Darren Hart <dvhart@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Mike Galbraith <efault@gmx.de>, Jeff Mahoney <jeffm@suse.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Scott Norton <scott.norton@hp.com>, Tom Vaden <tom.vaden@hp.com>,
Aswin Chandramouleeswaran <aswin@hp.com>,
Waiman Long <Waiman.Long@hp.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [RFC patch 3/5] futex: Split out unlock from queue_me()
Date: Mon, 25 Nov 2013 20:58:12 -0000 [thread overview]
Message-ID: <20131125203525.921463830@linutronix.de> (raw)
In-Reply-To: 20131125203358.156292370@linutronix.de
[-- Attachment #1: futex-split-out-unlock-from-queue-me.patch --]
[-- Type: text/plain, Size: 2324 bytes --]
Preparatory patch for a lockless empty check of the hash bucket plist
in futex_wake().
No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/futex.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
Index: linux-2.6/kernel/futex.c
===================================================================
--- linux-2.6.orig/kernel/futex.c
+++ linux-2.6/kernel/futex.c
@@ -1548,15 +1548,14 @@ static inline void queue_unlock(struct f
* @q: The futex_q to enqueue
* @hb: The destination hash bucket
*
- * The hb->lock must be held by the caller, and is released here. A call to
- * queue_me() is typically paired with exactly one call to unqueue_me(). The
- * exceptions involve the PI related operations, which may use unqueue_me_pi()
- * or nothing if the unqueue is done as part of the wake process and the unqueue
- * state is implicit in the state of woken task (see futex_wait_requeue_pi() for
- * an example).
+ * The hb->lock must be held by the caller. A call to queue_me() is
+ * typically paired with exactly one call to unqueue_me(). The
+ * exceptions involve the PI related operations, which may use
+ * unqueue_me_pi() or nothing if the unqueue is done as part of the
+ * wake process and the unqueue state is implicit in the state of
+ * woken task (see futex_wait_requeue_pi() for an example).
*/
static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
- __releases(&hb->lock)
{
int prio;
@@ -1573,7 +1572,6 @@ static inline void queue_me(struct futex
plist_node_init(&q->list, prio);
plist_add(&q->list, &hb->chain);
q->task = current;
- spin_unlock(&hb->lock);
}
/**
@@ -1834,6 +1832,11 @@ static void futex_wait_queue_me(struct f
*/
set_current_state(TASK_INTERRUPTIBLE);
queue_me(q, hb);
+ /*
+ * Unlock _AFTER_ we queued ourself. See the comment describing
+ * the futex ordering guarantees on top of this file.
+ */
+ queue_unlock(hb);
/* Arm the timer */
if (timeout) {
@@ -2085,6 +2088,11 @@ retry_private:
* Only actually queue now that the atomic ops are done:
*/
queue_me(&q, hb);
+ /*
+ * Unlock _AFTER_ we queued ourself. See the comment describing
+ * the futex ordering guarantees on top of this file.
+ */
+ queue_unlock(hb);
WARN_ON(!q.pi_state);
/*
next prev parent reply other threads:[~2013-11-25 20:59 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-25 20:58 [RFC patch 0/5] futex: Allow lockless empty check of hashbucket plist in futex_wake() Thomas Gleixner
2013-11-25 20:58 ` [RFC patch 1/5] futex: Misc cleanups Thomas Gleixner
2013-11-25 20:58 ` [RFC patch 2/5] futex: Document ordering guarantees Thomas Gleixner
2013-11-25 20:58 ` Thomas Gleixner [this message]
2013-11-25 20:58 ` [RFC patch 4/5] futex: Enqueue waiter before user space check Thomas Gleixner
2013-11-26 0:20 ` Darren Hart
2013-11-25 20:58 ` [RFC patch 5/5] futex: Allow lockless empty check of hash bucket plist Thomas Gleixner
2013-11-26 8:12 ` [RFC patch 0/5] futex: Allow lockless empty check of hashbucket plist in futex_wake() Davidlohr Bueso
2013-11-26 8:52 ` Peter Zijlstra
2013-11-26 11:21 ` Ingo Molnar
2013-11-26 11:56 ` Peter Zijlstra
2013-11-26 12:34 ` Thomas Gleixner
2013-11-26 15:38 ` Davidlohr Bueso
2013-11-26 14:49 ` Davidlohr Bueso
2013-11-26 19:25 ` Davidlohr Bueso
2013-11-26 20:51 ` Davidlohr Bueso
2013-11-26 23:56 ` Thomas Gleixner
2013-11-28 7:44 ` Davidlohr Bueso
2013-11-28 11:58 ` Thomas Gleixner
2013-11-28 11:59 ` Peter Zijlstra
2013-11-28 14:23 ` Thomas Gleixner
2013-12-01 4:37 ` Davidlohr Bueso
2013-12-02 11:01 ` Thomas Gleixner
2013-12-01 12:10 ` Ingo Molnar
2013-12-01 12:56 ` Peter Zijlstra
2013-12-01 16:55 ` Ingo Molnar
2013-12-01 18:58 ` Linus Torvalds
2013-12-01 20:39 ` Eric Dumazet
2013-12-01 21:46 ` Linus Torvalds
2013-12-03 17:59 ` Darren Hart
2013-12-02 12:35 ` Ingo Molnar
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=20131125203525.921463830@linutronix.de \
--to=tglx@linutronix.de \
--cc=Waiman.Long@hp.com \
--cc=aswin@hp.com \
--cc=davidlohr@hp.com \
--cc=dvhart@linux.intel.com \
--cc=efault@gmx.de \
--cc=jason.low2@hp.com \
--cc=jeffm@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=scott.norton@hp.com \
--cc=tom.vaden@hp.com \
--cc=torvalds@linux-foundation.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: link
Be 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.