lkml.org 
[lkml]   [2019]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.20 041/105] include/linux/compiler*.h: fix OPTIMIZER_HIDE_VAR
    Date
    From: "Michael S. Tsirkin" <mst@redhat.com>

    [ Upstream commit 3e2ffd655cc6a694608d997738989ff5572a8266 ]

    Since commit 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h
    mutually exclusive") clang no longer reuses the OPTIMIZER_HIDE_VAR macro
    from compiler-gcc - instead it gets the version in
    include/linux/compiler.h. Unfortunately that version doesn't actually
    prevent compiler from optimizing out the variable.

    Fix up by moving the macro out from compiler-gcc.h to compiler.h.
    Compilers without incline asm support will keep working
    since it's protected by an ifdef.

    Also fix up comments to match reality since we are no longer overriding
    any macros.

    Build-tested with gcc and clang.

    Fixes: 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive")
    Cc: Eli Friedman <efriedma@codeaurora.org>
    Cc: Joe Perches <joe@perches.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/linux/compiler-clang.h | 5 ++---
    include/linux/compiler-gcc.h | 4 ----
    include/linux/compiler-intel.h | 4 +---
    include/linux/compiler.h | 4 +++-
    4 files changed, 6 insertions(+), 11 deletions(-)

    diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
    index 3e7dafb3ea80..7ddaeb5182e3 100644
    --- a/include/linux/compiler-clang.h
    +++ b/include/linux/compiler-clang.h
    @@ -3,9 +3,8 @@
    #error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
    #endif

    -/* Some compiler specific definitions are overwritten here
    - * for Clang compiler
    - */
    +/* Compiler specific definitions for Clang compiler */
    +
    #define uninitialized_var(x) x = *(&(x))

    /* same as gcc, this was present in clang-2.6 so we can assume it works
    diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
    index 977ddf2774f9..c61c4bb2bd15 100644
    --- a/include/linux/compiler-gcc.h
    +++ b/include/linux/compiler-gcc.h
    @@ -58,10 +58,6 @@
    (typeof(ptr)) (__ptr + (off)); \
    })

    -/* Make the optimizer believe the variable can be manipulated arbitrarily. */
    -#define OPTIMIZER_HIDE_VAR(var) \
    - __asm__ ("" : "=r" (var) : "0" (var))
    -
    /*
    * A trick to suppress uninitialized variable warning without generating any
    * code
    diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h
    index 517bd14e1222..b17f3cd18334 100644
    --- a/include/linux/compiler-intel.h
    +++ b/include/linux/compiler-intel.h
    @@ -5,9 +5,7 @@

    #ifdef __ECC

    -/* Some compiler specific definitions are overwritten here
    - * for Intel ECC compiler
    - */
    +/* Compiler specific definitions for Intel ECC compiler */

    #include <asm/intrinsics.h>

    diff --git a/include/linux/compiler.h b/include/linux/compiler.h
    index fc5004a4b07d..445348facea9 100644
    --- a/include/linux/compiler.h
    +++ b/include/linux/compiler.h
    @@ -161,7 +161,9 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
    #endif

    #ifndef OPTIMIZER_HIDE_VAR
    -#define OPTIMIZER_HIDE_VAR(var) barrier()
    +/* Make the optimizer believe the variable can be manipulated arbitrarily. */
    +#define OPTIMIZER_HIDE_VAR(var) \
    + __asm__ ("" : "=r" (var) : "0" (var))
    #endif

    /* Not-quite-unique ID. */
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-02-13 04:04    [W:4.174 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site