]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/cpufeature: Make sure DISABLED/REQUIRED macros are updated
authorDave Hansen <dave.hansen@linux.intel.com>
Sat, 14 Jul 2018 09:28:49 +0000 (02:28 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Jul 2018 09:31:45 +0000 (11:31 +0200)
commit 1e61f78baf893c7eb49f633d23ccbb420c8f808e upstream

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 <dave.hansen@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave@sr71.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20160629200108.92466F6F@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Srivatsa S. Bhat <srivatsa@csail.mit.edu>
Reviewed-by: Matt Helsley (VMware) <matt.helsley@gmail.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
Reviewed-by: Bo Gan <ganb@vmware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/include/asm/cpufeature.h
arch/x86/include/asm/disabled-features.h
arch/x86/include/asm/required-features.h

index c7e38daae4f432605f73dc1dfb3280931133ed0f..3d5a6b563251c70ec5a329b6842d7c5c52a9f3ed 100644 (file)
@@ -67,7 +67,9 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
           (((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[NBUGINTS*32];
           (((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 :  \
index ab6b05ccb3f9f07c9d1638c72d9cb77a892475a6..21c5ac15657b25ba4598eea357671340332f1959 100644 (file)
@@ -59,5 +59,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 */
index fad4277d582e90014f7a8249e228c49b751689f6..fac9a5c0abe94b233b72b35bca8c7a665847b694 100644 (file)
 #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 */