lkml.org 
[lkml]   [2020]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH -tip v3 09/11] data_race: Avoid nested statement expression
    On Tue, May 26, 2020 at 07:33:12PM +0200, Marco Elver wrote:
    > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
    > index 5faf68eae204..a529fa263906 100644
    > --- a/include/linux/compiler_types.h
    > +++ b/include/linux/compiler_types.h
    > @@ -245,7 +245,9 @@ struct ftrace_likely_data {
    > /*
    > * __unqual_scalar_typeof(x) - Declare an unqualified scalar type, leaving
    > * non-scalar types unchanged.
    > - *
    > + */
    > +#if defined(CONFIG_CC_IS_GCC) && CONFIG_GCC_VERSION < 40900
    > +/*
    > * We build this out of a couple of helper macros in a vain attempt to
    > * help you keep your lunch down while reading it.
    > */
    > @@ -267,6 +269,24 @@ struct ftrace_likely_data {
    > __pick_integer_type(x, int, \
    > __pick_integer_type(x, long, \
    > __pick_integer_type(x, long long, x))))))
    > +#else
    > +/*
    > + * If supported, prefer C11 _Generic for better compile-times. As above, 'char'
    > + * is not type-compatible with 'signed char', and we define a separate case.
    > + */
    > +#define __scalar_type_to_expr_cases(type) \
    > + type: (type)0, unsigned type: (unsigned type)0
    > +
    > +#define __unqual_scalar_typeof(x) typeof( \
    > + _Generic((x), \
    > + __scalar_type_to_expr_cases(char), \
    > + signed char: (signed char)0, \
    > + __scalar_type_to_expr_cases(short), \
    > + __scalar_type_to_expr_cases(int), \
    > + __scalar_type_to_expr_cases(long), \
    > + __scalar_type_to_expr_cases(long long), \
    > + default: (x)))
    > +#endif
    >
    > /* Is this type a native word size -- useful for atomic operations */
    > #define __native_word(t) \
    >

    Yeah, this shaves around 5% off of my kernel builds. The _Atomic hack is
    every so slightly faster on GCC but apparently doesn't work on clang --
    also, it's disguisting :-)

    Ack!

    \
     
     \ /
      Last update: 2020-05-26 23:37    [W:4.267 / U:0.984 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site