login
Login
/
Register
Search
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2007
»
October
»
2
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
view
thread
!MAILaRCHIVE_VOTE_RePLACE
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From:
Oleg Nesterov <oleg@...>
To: Paul E. McKenney <paulmck@...>
Cc: Davide Libenzi <davidel@...>, Linux Kernel Mailing List <linux-kernel@...>, <linux-rt-users@...>, Ingo Molnar <mingo@...>, Andrew Morton <akpm@...>, <dipankar@...>, <josht@...>, <tytso@...>, <dvhltc@...>, <tglx@...>, <a.p.zijlstra@...>, <bunk@...>, <ego@...>, <srostedt@...>
Subject:
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
Date: Tuesday, October 2, 2007 - 2:02 pm
On 09/30, Paul E. McKenney wrote:
quoted text
> > On Sun, Sep 30, 2007 at 04:02:09PM -0700, Davide Libenzi wrote: > > On Sun, 30 Sep 2007, Oleg Nesterov wrote: > > > > > Ah, but I asked the different question. We must see CPU 1's stores by > > > definition, but what about CPU 0's stores (which could be seen by CPU 1)? > > > > > > Let's take a "real life" example, > > > > > > A = B = X = 0; > > > P = Q = &A; > > > > > > CPU_0 CPU_1 CPU_2 > > > > > > P = &B; *P = 1; if (X) { > > > wmb(); rmb(); > > > X = 1; BUG_ON(*P != 1 && *Q != 1); > > > } > > > > > > So, is it possible that CPU_1 sees P == &B, but CPU_2 sees P == &A ? > > > > That can't be. CPU_2 sees X=1, that happened after (or same time at most - > > from a cache inv. POV) to *P=1, that must have happened after P=&B (in > > order for *P to assign B). So P=&B happened, from a pure time POV, before > > the rmb(), and the rmb() should guarantee that CPU_2 sees P=&B too. > > Actually, CPU designers have to go quite a ways out of their way to > prevent this BUG_ON from happening. One way that it would happen > naturally would be if the cache line containing P were owned by CPU 2, > and if CPUs 0 and 1 shared a store buffer that they both snooped. So, > here is what could happen given careless or sadistic CPU designers: > > o CPU 0 stores &B to P, but misses the cache, so puts the > result in the store buffer. This means that only CPUs 0 and 1 > can see it. > > o CPU 1 fetches P, and sees &B, so stores a 1 to B. Again, > this value for P is visible only to CPUs 0 and 1. > > o CPU 1 executes a wmb(), which forces CPU 1's stores to happen > in order. But it does nothing about CPU 0's stores, nor about CPU > 1's loads, for that matter (and the only reason that POWER ends > up working the way you would like is because wmb() turns into > "sync" rather than the "eieio" instruction that would have been > used for smp_wmb() -- which is maybe what Oleg was thinking of, > but happened to abbreviate. If my analysis is buggy, Anton and > Paulus will no doubt correct me...) > > o CPU 1 stores to X. > > o CPU 2 loads X, and sees that the value is 1. > > o CPU 2 does an rmb(), which orders its loads, but does nothing > about anyone else's loads or stores. > > o CPU 2 fetches P from its cached copy, which still points to A, > which is still zero. So the BUG_ON fires. > > o Some time later, CPU 0 gets the cache line containing P from > CPU 2, and updates it from the value in the store buffer, but > too late... > > Unfortunately, cache-coherence protocols don't care much about pure > time... It is possible to make a 16-CPU machine believe that a single > variable has more than ten different values -at- -the- -same- -time-.
Davide, Paul, thank you very much! I've been wondering about this for the long time, now I know the answer. Great. Oleg. -
unsubscribe notice
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
[PATCH RFC 0/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Mon Sep 10, 2:30 pm)
Re: [PATCH RFC 0/9] RCU: Preemptible RCU
, Ingo Molnar
, (Mon Sep 10, 2:44 pm)
[PATCH RFC 9/9] RCU: preemptible documentation and comment c...
, Paul E. McKenney
, (Mon Sep 10, 2:42 pm)
[PATCH RFC 8/9] RCU: Make RCU priority boosting consume less...
, Paul E. McKenney
, (Mon Sep 10, 2:41 pm)
[PATCH RFC 7/9] RCU: rcutorture testing for RCU priority boo...
, Paul E. McKenney
, (Mon Sep 10, 2:39 pm)
[PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Paul E. McKenney
, (Mon Sep 10, 2:39 pm)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Gautham R Shenoy
, (Fri Oct 5, 7:46 am)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Steven Rostedt
, (Fri Oct 5, 8:24 am)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Gautham R Shenoy
, (Fri Oct 5, 9:21 am)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Paul E. McKenney
, (Fri Oct 5, 10:07 am)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Gautham R Shenoy
, (Fri Sep 28, 6:56 pm)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Steven Rostedt
, (Fri Sep 28, 7:05 pm)
Re: [PATCH RFC 6/9] RCU priority boosting for preemptible RCU
, Paul E. McKenney
, (Sat Sep 29, 11:11 pm)
[PATCH RFC 5/9] RCU: CPU hotplug support for preemptible RCU
, Paul E. McKenney
, (Mon Sep 10, 2:36 pm)
Re: [PATCH RFC 5/9] RCU: CPU hotplug support for preemptible...
, Oleg Nesterov
, (Sun Sep 30, 12:38 pm)
Re: [PATCH RFC 5/9] RCU: CPU hotplug support for preemptible...
, Paul E. McKenney
, (Sun Sep 30, 9:41 pm)
[PATCH RFC 4/9] RCU: synchronize_sched() workaround for CPU ...
, Paul E. McKenney
, (Mon Sep 10, 2:35 pm)
[PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Mon Sep 10, 2:34 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Oleg Nesterov
, (Sun Sep 23, 1:38 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Sun Sep 23, 8:15 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Oleg Nesterov
, (Wed Sep 26, 11:13 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Thu Sep 27, 11:46 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Oleg Nesterov
, (Fri Sep 28, 10:47 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 28, 2:57 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Oleg Nesterov
, (Sun Sep 30, 12:31 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Sun Sep 30, 9:20 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Davide Libenzi
, (Sun Sep 30, 7:02 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Sun Sep 30, 9:37 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Oleg Nesterov
, (Tue Oct 2, 2:02 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Davide Libenzi
, (Mon Oct 1, 2:44 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Mon Oct 1, 3:21 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Davide Libenzi
, (Mon Oct 1, 6:09 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Mon Oct 1, 6:24 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 11:20 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 7:03 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 8:32 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 9:19 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 9:43 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 10:56 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Sat Sep 22, 12:10 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 10:40 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 8:26 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 9:15 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 9:53 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 11:15 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Sat Sep 22, 12:07 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Peter Zijlstra
, (Fri Sep 21, 11:46 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 6:31 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 6:44 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 7:23 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 7:44 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 6:06 pm)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Steven Rostedt
, (Fri Sep 21, 12:17 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Dipankar Sarma
, (Fri Sep 21, 1:56 am)
Re: [PATCH RFC 3/9] RCU: Preemptible RCU
, Paul E. McKenney
, (Fri Sep 21, 1:50 am)
[PATCH RFC 1/9] RCU: Split API to permit multiple RCU implem...
, Paul E. McKenney
, (Mon Sep 10, 2:32 pm)
Re: [PATCH RFC 1/9] RCU: Split API to permit multiple RCU im...
, Steven Rostedt
, (Fri Sep 21, 12:14 am)
[PATCH RFC 2/9] RCU: Fix barriers
, Paul E. McKenney
, (Mon Sep 10, 2:33 pm)
Navigation
Create content
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Stephane Jourdois
Re: 2.6.21-rc4-mm1 [PATCH] init/missing_syscalls.h fix
David Brown
Re: Linux 2.6.21-rc2
Andi Kleen
[PATCH] [1/12] x86: Work around mmio config space quirk on AMD Fam10h
david
Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3
linux-netdev
:
David Miller
Re: [GIT]: Networking
David Woodhouse
Re: [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin"
Gerrit Renker
[PATCH 15/37] dccp: Set per-connection CCIDs via socket options
Jarek Poplawski
[PATCH] pkt_sched: Destroy gen estimators under rtnl_lock().
git
:
openbsd-misc
:
Colocation donated by:
Who's online
There are currently
4 users
and
624 guests
online.
Online users
casasruralesfi
81make7money
paultheplumber
asiandream
Syndicate