From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: linux-kernel@vger.kernel.org, lizhijian@cn.fujitsu.com,
sandipan@linux.vnet.ibm.com
Subject: Re: [PATCH] tools: restore READ_ONCE() C++ compatibility
Date: Mon, 9 Apr 2018 16:40:32 -0300 [thread overview]
Message-ID: <20180409194032.GA7184@redhat.com> (raw)
In-Reply-To: <20180409171041.6qfabrccsqu4bdlc@lakrids.cambridge.arm.com>
Em Mon, Apr 09, 2018 at 06:10:41PM +0100, Mark Rutland escreveu:
> Hi Arnaldo,
>
> As Sandipan gave a Tested-by for this, are you happy to pick it up as a
> fix for v4.17?
>
> Or would you prefer that I resend this?
I forgot about this fix, but was exposed to it while processing
Sandipan's patches for fixing up builtin clang support, so I ended up
adding the following patch:
https://git.kernel.org/acme/c/ad0902e0c400
This sidesteps this issue by removing the sequence of includes that ends
up including the compiler.h from a C++ file.
Now 'make LIBCLANGLLVM=1 -C tools/perf' works, but I'll look at the
patch below, probably it will save some time in the future if we get to
include compiler.h from C++ code again...
Take a look at my perf/urgent branch, that I just asked Ingo to pull.
- Arnaldo
> Thanks,
> Mark.
>
> On Wed, Apr 04, 2018 at 05:34:45PM +0100, Mark Rutland wrote:
> > Our userspace <linux/compiler.h> defines READ_ONCE() in a way that clang
> > doesn't like, as we have an anonymous union in which neither field is
> > initialized.
> >
> > WRITE_ONCE() is fine since it initializes the __val field. For
> > READ_ONCE() we can keep clang and GCC happy with a dummy initialization
> > of the __c field, so let's do that.
> >
> > At the same time, let's split READ_ONCE() and WRITE_ONCE() over several
> > lines for legibility, as we do in the in-kernel <linux/compiler.h>.
> >
> > Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> > Fixes: 6aa7de059173a986 ("locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE()")
> > Reported-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> > Reported-by: Sandipan Das <sandipan@linux.vnet.ibm.com>
> > Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> > ---
> > tools/include/linux/compiler.h | 20 +++++++++++++++-----
> > 1 file changed, 15 insertions(+), 5 deletions(-)
> >
> > Hi,
> >
> > This is fallout from my automated ACCESS_ONCE() removal, and I'm not that
> > familiar with using clang for perf.
> >
> > In local testing, this fixes READ_ONCE() when compiling with clang, but I
> > subsequently hit some other issues which I believe are down to LLVM API
> > changes.
> >
> > Zhijian, Sandipan, does this patch work for you?
> >
> > Thanks,
> > Mark.
> >
> > diff --git a/tools/include/linux/compiler.h b/tools/include/linux/compiler.h
> > index 04e32f965ad7..1827c2f973f9 100644
> > --- a/tools/include/linux/compiler.h
> > +++ b/tools/include/linux/compiler.h
> > @@ -151,11 +151,21 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
> > * required ordering.
> > */
> >
> > -#define READ_ONCE(x) \
> > - ({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; })
> > -
> > -#define WRITE_ONCE(x, val) \
> > - ({ union { typeof(x) __val; char __c[1]; } __u = { .__val = (val) }; __write_once_size(&(x), __u.__c, sizeof(x)); __u.__val; })
> > +#define READ_ONCE(x) \
> > +({ \
> > + union { typeof(x) __val; char __c[1]; } __u = \
> > + { .__c = { 0 } }; \
> > + __read_once_size(&(x), __u.__c, sizeof(x)); \
> > + __u.__val; \
> > +})
> > +
> > +#define WRITE_ONCE(x, val) \
> > +({ \
> > + union { typeof(x) __val; char __c[1]; } __u = \
> > + { .__val = (val) }; \
> > + __write_once_size(&(x), __u.__c, sizeof(x)); \
> > + __u.__val; \
> > +})
> >
> >
> > #ifndef __fallthrough
> > --
> > 2.11.0
> >
next prev parent reply other threads:[~2018-04-09 19:40 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-04 16:34 [PATCH] tools: restore READ_ONCE() C++ compatibility Mark Rutland
2018-04-04 17:13 ` Sandipan Das
2018-04-04 17:18 ` Mark Rutland
2018-04-04 17:22 ` Sandipan Das
2018-04-09 17:10 ` Mark Rutland
2018-04-09 19:40 ` Arnaldo Carvalho de Melo [this message]
2018-04-10 10:55 ` Mark Rutland
2018-04-10 15:50 ` Arnaldo Carvalho de Melo
2018-04-16 6:41 ` [tip:perf/urgent] tools headers: Restore " tip-bot for Mark Rutland
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=20180409194032.GA7184@redhat.com \
--to=acme@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizhijian@cn.fujitsu.com \
--cc=mark.rutland@arm.com \
--cc=sandipan@linux.vnet.ibm.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.