linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] jump_label: Fix anonymous union initialization
@ 2017-02-28 16:32 Boris Ostrovsky
  2017-03-02 21:07 ` Jason Baron
  0 siblings, 1 reply; 5+ messages in thread
From: Boris Ostrovsky @ 2017-02-28 16:32 UTC (permalink / raw)
  To: jbaron; +Cc: peterz, mingo, linux-kernel, Boris Ostrovsky

Pre-4.6 gcc do not allow direct static initialization of members of
anonymous structs/unions. After commit 3821fd35b58d ("jump_label:
Reduce the size of struct static_key") STATIC_KEY_INIT_{TRUE|FALSE}
definitions cannot be compiled with those older compilers.

Placing initializers inside curved brackets works around this problem.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
---
 include/linux/jump_label.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
index 8e06d75..518020b 100644
--- a/include/linux/jump_label.h
+++ b/include/linux/jump_label.h
@@ -166,10 +166,10 @@ extern void arch_jump_label_transform_static(struct jump_entry *entry,
  */
 #define STATIC_KEY_INIT_TRUE					\
 	{ .enabled = { 1 },					\
-	  .entries = (void *)JUMP_TYPE_TRUE }
+	  { .entries = (void *)JUMP_TYPE_TRUE } }
 #define STATIC_KEY_INIT_FALSE					\
 	{ .enabled = { 0 },					\
-	  .entries = (void *)JUMP_TYPE_FALSE }
+	  { .entries = (void *)JUMP_TYPE_FALSE } }
 
 #else  /* !HAVE_JUMP_LABEL */
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] jump_label: Fix anonymous union initialization
  2017-02-28 16:32 [PATCH] jump_label: Fix anonymous union initialization Boris Ostrovsky
@ 2017-03-02 21:07 ` Jason Baron
  2017-03-02 21:42   ` Steven Rostedt
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Baron @ 2017-03-02 21:07 UTC (permalink / raw)
  To: Boris Ostrovsky, Steven Rostedt; +Cc: peterz, mingo, linux-kernel

On 02/28/2017 11:32 AM, Boris Ostrovsky wrote:
> Pre-4.6 gcc do not allow direct static initialization of members of
> anonymous structs/unions. After commit 3821fd35b58d ("jump_label:
> Reduce the size of struct static_key") STATIC_KEY_INIT_{TRUE|FALSE}
> definitions cannot be compiled with those older compilers.
>
> Placing initializers inside curved brackets works around this problem.
>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> ---
>  include/linux/jump_label.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
> index 8e06d75..518020b 100644
> --- a/include/linux/jump_label.h
> +++ b/include/linux/jump_label.h
> @@ -166,10 +166,10 @@ extern void arch_jump_label_transform_static(struct jump_entry *entry,
>   */
>  #define STATIC_KEY_INIT_TRUE					\
>  	{ .enabled = { 1 },					\
> -	  .entries = (void *)JUMP_TYPE_TRUE }
> +	  { .entries = (void *)JUMP_TYPE_TRUE } }
>  #define STATIC_KEY_INIT_FALSE					\
>  	{ .enabled = { 0 },					\
> -	  .entries = (void *)JUMP_TYPE_FALSE }
> +	  { .entries = (void *)JUMP_TYPE_FALSE } }
>
>  #else  /* !HAVE_JUMP_LABEL */
>
>

(Adding Steve to 'cc)

Thanks for the fix.

Reviewed-by: Jason Baron <jbaron@akamai.com>

Thanks,

-Jason

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] jump_label: Fix anonymous union initialization
  2017-03-02 21:07 ` Jason Baron
