From: Oleg Nesterov <oleg@redhat.com>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Michal Hocko <mhocko@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
David Howells <dhowells@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Jonathan Corbet <corbet@lwn.net>
Subject: Re: wake_up_process implied memory barrier clarification
Date: Tue, 1 Sep 2015 11:59:23 +0200 [thread overview]
Message-ID: <20150901095923.GB31368@redhat.com> (raw)
In-Reply-To: <20150901034014.GD1071@fixme-laptop.cn.ibm.com>
On 09/01, Boqun Feng wrote:
>
> But I'm still a little confused at Oleg's words:
>
> "What is really important is that we have a barrier before we _read_ the
> task state."
>
> I read is as "What is really important is that we have a barrier before
> we _read_ the task state and _after_ we write the CONDITION", if I don't
> misunderstand Oleg, this means a STORE-barrier-LOAD sequence,
Yes, exactly.
Let's look at this trivial code again,
CONDITION = 1;
wake_up_process();
note that try_to_wake_up() does
if (!(p->state & state))
goto out;
If this LOAD could be reordered with STORE(CONDITION) above we can obviously
race with
set_current_state(...);
if (!CONDITION)
schedule();
See the comment at the start of try_to_wake_up(). And again, again, please
note that initially the only documented behaviour of smp_mb__before_spinlock()
was the STORE - LOAD serialization. This is what try_to_wake_up() needs, it
doesn't actually need the write barrier after STORE(CONDITION).
And just in case, wake_up() differs in a sense that it doesn't even need
that STORE-LOAD barrier in try_to_wake_up(), we can rely on
wait_queue_head_t->lock. Assuming that wake_up() pairs with the "normal"
wait_event()-like code.
> which IIUC
> can't pair with anything.
It pairs with the barrier implied by set_current_state().
Oleg.
next prev parent reply other threads:[~2015-09-01 10:02 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-27 12:27 wake_up_process implied memory barrier clarification Michal Hocko
2015-08-27 12:43 ` Peter Zijlstra
2015-08-27 13:14 ` Michal Hocko
2015-08-27 18:26 ` Oleg Nesterov
2015-08-28 14:51 ` Michal Hocko
2015-08-28 16:06 ` Oleg Nesterov
2015-08-29 9:25 ` Boqun Feng
2015-08-29 14:27 ` Oleg Nesterov
2015-08-31 0:37 ` Boqun Feng
2015-08-31 18:33 ` Oleg Nesterov
2015-08-31 20:37 ` Paul E. McKenney
2015-09-01 3:40 ` Boqun Feng
2015-09-01 4:03 ` Paul E. McKenney
2015-09-01 9:59 ` Oleg Nesterov [this message]
2015-09-01 14:50 ` Boqun Feng
2015-09-01 16:39 ` Oleg Nesterov
2015-09-02 1:10 ` Boqun Feng
2015-09-07 17:06 ` Oleg Nesterov
2015-09-08 0:22 ` Boqun Feng
2015-09-01 9:41 ` Oleg Nesterov
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=20150901095923.GB31368@redhat.com \
--to=oleg@redhat.com \
--cc=boqun.feng@gmail.com \
--cc=corbet@lwn.net \
--cc=dhowells@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--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.