From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752007AbdCBXDh convert rfc822-to-8bit (ORCPT ); Thu, 2 Mar 2017 18:03:37 -0500 Received: from aserp1050.oracle.com ([141.146.126.70]:51924 "EHLO aserp1050.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751076AbdCBXDf (ORCPT ); Thu, 2 Mar 2017 18:03:35 -0500 Subject: Re: [PATCH] jump_label: Fix anonymous union initialization To: Steven Rostedt , Jason Baron References: <1488299542-30765-1-git-send-email-boris.ostrovsky@oracle.com> <1eba35cd-2b1f-64e5-0fe1-9756316b37b7@akamai.com> <20170302164200.143b10ff@gandalf.local.home> Cc: peterz@infradead.org, mingo@kernel.org, linux-kernel@vger.kernel.org, Chris Mason From: Boris Ostrovsky Message-ID: <37023a49-8c13-ba4a-d44c-66c202016cd8@oracle.com> Date: Thu, 2 Mar 2017 16:56:55 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <20170302164200.143b10ff@gandalf.local.home> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8BIT X-Source-IP: aserp1040.oracle.com [141.146.126.69] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/02/2017 04:42 PM, Steven Rostedt wrote: > On Thu, 2 Mar 2017 16:07:19 -0500 > Jason Baron 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 >>> --- >>> 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 > 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