lkml.org 
[lkml]   [2012]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
    On Tue, Jul 24, 2012 at 05:08:04PM -0400, John David Anglin wrote:
    > On 24-Jul-12, at 3:48 AM, Fengguang Wu wrote:
    >
    > >Here is the line in sock.i:
    > >
    > >struct static_key memalloc_socks = ((struct static_key) { .enabled
    > >= ((atomic_t) { (0) }) });
    >
    >
    > The above line contains two compound literals. It also uses a
    > designated initializer
    > to initialize the field enabled. A compound literal is not a
    > constant expression.
    >
    > The location of the above statement isn't fully clear, but if a
    > compound literal occurs
    > outside the body of a function, the initializer list must consist of
    > constant expressions.
    >
    > Removing "(atomic_t)" from the define results in a constant expression.
    >
    > Test case:
    >
    > typedef struct { long enabled; } atomic_t;
    > struct static_key { atomic_t enabled; int x; };
    > struct static_key memalloc_socks = ((struct static_key) { .enabled =
    > ((atomic_t) { (0) }) });
    >

    Thanks John for that explanation, it clears it up. The source of the
    above line was linux-next/master:net/core/sock.c due to some patches I
    merged. The exact line looks like this

    struct static_key memalloc_socks = STATIC_KEY_INIT_FALSE;

    and that thing in turns looks like

    #define STATIC_KEY_INIT_FALSE ((struct static_key) \
    { .enabled = ATOMIC_INIT(0), .entries = (void *)0 })

    This is a standard use of a static key (http://lwn.net/Articles/487426/)
    and as I expect there will be more use of this feature in the future
    it's good to get it fixed up first.

    Thanks James for picking this up and putting a changelog on it.

    --
    Mel Gorman
    SUSE Labs


    \
     
     \ /
      Last update: 2012-07-25 11:21    [W:0.024 / U:0.792 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site