All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Davidlohr Bueso <dave@stgolabs.net>
To: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	linux-kernel@vger.kernel.org, Davidlohr Bueso <dbueso@suse.de>
Subject: [PATCH -tip 2/3] sched/wake_q: Relax to acquire semantics
Date: Mon, 14 Sep 2015 00:37:23 -0700	[thread overview]
Message-ID: <1442216244-4409-2-git-send-email-dave@stgolabs.net> (raw)
In-Reply-To: <1442216244-4409-1-git-send-email-dave@stgolabs.net>

The barrier parings for wake-queues are very straightforward, and thus
we can ease the barrier requirements, for archs that support it, for
wake_q_add by relying on acquire semantics. As such, (i) we keep the
pairing structure/logic and (ii) users, such as mqueues, can continue to
rely on a full barrier after the successful [Rmw].

[Another alternative could be to just not try at all and fully downgrade
to cmpxchg_relaxed() and rely on users to enable their own synchronization.
But controlling this ourselves makes me sleep better at night.]

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
---
 kernel/sched/core.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 6ab415a..7567603 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -523,14 +523,14 @@ void wake_q_add(struct wake_q_head *head, struct task_struct *task)
 	struct wake_q_node *node = &task->wake_q;
 
 	/*
-	 * Atomically grab the task, if ->wake_q is !nil already it means
-	 * its already queued (either by us or someone else) and will get the
-	 * wakeup due to that.
+	 * Atomically grab the task. If ->wake_q is non-nil (failed cmpxchg)
+	 * then the task is already queued (by us or someone else) and will
+	 * get the wakeup due to that.
 	 *
-	 * This cmpxchg() implies a full barrier, which pairs with the write
-	 * barrier implied by the wakeup in wake_up_list().
+	 * Use acquire semantics to add the next pointer, which pairs with the
+	 * write barrier implied by the wakeup in wake_up_list().
 	 */
-	if (cmpxchg(&node->next, NULL, WAKE_Q_TAIL))
+	if (cmpxchg_acquire(&node->next, NULL, WAKE_Q_TAIL))
 		return;
 
 	get_task_struct(task);
-- 
2.1.4


  reply	other threads:[~2015-09-14  7:37 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-14  7:37 [PATCH -tip 1/3] locking/qrwlock: Rename ->lock to ->wait_lock Davidlohr Bueso
2015-09-14  7:37 ` Davidlohr Bueso [this message]
2015-09-14 12:32   ` [PATCH -tip 2/3] sched/wake_q: Relax to acquire semantics Peter Zijlstra
2015-09-14 21:08     ` Davidlohr Bueso
2015-09-15  9:49       ` Peter Zijlstra
2015-09-15  9:55         ` Peter Zijlstra
2015-09-15 12:41           ` Paul E. McKenney
2015-09-15 12:48             ` Peter Zijlstra
2015-09-15 14:09               ` Paul E. McKenney
2015-09-15 14:14                 ` Peter Zijlstra
2015-09-15 15:34                   ` Paul E. McKenney
2015-09-15 16:30                     ` Peter Zijlstra
2015-09-15 17:09                       ` Paul E. McKenney
2015-09-18 21:41                         ` Paul E. McKenney
2015-09-21  9:22                           ` Martin Schwidefsky
2015-09-22 10:27                             ` Martin Schwidefsky
2015-09-22 12:23                               ` Boqun Feng
2015-09-22 12:51                                 ` Martin Schwidefsky
2015-09-22 13:29                                   ` Boqun Feng
2015-09-22 14:33                                     ` Martin Schwidefsky
2015-09-22 15:28                                       ` Paul E. McKenney
2015-09-23  6:43                                         ` Martin Schwidefsky
2015-09-25 21:30                                           ` Paul E. McKenney
2015-09-15 19:49           ` Davidlohr Bueso
2015-09-16  9:01             ` Peter Zijlstra
2015-09-14  7:37 ` [PATCH -tip 3/3] locking/osq: Relax atomic semantics Davidlohr Bueso
2015-09-18  8:50   ` [tip:locking/core] " tip-bot for Davidlohr Bueso
2015-09-18  8:50 ` [tip:locking/core] locking/qrwlock: Rename ->lock to ->wait_lock tip-bot for Davidlohr Bueso

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=1442216244-4409-2-git-send-email-dave@stgolabs.net \
    --to=dave@stgolabs.net \
    --cc=dbueso@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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.