From: bjanakiraman@chromium.org (Bhaskar Janakiraman)
Subject: [lttng-dev] current_thread_info() not respecting program order with gcc 4.8.x
Date: Thu, 21 Nov 2013 15:03:50 -0800 [thread overview]
Message-ID: <CA+1cYqStNbLd0NZ1y7toWA+gS_6KsgFgFX0yqNit+SVm5oTcvQ@mail.gmail.com> (raw)
In-Reply-To: <CA+55aFyNZun07BLoD2KQFT7cN1xsiQ2gE6hYwRvOGa3tCap4CQ@mail.gmail.com>
On Thu, Nov 21, 2013 at 2:32 PM, Linus Torvalds <
torvalds at linux-foundation.org> wrote:
> On Thu, Nov 21, 2013 at 8:02 AM, Alexander Holler <holler at ahsoftware.de>
> wrote:
> >
> > Luis Lozano just noted (see https://lkml.org/lkml/2013/11/20/625) that
> > current_thread_info() has the prototype
> >
> > static inline struct thread_info *current_thread_info(void)
> > __attribute_const__;
> >
> > on arm (and arm64 and unicore32, something the paste from Mathieu missed
> so
> > most people here might have missed that detail too). It's a very good
> > finding from Luis.
>
Can someone provide a test case? We are unable to reproduce the problem in
ChromeOS land.
>
> No, because it is immaterial.
>
> We *want* gcc to optimize away multiple accesses to "sp". Because it
> doesn't *matter* whether "sp" changes or not, the *result* is always
> the same. That's what the "const" means.
>
> The "& ~(THREAD_SIZE - 1)" part will remove all the bits that can
> change. Really. So the result *is* constant (within one thread).
> Marking it constant and telling gcc that it can combine these things
> is correct.
>
Its unfortunate that the attribute '__const__ ' is very misleading - the
semantic used by gcc is that this is an aliasing attribute that implies
that the function does not depend in any way on global state. Meaning, if
called with the same parameters, it expected to return the same value. It
should have been called 'pure', but gcc has a different 'pure' attribute
that imples something different :-(
That said, gcc should be smart enough to figure out that this function is
not doing anything complicated. Again, a test case would be much
appreciated.
Bhaskar
> Guys, read my email again.
>
> The bug is not that gcc can re-order or combine the accesses to "sp".
> WE WANT THAT TO HAPPEN.
>
> The bug is *outside* that "current_thread_info()" macro/inline
> function. It's the *dereference* of the pointer that gcc re-orders.
> AND THAT IS WRONG.
>
> Gcc seems to mess up the alias analysis, and decide that the
> deferences cannot alias. Which is wrong. They clearly *can* alias,
> exactly because the value of "sp & ~(THREAD_SIZE - 1)" ends up having
> the same value all the time.
>
>
Linus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20131121/7c74e8e2/attachment-0001.html>
next prev parent reply other threads:[~2013-11-21 23:03 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-11 2:18 [lttng-dev] might_sleep warnings in overwrite mode Nathan Lynch
2013-11-11 15:47 ` Nathan Lynch
2013-11-14 18:16 ` Nathan Lynch
2013-11-15 2:34 ` Mathieu Desnoyers
2013-11-18 19:30 ` Nathan Lynch
2013-11-19 15:29 ` [lttng-dev] current_thread_info() not respecting program order with gcc 4.8.x Mathieu Desnoyers
2013-11-19 15:57 ` Peter Zijlstra
2013-11-19 16:13 ` Jakub Jelinek
2013-11-19 16:21 ` Peter Zijlstra
2013-11-19 16:05 ` Will Deacon
2013-11-19 17:02 ` Mathieu Desnoyers
2013-11-19 17:33 ` Peter Zijlstra
2013-11-19 21:56 ` [lttng-dev] Multiple local register variables w/ same register Richard Henderson
2013-11-19 22:08 ` Jakub Jelinek
2013-11-19 22:13 ` Måns Rullgård
2013-11-19 22:25 ` Mathieu Desnoyers
2013-11-19 22:34 ` Mathieu Desnoyers
2013-11-20 0:41 ` [lttng-dev] current_thread_info() not respecting program order with gcc 4.8.x Linus Torvalds
2013-11-20 15:10 ` Mathieu Desnoyers
2013-11-21 16:02 ` Alexander Holler
2013-11-21 22:12 ` Luis Lozano
2013-11-21 22:32 ` Linus Torvalds
2013-11-21 23:03 ` Bhaskar Janakiraman [this message]
2013-11-21 23:18 ` Alexander Holler
2013-11-21 23:45 ` Luis Lozano
2013-11-22 0:39 ` Jakub Jelinek
2013-11-22 1:57 ` Mathieu Desnoyers
2013-11-22 2:36 ` Luis Lozano
2013-11-22 3:38 ` Mathieu Desnoyers
2013-11-22 8:16 ` Luis Lozano
2013-11-22 13:02 ` Mathieu Desnoyers
2013-11-22 8:18 ` Luis Lozano
2013-11-22 8:33 ` Luis Lozano
2013-11-22 13:06 ` Mathieu Desnoyers
2013-11-22 20:33 ` Mathieu Desnoyers
2013-11-22 0:17 ` Linus Torvalds
2013-11-22 0:34 ` Alexander Holler
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=CA+1cYqStNbLd0NZ1y7toWA+gS_6KsgFgFX0yqNit+SVm5oTcvQ@mail.gmail.com \
--to=bjanakiraman@chromium.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