All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@suse.de>
To: John David Anglin <dave.anglin@bell.net>
Cc: Fengguang Wu <fengguang.wu@intel.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	kernel-janitors@vger.kernel.org,
	Kyle McMartin <kyle@parisc-linux.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Parisc List <linux-parisc@vger.kernel.org>
Subject: Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
Date: Wed, 25 Jul 2012 08:27:32 +0000	[thread overview]
Message-ID: <20120725082732.GZ9222@suse.de> (raw)
In-Reply-To: <BLU0-SMTP6C7CFCFF734FE10A39B6E97DC0@phx.gbl>

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

WARNING: multiple messages have this Message-ID (diff)
From: Mel Gorman <mgorman@suse.de>
To: John David Anglin <dave.anglin@bell.net>
Cc: Fengguang Wu <fengguang.wu@intel.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	kernel-janitors@vger.kernel.org,
	Kyle McMartin <kyle@parisc-linux.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Parisc List <linux-parisc@vger.kernel.org>
Subject: Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
Date: Wed, 25 Jul 2012 09:27:32 +0100	[thread overview]
Message-ID: <20120725082732.GZ9222@suse.de> (raw)
In-Reply-To: <BLU0-SMTP6C7CFCFF734FE10A39B6E97DC0@phx.gbl>

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

  parent reply	other threads:[~2012-07-25  8:27 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-22 16:30 [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant Fengguang Wu
2012-07-22 16:30 ` Fengguang Wu
2012-07-23 11:16 ` Mel Gorman
2012-07-23 11:16   ` Mel Gorman
2012-07-23 11:20   ` James Bottomley
2012-07-23 11:20     ` James Bottomley
2012-07-23 11:42     ` Mel Gorman
2012-07-23 11:42       ` Mel Gorman
2012-07-23 12:29       ` Fengguang Wu
2012-07-23 12:29         ` Fengguang Wu
2012-07-23 15:13         ` John David Anglin
2012-07-23 15:13           ` John David Anglin
2012-07-24  7:48           ` Fengguang Wu
2012-07-24  7:48             ` Fengguang Wu
2012-07-24 21:08             ` John David Anglin
2012-07-24 21:08               ` John David Anglin
2012-07-25  5:10               ` James Bottomley
2012-07-25  5:10                 ` James Bottomley
2012-07-26 17:06                 ` Tony Luck
2012-07-26 17:06                   ` Tony Luck
2012-08-02 15:02                   ` Fengguang Wu
2012-08-02 15:02                     ` Fengguang Wu
2012-08-12  1:33                     ` Michael Cree
2012-08-12  1:33                       ` Michael Cree
2012-08-12  2:10                       ` Fengguang Wu
2012-08-12  2:10                         ` Fengguang Wu
2012-08-12  2:42                         ` Michael Cree
2012-08-12  2:42                           ` Michael Cree
2012-08-12 13:00                           ` John David Anglin
2012-08-12 13:00                             ` John David Anglin
2012-08-12  2:14                       ` [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts Fengguang Wu
2012-08-12  2:14                         ` Fengguang Wu
2012-08-15 22:03                         ` Andrew Morton
2012-08-15 22:03                           ` Andrew Morton
2012-07-25  8:27               ` Mel Gorman [this message]
2012-07-25  8:27                 ` [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant Mel Gorman

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=20120725082732.GZ9222@suse.de \
    --to=mgorman@suse.de \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=akpm@linux-foundation.org \
    --cc=dave.anglin@bell.net \
    --cc=fengguang.wu@intel.com \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=kyle@parisc-linux.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.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 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.