From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org, mingo@kernel.org,
jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org,
dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com,
oleg@redhat.com, will.deacon@arm.com
Subject: Re: [PATCH tip/core/rcu 4/5] sys_membarrier: Add expedited option
Date: Thu, 27 Jul 2017 07:36:58 -0700 [thread overview]
Message-ID: <20170727143658.GW3730@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170727142955.bb2bdgbjcm745xwo@tardis>
On Thu, Jul 27, 2017 at 10:29:55PM +0800, Boqun Feng wrote:
> On Thu, Jul 27, 2017 at 07:16:33AM -0700, Paul E. McKenney wrote:
> > On Thu, Jul 27, 2017 at 09:55:51PM +0800, Boqun Feng wrote:
> > > Hi Paul,
> > >
> > > I have a side question out of curiosity:
> > >
> > > How does synchronize_sched() work properly for sys_membarrier()?
> > >
> > > sys_membarrier() requires every other CPU does a smp_mb() before it
> > > returns, and I know synchronize_sched() will wait until all CPUs running
> > > a kernel thread do a context-switch, which has a smp_mb(). However, I
> > > believe sched flavor RCU treat CPU running a user thread as a quiesent
> > > state, so synchronize_sched() could return without that CPU does a
> > > context switch.
> > >
> > > So why could we use synchronize_sched() for sys_membarrier()?
> > >
> > > In particular, could the following happens?
> > >
> > > CPU 0: CPU 1:
> > > ========================= ==========================
> > > <in user space> <in user space>
> > > {read Y}(reordered) <------------------------------+
> > > store Y; |
> > > read X; --------------------------------------+ |
> > > sys_membarrier(): <timer interrupt> | |
> > > synchronize_sched(); update_process_times(user): //user == true | |
> > > rcu_check_callbacks(usr): | |
> > > if (user || ..) { | |
> > > rcu_sched_qs() | |
> > > ... | |
> > > <report quesient state in softirq> | |
> >
> > The reporting of the quiescent state will acquire the leaf rcu_node
> > structure's lock, with an smp_mb__after_unlock_lock(), which will
> > one way or another be a full memory barrier. So the reorderings
> > cannot happen.
> >
> > Unless I am missing something subtle. ;-)
> >
>
> Well, smp_mb__after_unlock_lock() in ARM64 is a no-op, and ARM64's lock
> doesn't provide a smp_mb().
>
> So my point is more like: synchronize_sched() happens to be a
> sys_membarrier() because of some implementation detail, and if some day
> we come up with a much cheaper way to implement sched flavor
> RCU(hopefully!), synchronize_sched() may be not good for the job. So at
> least, we'd better document this somewhere?
Last I heard, ARM's unlock/lock acted as a full barrier. Will?
Please see the synchronize_sched() comment header for the documentation
you are asking for. And the "Memory-Barrier Guarantees" section of
Documentation/RCU/Design/Requirements/Requirements.html.
Thanx, Paul
> Regards,
> Boqun
>
> > Thanx, Paul
> >
> > > <return to user space> | |
> > > read Y; --------------------------------------+----+
> > > store X; |
> > > {read X}(reordered) <-------------------------+
> > >
> > > I assume the timer interrupt handler, which interrupts a user space and
> > > reports a quiesent state for sched flavor RCU, may not have a smp_mb()
> > > in some code path.
> > >
> > > I may miss something subtle, but it just not very obvious how
> > > synchronize_sched() will guarantee a remote CPU running in userspace to
> > > do a smp_mb() before it returns, this is at least not in RCU
> > > requirements, right?
> > >
> > > Regards,
> > > Boqun
> >
> >
next prev parent reply other threads:[~2017-07-27 14:37 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-24 21:57 [PATCH tip/core/rcu 0/5] Related non-RCU updates Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 1/5] module: Fix pr_fmt() bug for header use of printk Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 2/5] init_task: Remove redundant INIT_TASK_RCU_TREE_PREEMPT() macro Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 3/5] EXPERIMENTAL sched: Allow migrating kthreads into online but inactive CPUs Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 4/5] sys_membarrier: Add expedited option Paul E. McKenney
2017-07-25 4:27 ` Boqun Feng
2017-07-25 16:24 ` Paul E. McKenney
2017-07-25 13:21 ` Mathieu Desnoyers
2017-07-25 16:48 ` Paul E. McKenney
2017-07-25 16:33 ` Peter Zijlstra
2017-07-25 16:49 ` Paul E. McKenney
2017-07-25 16:59 ` Peter Zijlstra
2017-07-25 17:17 ` Paul E. McKenney
2017-07-25 18:53 ` Peter Zijlstra
2017-07-25 19:36 ` Paul E. McKenney
2017-07-25 20:24 ` Peter Zijlstra
2017-07-25 21:19 ` Paul E. McKenney
2017-07-25 21:55 ` Peter Zijlstra
2017-07-25 22:39 ` Mathieu Desnoyers
2017-07-25 22:50 ` Mathieu Desnoyers
2017-07-26 0:01 ` Paul E. McKenney
2017-07-26 7:46 ` Peter Zijlstra
2017-07-26 15:42 ` Paul E. McKenney
2017-07-26 18:01 ` Mathieu Desnoyers
2017-07-26 18:30 ` Paul E. McKenney
2017-07-26 20:37 ` Mathieu Desnoyers
2017-07-26 21:11 ` Paul E. McKenney
2017-07-27 1:45 ` Paul E. McKenney
2017-07-27 12:39 ` Mathieu Desnoyers
2017-07-27 14:44 ` Paul E. McKenney
2017-07-27 10:24 ` Peter Zijlstra
2017-07-27 14:52 ` Paul E. McKenney
2017-07-27 8:53 ` Peter Zijlstra
2017-07-27 10:09 ` Peter Zijlstra
2017-07-27 10:22 ` Will Deacon
2017-07-27 13:14 ` Paul E. McKenney
2017-07-25 23:59 ` Paul E. McKenney
2017-07-26 7:41 ` Peter Zijlstra
2017-07-26 15:41 ` Paul E. McKenney
2017-07-27 8:30 ` Peter Zijlstra
2017-07-27 13:08 ` Paul E. McKenney
2017-07-27 13:49 ` Peter Zijlstra
2017-07-27 14:32 ` Paul E. McKenney
2017-07-27 14:36 ` Peter Zijlstra
2017-07-27 14:46 ` Paul E. McKenney
2017-07-27 13:55 ` Boqun Feng
2017-07-27 14:16 ` Paul E. McKenney
2017-07-27 14:29 ` Boqun Feng
2017-07-27 14:36 ` Paul E. McKenney [this message]
2017-07-27 14:41 ` Will Deacon
2017-07-27 14:47 ` Boqun Feng
2017-07-27 14:55 ` Paul E. McKenney
2017-07-27 13:56 ` Peter Zijlstra
2017-07-27 15:19 ` Peter Zijlstra
2017-07-26 9:36 ` Will Deacon
2017-07-26 15:46 ` Paul E. McKenney
2017-07-27 10:14 ` Peter Zijlstra
2017-07-27 12:56 ` Paul E. McKenney
2017-07-27 13:37 ` Peter Zijlstra
2017-07-27 14:33 ` Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 5/5] EXP: sched/cputime: Fix using smp_processor_id() in preemptible Paul E. McKenney
2017-07-24 22:01 ` Wanpeng Li
2017-07-24 22:29 ` Paul E. McKenney
2017-07-31 22:51 ` [PATCH tip/core/rcu 0/5] Related non-RCU updates Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 1/4] module: Fix pr_fmt() bug for header use of printk Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 2/4] init_task: Remove redundant INIT_TASK_RCU_TREE_PREEMPT() macro Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 3/4] sched: Allow migrating kthreads into online but inactive CPUs Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 4/4] membarrier: Expedited private command Paul E. McKenney
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=20170727143658.GW3730@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=boqun.feng@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=will.deacon@arm.com \
/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.