From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: "Emilio G. Cota" <cota@braap.org>
Cc: perfbook@vger.kernel.org
Subject: Re: [PATCH] advsync/mb: fix wrong value of B in data dep example
Date: Wed, 18 Mar 2015 12:08:18 -0700 [thread overview]
Message-ID: <20150318190818.GC5312@linux.vnet.ibm.com> (raw)
In-Reply-To: <1426638622-8901-1-git-send-email-cota@braap.org>
On Tue, Mar 17, 2015 at 08:30:22PM -0400, Emilio G. Cota wrote:
> Signed-off-by: Emilio G. Cota <cota@braap.org>
Applied, thank you!
Thanx, Paul
> ---
> advsync/memorybarriers.tex | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/advsync/memorybarriers.tex b/advsync/memorybarriers.tex
> index e512785..cc11323 100644
> --- a/advsync/memorybarriers.tex
> +++ b/advsync/memorybarriers.tex
> @@ -1667,65 +1667,65 @@ To deal with this, a data dependency barrier must be inserted between the
> address load and the data load (again with initial values of
> {\tt \{A = 1, B = 2, C = 3, P = \&A, Q = \&C\}}):
>
> \vspace{5pt}
> \begin{minipage}[t]{\columnwidth}
> \tt
> \scriptsize
> \begin{tabular}{l|p{1.5in}}
> CPU 1 & CPU 2 \\
> \hline
> B = 4; & \\
> <write barrier> & \\
> P = \&B; & \\
> & Q = P; \\
> & <data dependency barrier> \\
> & D = *Q; \\
> \end{tabular}
> \end{minipage}
> \vspace{5pt}
>
> This enforces the occurrence of one of the two implications, and prevents the
> third possibility from arising.
>
> Note that this extremely counterintuitive situation arises most easily on
> machines with split caches, so that, for example, one cache bank processes
> even-numbered cache lines and the other bank processes odd-numbered cache
> lines.
> The pointer \co{P} might be stored in an odd-numbered cache line, and the
> variable \co{B} might be stored in an even-numbered cache line. Then, if the
> even-numbered bank of the reading CPU's cache is extremely busy while the
> odd-numbered bank is idle, one can see the new value of the
> pointer \co{P} (which is \co{&B}),
> -but the old value of the variable \co{B} (which is 1).
> +but the old value of the variable \co{B} (which is 2).
>
> Another example of where data dependency barriers might by required is where a
> number is read from memory and then used to calculate the index for an array
> access with initial values
> {\tt \{M[0] = 1, M[1] = 2, M[3] = 3, P = 0, Q = 3\}}:
>
> \vspace{5pt}
> \begin{minipage}[t]{\columnwidth}
> \tt
> \scriptsize
> \begin{tabular}{l|p{1.5in}}
> CPU 1 & CPU 2 \\
> \hline
> M[1] = 4; & \\
> <write barrier> & \\
> P = 1; & \\
> & Q = P; \\
> & <data dependency barrier> \\
> & D = M[Q]; \\
> \end{tabular}
> \end{minipage}
> \vspace{5pt}
>
> The data dependency barrier is very important to the Linux kernel's
> RCU system, for example,
> see \co{rcu_dereference()} in \url{include/linux/rcupdate.h}.
> This permits the current
> target of an RCU'd pointer to be replaced with a new modified target, without
> the replacement target appearing to be incompletely initialised.
>
> See also
> Section~\ref{sec:advsync:Cache Coherency}
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe perfbook" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
prev parent reply other threads:[~2015-03-18 19:08 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-18 0:30 [PATCH] advsync/mb: fix wrong value of B in data dep example Emilio G. Cota
2015-03-18 19:08 ` Paul E. McKenney [this message]
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=20150318190818.GC5312@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=cota@braap.org \
--cc=perfbook@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox