From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751965AbcF2UBL (ORCPT ); Wed, 29 Jun 2016 16:01:11 -0400 Received: from mga04.intel.com ([192.55.52.120]:30403 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751895AbcF2UBJ (ORCPT ); Wed, 29 Jun 2016 16:01:09 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,548,1459839600"; d="scan'208";a="726995519" Subject: [PATCH 2/3] x86, cpufeatures: make sure DISABLED/REQUIRED macros are updated To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, Dave Hansen , dave.hansen@linux.intel.com From: Dave Hansen Date: Wed, 29 Jun 2016 13:01:08 -0700 References: <20160629200107.8D3C9A31@viggo.jf.intel.com> In-Reply-To: <20160629200107.8D3C9A31@viggo.jf.intel.com> Message-Id: <20160629200108.92466F6F@viggo.jf.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Hansen x86 has two macros which allow us to evaluate some CPUID-based features at compile time: REQUIRED_MASK_BIT_SET() DISABLED_MASK_BIT_SET() They're both defined by having the compiler check the bit argument against some constant masks of features. But, when adding new CPUID leaves, we need to check new words for these macros. So make sure that those macros and the REQUIRED_MASK* and DISABLED_MASK* get updated when necessary. This looks kinda silly to have an open-coded value ("18" in this case) open-coded in 5 places in the code. But, we really do need 5 places updated when NCAPINTS gets bumped, so now we just force the issue. Signed-off-by: Dave Hansen --- b/arch/x86/include/asm/cpufeature.h | 8 ++++++-- b/arch/x86/include/asm/disabled-features.h | 1 + b/arch/x86/include/asm/required-features.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff -puN arch/x86/include/asm/cpufeature.h~x86-make-sure-macros-are-updated arch/x86/include/asm/cpufeature.h --- a/arch/x86/include/asm/cpufeature.h~x86-make-sure-macros-are-updated 2016-06-29 12:59:58.212523211 -0700 +++ b/arch/x86/include/asm/cpufeature.h 2016-06-29 12:59:58.219523528 -0700 @@ -67,7 +67,9 @@ extern const char * const x86_bug_flags[ (((bit)>>5)==14 && (1UL<<((bit)&31) & REQUIRED_MASK14)) || \ (((bit)>>5)==15 && (1UL<<((bit)&31) & REQUIRED_MASK15)) || \ (((bit)>>5)==16 && (1UL<<((bit)&31) & REQUIRED_MASK16)) || \ - (((bit)>>5)==17 && (1UL<<((bit)&31) & REQUIRED_MASK17))) + (((bit)>>5)==17 && (1UL<<((bit)&31) & REQUIRED_MASK17)) || \ + REQUIRED_MASK_CHECK || \ + BUILD_BUG_ON_ZERO(NCAPINTS != 18)) #define DISABLED_MASK_BIT_SET(bit) \ ( (((bit)>>5)==0 && (1UL<<((bit)&31) & DISABLED_MASK0 )) || \ @@ -87,7 +89,9 @@ extern const char * const x86_bug_flags[ (((bit)>>5)==14 && (1UL<<((bit)&31) & DISABLED_MASK14)) || \ (((bit)>>5)==15 && (1UL<<((bit)&31) & DISABLED_MASK15)) || \ (((bit)>>5)==16 && (1UL<<((bit)&31) & DISABLED_MASK16)) || \ - (((bit)>>5)==17 && (1UL<<((bit)&31) & DISABLED_MASK17))) + (((bit)>>5)==17 && (1UL<<((bit)&31) & DISABLED_MASK17)) || \ + DISABLED_MASK_CHECK || \ + BUILD_BUG_ON_ZERO(NCAPINTS != 18)) #define cpu_has(c, bit) \ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \ diff -puN arch/x86/include/asm/disabled-features.h~x86-make-sure-macros-are-updated arch/x86/include/asm/disabled-features.h --- a/arch/x86/include/asm/disabled-features.h~x86-make-sure-macros-are-updated 2016-06-29 12:59:58.214523302 -0700 +++ b/arch/x86/include/asm/disabled-features.h 2016-06-29 12:59:58.219523528 -0700 @@ -57,5 +57,6 @@ #define DISABLED_MASK15 0 #define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE) #define DISABLED_MASK17 0 +#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) #endif /* _ASM_X86_DISABLED_FEATURES_H */ diff -puN arch/x86/include/asm/required-features.h~x86-make-sure-macros-are-updated arch/x86/include/asm/required-features.h --- a/arch/x86/include/asm/required-features.h~x86-make-sure-macros-are-updated 2016-06-29 12:59:58.215523347 -0700 +++ b/arch/x86/include/asm/required-features.h 2016-06-29 12:59:58.219523528 -0700 @@ -100,5 +100,6 @@ #define REQUIRED_MASK15 0 #define REQUIRED_MASK16 0 #define REQUIRED_MASK17 0 +#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) #endif /* _ASM_X86_REQUIRED_FEATURES_H */ _