Re: perf events ring buffer memory barrier on powerpc
From: Paul E. McKenney
Date: Sun Nov 03 2013 - 00:05:40 EST
On Fri, Nov 01, 2013 at 11:30:17AM +0100, Peter Zijlstra wrote:
> On Fri, Nov 01, 2013 at 02:28:14AM -0700, Paul E. McKenney wrote:
> > > This is a completely untenable position.
> >
> > Indeed it is!
> >
> > C/C++ never was intended to be used for parallel programming,
>
> And yet pretty much all kernels ever written for SMP systems are written
> in it; what drugs are those people smoking?
There was a time when I wished that the C/C++ standards people had added
concurrency to the language 30 years ago, but I eventually realized that
any attempt at that time would have been totally broken.
> Furthermore there's a gazillion parallel userspace programs.
Most of which have very unaggressive concurrency designs.
> > and this is
> > but one of the problems that can arise when we nevertheless use it for
> > parallel programming. As compilers get smarter (for some definition of
> > "smarter") and as more systems have special-purpose hardware (such as
> > vector units) that are visible to the compiler, we can expect more of
> > this kind of trouble.
> >
> > This was one of many reasons that I decided to help with the C/C++11
> > effort, whatever anyone might think about the results.
>
> Well, I applaud your efforts, but given the results I think the C/C++
> people are all completely insane.
If it makes you feel any better, they have the same opinion of all of
us who use C/C++ for concurrency given that the standard provides no
guarantee.
> > > How do the C/C++ people propose to deal with this?
> >
> > By marking "ptr" as atomic, thus telling the compiler not to mess with it.
> > And thus requiring that all accesses to it be decorated, which in the
> > case of RCU could be buried in the RCU accessors.
>
> This seems contradictory; marking it atomic would look like:
>
> struct foo {
> unsigned long value;
> __atomic void *ptr;
> unsigned long value1;
> };
>
> Clearly we cannot hide this definition in accessors, because then
> accesses to value* won't see the annotation.
#define __rcu __atomic
Though there are probably placement restrictions for __atomic that
current use of __rcu doesn't pay attention to.
> That said; mandating we mark all 'shared' data with __atomic is
> completely untenable and is not backwards compatible.
>
> To be safe we must assume all data shared unless indicated otherwise.
Something similar to the compiler directives forcing twos-complement
interpretation of signed overflow could be attractive. Not sure what
it would do to code generation, though.
Thanx, Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/