@ 2017-03-02 21:42   ` Steven Rostedt
  2017-03-02 21:49     ` Chris Mason
  2017-03-02 21:56     ` Boris Ostrovsky
  0 siblings, 2 replies; 5+ messages in thread
From: Steven Rostedt @ 2017-03-02 21:42 UTC (permalink / raw)
  To: Jason Baron; +Cc: Boris Ostrovsky, peterz, mingo, linux-kernel, Chris Mason

On Thu, 2 Mar 2017 16:07:19 -0500
Jason Baron <jbaron@akamai.com> wrote:

> On 02/28/2017 11:32 AM, Boris Ostrovsky wrote:
> > Pre-4.6 gcc do not allow direct static initialization of members of
> > anonymous structs/unions. After commit 3821fd35b58d ("jump_label:
> > Reduce the size of struct static_key") STATIC_KEY_INIT_{TRUE|FALSE}
> > definitions cannot be compiled with those older compilers.
> >
> > Placing initializers inside curved brackets works around this problem.
> >
> > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> > ---
> >  include/linux/jump_label.h | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
> > index 8e06d75..518020b 100644
> > --- a/include/linux/jump_label.h
> > +++ b/include/linux/jump_label.h
> > @@ -166,10 +166,10 @@ extern void arch_jump_label_transform_static(struct jump_entry *entry,
> >   */
> >  #define STATIC_KEY_INIT_TRUE					\
> >  	{ .enabled = { 1 },					\
> > -	  .entries = (void *)JUMP_TYPE_TRUE }
> > +	  { .entries = (void *)JUMP_TYPE_TRUE } }
> >  #define STATIC_KEY_INIT_FALSE					\
> >  	{ .enabled = { 0 },					\
> > -	  .entries = (void *)JUMP_TYPE_FALSE }
> > +	  { .entries = (void *)JUMP_TYPE_FALSE } }
> >
> >  #else  /* !HAVE_JUMP_LABEL */
> >
> >  
> 
> (Adding Steve to 'cc)
> 
> Thanks for the fix.
> 
> Reviewed-by: Jason Baron <jbaron@akamai.com>

Funny, Chris pinged me on IRC telling me that jump labels broke with my
latest tree. And we discovered it was because of anonymous unions and
he was using an older compiler (4.4 or something). I didn't know how to
make it work, and we were just going to say "tough, jump labels are not
for 4.4". Although, didn't goto asm get added into 4.5? Did someone
backport it to the gcc 4.4 compilers? I believe 4.5 handles anonymous
unions.

Since the broken commit went through my tree, I'll take this patch.
I'm getting ready for another git pull request to Linus.

-- Steve

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] jump_label: Fix anonymous union initialization
  2017-03-02 21:42   ` Steven Rostedt
@ 2017-03-02 21:49     ` Chris Mason
  2017-03-02 21:56     ` Boris Ostrovsky
  1 sibling, 0 replies; 5+ messages in thread
From: Chris Mason @ 2017-03-02 21:49 UTC (permalink / raw)
  To: Steven Rostedt, Jason Baron; +Cc: Boris Ostrovsky, peterz, mingo, linux-kernel

On 03/02/2017 04:42 PM, Steven Rostedt wrote:
> On Thu, 2 Mar 2017 16:07:19 -0500
> Jason Baron <jbaron@akamai.com> wrote:
>
>> On 02/28/2017 11:32 AM, Boris Ostrovsky wrote:
>>> Pre-4.6 gcc do not allow direct static initialization of members of
>>> anonymous structs/unions. After commit 3821fd35b58d ("jump_label:
>>> Reduce the size of struct static_key") STATIC_KEY_INIT_{TRUE|FALSE}
>>> definitions cannot be compiled with those older compilers.
>>>
>>> Placing initializers inside curved brackets works around this problem.
>>>
>>> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
>>> ---
>>>  include/linux/jump_label.h | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
>>> index 8e06d75..518020b 100644
>>> --- a/include/linux/jump_label.h
>>> +++ b/include/linux/jump_label.h
>>> @@ -166,10 +166,10 @@ extern void arch_jump_label_transform_static(struct jump_entry *entry,
>>>   */
>>>  #define STATIC_KEY_INIT_TRUE					\
>>>  	{ .enabled = { 1 },					\
>>> -	  .entries = (void *)JUMP_TYPE_TRUE }
>>> +	  { .entries = (void *)JUMP_TYPE_TRUE } }
>>>  #define STATIC_KEY_INIT_FALSE					\
>>>  	{ .enabled = { 0 },					\
>>> -	  .entries = (void *)JUMP_TYPE_FALSE }
>>> +	  { .entries = (void *)JUMP_TYPE_FALSE } }
>>>
>>>  #else  /* !HAVE_JUMP_LABEL */
>>>
>>>
>>
>> (Adding Steve to 'cc)
>>
>> Thanks for the fix.
>>
>> Reviewed-by: Jason Baron <jbaron@akamai.com>
>
> Funny, Chris pinged me on IRC telling me that jump labels broke with my
> latest tree. And we discovered it was because of anonymous unions and
> he was using an older compiler (4.4 or something). I didn't know how to
> make it work, and we were just going to say "tough, jump labels are not
> for 4.4". Although, didn't goto asm get added into 4.5? Did someone
> backport it to the gcc 4.4 compilers? I believe 4.5 handles anonymous
> unions.
>
> Since the broken commit went through my tree, I'll take this patch.
> I'm getting ready for another git pull request to Linus.
>

Compiled-by: Chris Mason <clm@fb.com>

-chris

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] jump_label: Fix anonymous union initialization
  2017-03-02 21:42   ` Steven Rostedt
  2017-03-02 21:49     ` Chris Mason
