From: Peter Zijlstra <peterz@infradead.org>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Steven Rostedt <rostedt@goodmis.org>,
linux-kernel@vger.kernel.org,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Oleg Nesterov <oleg@redhat.com>, Ingo Molnar <mingo@elte.hu>,
akpm@linux-foundation.org, josh@joshtriplett.org,
tglx@linutronix.de, Valdis.Kletnieks@vt.edu, dhowells@redhat.com,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [RFC PATCH] introduce sys_membarrier(): process-wide memory barrier (v5)
Date: Wed, 20 Jan 2010 09:45:51 +0100 [thread overview]
Message-ID: <1263977151.4283.816.camel@laptop> (raw)
In-Reply-To: <20100120031323.GA15318@Krystal>
On Tue, 2010-01-19 at 22:13 -0500, Mathieu Desnoyers wrote:
> * Peter Zijlstra (peterz@infradead.org) wrote:
> > On Tue, 2010-01-19 at 19:37 +0100, Peter Zijlstra wrote:
> > > On Thu, 2010-01-14 at 14:33 -0500, Mathieu Desnoyers wrote:
> > > > It's a case where CPU 1 switches from our mm to another mm:
> > > >
> > > > CPU 0 (membarrier) CPU 1 (another mm -our mm)
> > > > <user-space> <user-space>
> > > > <buffered access C.S. data>
> > > > urcu read unlock()
> > > > barrier()
> > > > store local gp
> > > > <kernel-space>
> > >
> > > OK, so the question is how we end up here, if its though interrupt
> > > preemption I think the interrupt delivery will imply an mb,
> >
> > I keep thinking that, but I think we actually refuted that in an earlier
> > discussion on this patch.
>
> Intel Architecture Software Developer's Manual Vol. 3: System
> Programming
> 7.4 Serializing Instructions
>
> "MOV to control reg, MOV to debug reg, WRMSR, INVD, INVLPG, WBINDV, LGDT,
> LLDT, LIDT, LTR, CPUID, IRET, RSM"
>
> So, this list does _not_ include: INT, SYSENTER, SYSEXIT.
>
> Only IRET is included. So I don't think it is safe to assume that x86
> has serializing instructions when entering/leaving the kernel.
I got confused by 7.1.2.1 automatic locking on interrupt acknowledge.
But I already retracted that stmt.
> >
> > > if its a
> > > blocking syscall, the set_task_state() mb [*] should be there.
> > >
> > > Then we also do:
> > >
> > > clear_tsk_need_resched()
> > >
> > > which is an atomic bitop (although does not imply a full barrier
> > > per-se).
> > >
> > > > rq->curr = next (1)
> >
> > We could possibly look at placing that assignment in context_switch()
> > between switch_mm() and switch_to(), which should provide a mb before
> > and after I think, Ingo?
>
> That's an interesting idea. It would indeed fix the problem of the
> missing barrier before the assignment, but would lack the appropriate
> barrier after the assignment. If the rq->curr = next; assignment is made
> after load_cr3, then we lack a memory barrier between the assignment and
> execution of following user-space code after returning with SYSEXIT (and
> we lack the appropriate barrier for other architectures too).
Well, 7.1.2.1 says that writing a segment register implies a LOCK, but
on second reading there are a number of qualifiers there, not sure we
satisfy that.
Peter, does our switch_to() imply a mb?
next prev parent reply other threads:[~2010-01-20 8:46 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-13 1:37 [RFC PATCH] introduce sys_membarrier(): process-wide memory barrier (v5) Mathieu Desnoyers
2010-01-13 3:23 ` KOSAKI Motohiro
2010-01-13 3:58 ` Mathieu Desnoyers
2010-01-13 4:47 ` KOSAKI Motohiro
2010-01-13 5:33 ` Paul E. McKenney
2010-01-13 15:03 ` Mathieu Desnoyers
2010-01-14 0:15 ` KOSAKI Motohiro
2010-01-14 2:16 ` Mathieu Desnoyers
2010-01-14 2:25 ` KOSAKI Motohiro
2010-01-13 5:00 ` Nicholas Miell
2010-01-13 5:31 ` Paul E. McKenney
2010-01-13 5:39 ` Nicholas Miell
2010-01-13 14:38 ` Mathieu Desnoyers
2010-01-13 18:07 ` Nicholas Miell
2010-01-13 18:24 ` Mathieu Desnoyers
2010-01-13 18:41 ` Nicholas Miell
2010-01-13 19:17 ` Mathieu Desnoyers
2010-01-13 19:42 ` David Daney
2010-01-13 19:53 ` Nicholas Miell
2010-01-13 23:42 ` Mathieu Desnoyers
2010-01-13 15:58 ` Paul E. McKenney
2010-01-13 11:07 ` Heiko Carstens
2010-01-13 14:46 ` Mathieu Desnoyers
2010-01-13 16:38 ` Peter Zijlstra
2010-01-13 19:36 ` Mathieu Desnoyers
2010-01-14 9:08 ` Peter Zijlstra
2010-01-14 16:26 ` Mathieu Desnoyers
2010-01-14 17:03 ` Peter Zijlstra
2010-01-14 17:54 ` Mathieu Desnoyers
2010-01-14 18:37 ` Mathieu Desnoyers
2010-01-14 18:52 ` Steven Rostedt
2010-01-14 19:33 ` Mathieu Desnoyers
2010-01-14 21:26 ` Steven Rostedt
2010-01-19 18:37 ` Peter Zijlstra
2010-01-19 19:06 ` Peter Zijlstra
2010-01-20 3:13 ` Mathieu Desnoyers
2010-01-20 8:45 ` Peter Zijlstra [this message]
2010-01-21 11:26 ` Peter Zijlstra
2010-01-21 16:07 ` Mathieu Desnoyers
2010-01-21 16:12 ` Steven Rostedt
2010-01-21 16:22 ` Mathieu Desnoyers
2010-01-21 16:32 ` Steven Rostedt
2010-01-21 17:02 ` Mathieu Desnoyers
2010-01-21 16:17 ` Peter Zijlstra
2010-01-21 17:01 ` Mathieu Desnoyers
2010-01-19 19:43 ` Steven Rostedt
2010-01-14 18:50 ` Steven Rostedt
2010-01-19 16:47 ` Peter Zijlstra
2010-01-19 17:11 ` Mathieu Desnoyers
2010-01-19 17:30 ` Steven Rostedt
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=1263977151.4283.816.camel@laptop \
--to=peterz@infradead.org \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=hpa@zytor.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=rostedt@goodmis.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.