mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	dmitry.adamushko@gmail.com, a.p.zijlstra@chello.nl,
	apw@shadowen.org, mingo@elte.hu, nickpiggin@yahoo.com.au,
	paulmck@linux.vnet.ibm.com, rusty@rustcorp.com.au,
	Steven Rostedt <rostedt@goodmis.org>
Subject: Re: + kthread-add-a-missing-memory-barrier-to-kthread_stop.patch added to -mm tree
Date: Sat, 23 Feb 2008 09:54:45 -0800 (PST)	[thread overview]
Message-ID: <alpine.LFD.1.00.0802230937530.21332@woody.linux-foundation.org> (raw)
In-Reply-To: <20080223162705.GA7686@tv-sign.ru>



On Sat, 23 Feb 2008, Oleg Nesterov wrote:
> 
> In short: wake_up_process() doesn't imply mb(), this means that _in theory_
> the commonly used code like
> 
> 	set_current_state(TASK_INTERRUPTIBLE);
> 	if (CONDITION)
> 		return;
> 	schedule();
> 
> is racy wrt
> 
> 	CONDITION = 1;
> 	wake_up_process(p);
> 
> I'll be happy to be wrong though, please correct me.

Well, you should be wrong on x86, because the spinlock at the head of 
wake_up_process() (well, "try_to_wake_up()" to be exact) will be a full 
memory barrier.

But yeah, in general spinlocks can have weaker semantics, and let 
preceding writes percolate into the critical section and thus past the 
point that actually sets task->state.

And I do agree that we should *not* add a memory barrier in the caller 
(that's just going to be really confusing for everybody, and make these 
things much harder than they should be), and we should make sure that the 
above sequence is always race-free.

I also think that a full memory barrier is overkill. We should be ok with 
just adding a write barrier to the top of wake_up_process(), no? That way, 
we know that the CONDITION will be seen on the other CPU before it sees 
task->state change to TASK_RUNNING, so with the memory barrier int he 
"set_current_state()", we know that the other side will see the new 
condition _or_ it will see TASK_RUNNING when it hits schedule.

No?

(smp_wmb() also has the advantage of being a no-op on x86, where it's not 
needed).

But memory ordering is hard. Maybe I'm not thinking right about this.

			Linus

  parent reply	other threads:[~2008-02-23 17:56 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200802230733.m1N7XnMu018253@imap1.linux-foundation.org>
2008-02-23 16:27 ` Oleg Nesterov
2008-02-23 17:35   ` Steven Rostedt
2008-02-23 17:54   ` Linus Torvalds [this message]
2008-02-23 18:22     ` Oleg Nesterov
2008-02-23 18:57       ` Linus Torvalds
2008-02-23 19:36         ` Oleg Nesterov
2008-02-23 19:51         ` Dmitry Adamushko
2008-02-23 20:08           ` Linus Torvalds
2008-02-23 21:03             ` [PATCH, 3rd resend] documentation: atomic_add_unless() doesn't imply mb() on failure Oleg Nesterov
2008-02-23 21:07             ` + kthread-add-a-missing-memory-barrier-to-kthread_stop.patch added to -mm tree Dmitry Adamushko
2008-02-25 13:55         ` David Howells
2008-02-23 19:41     ` Dmitry Adamushko
2008-02-23 20:02       ` Linus Torvalds

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=alpine.LFD.1.00.0802230937530.21332@woody.linux-foundation.org \
    --to=torvalds@linux-foundation.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=apw@shadowen.org \
    --cc=dmitry.adamushko@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=oleg@tv-sign.ru \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=rusty@rustcorp.com.au \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®