@ 2017-03-02 21:56     ` Boris Ostrovsky
  1 sibling, 0 replies; 5+ messages in thread
From: Boris Ostrovsky @ 2017-03-02 21:56 UTC (permalink / raw)
  To: Steven Rostedt, Jason Baron; +Cc: peterz, mingo, linux-kernel, Chris Mason

On 03/02/2017 04:42 PM, Steven Rostedt wrote:
> On Thu, 2 Mar 2017 16:07:19 -0500
> Jason Baron <jbaron@akamai.com> wrote:
>
>> On 02/28/2017 11:32 AM, Boris Ostrovsky wrote:
>>> Pre-4.6 gcc do not allow direct static initialization of members of
>>> anonymous structs/unions. After commit 3821fd35b58d ("jump_label:
>>> Reduce the size of struct static_key") STATIC_KEY_INIT_{TRUE|FALSE}
>>> definitions cannot be compiled with those older compilers.
>>>
>>> Placing initializers inside curved brackets works around this problem.
>>>
>>> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
>>> ---
>>>  include/linux/jump_label.h | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
>>> index 8e06d75..518020b 100644
>>> --- a/include/linux/jump_label.h
>>> +++ b/include/linux/jump_label.h
>>> @@ -166,10 +166,10 @@ extern void arch_jump_label_transform_static(struct jump_entry *entry,
>>>   */
>>>  #define STATIC_KEY_INIT_TRUE					\
>>>  	{ .enabled = { 1 },					\
>>> -	  .entries = (void *)JUMP_TYPE_TRUE }
>>> +	  { .entries = (void *)JUMP_TYPE_TRUE } }
>>>  #define STATIC_KEY_INIT_FALSE					\
>>>  	{ .enabled = { 0 },					\
>>> -	  .entries = (void *)JUMP_TYPE_FALSE }
>>> +	  { .entries = (void *)JUMP_TYPE_FALSE } }
>>>
>>>  #else  /* !HAVE_JUMP_LABEL */
>>>
>>>  
>> (Adding Steve to 'cc)
>>
>> Thanks for the fix.
>>
>> Reviewed-by: Jason Baron <jbaron@akamai.com>
> Funny, Chris pinged me on IRC telling me that jump labels broke with my
> latest tree. And we discovered it was because of anonymous unions and
> he was using an older compiler (4.4 or something). I didn't know how to
> make it work, and we were just going to say "tough, jump labels are not
> for 4.4". Although, didn't goto asm get added into 4.5? Did someone
> backport it to the gcc 4.4 compilers? I believe 4.5 handles anonymous
> unions.

Per https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10676 this was fixed in
4.6. I don't know whether this was ever backported but my gcc 4.4.4 is
definitely not able to deal with those initializers.

As for the fix, it was , in fact, suggested to me by Linus at some point
in the past when a similar issue came up. The only thing here is that we
need to be careful about initialization order.

-boris

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-03-02 23:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-28 16:32 [PATCH] jump_label: Fix anonymous union initialization Boris Ostrovsky
2017-03-02 21:07 ` Jason Baron
2017-03-02 21:42   ` Steven Rostedt
2017-03-02 21:49     ` Chris Mason
2017-03-02 21:56     ` Boris Ostrovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).