Skip to content

Commit cba4671

Browse files
amlutoIngo Molnar
authored andcommitted
x86/mm: Disable PCID on 32-bit kernels
32-bit kernels on new hardware will see PCID in CPUID, but PCID can only be used in 64-bit mode. Rather than making all PCID code conditional, just disable the feature on 32-bit builds. Signed-off-by: Andy Lutomirski <[email protected]> Reviewed-by: Nadav Amit <[email protected]> Reviewed-by: Borislav Petkov <[email protected]> Reviewed-by: Thomas Gleixner <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Arjan van de Ven <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Mel Gorman <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Rik van Riel <[email protected]> Cc: [email protected] Link: http://lkml.kernel.org/r/2e391769192a4d31b808410c383c6bf0734bc6ea.1498751203.git.luto@kernel.org Signed-off-by: Ingo Molnar <[email protected]>
1 parent 43858b4 commit cba4671

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

arch/x86/include/asm/disabled-features.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
# define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))
2222
# define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))
2323
# define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31))
24+
# define DISABLE_PCID 0
2425
#else
2526
# define DISABLE_VME 0
2627
# define DISABLE_K6_MTRR 0
2728
# define DISABLE_CYRIX_ARR 0
2829
# define DISABLE_CENTAUR_MCR 0
30+
# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))
2931
#endif /* CONFIG_X86_64 */
3032

3133
#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
@@ -49,7 +51,7 @@
4951
#define DISABLED_MASK1 0
5052
#define DISABLED_MASK2 0
5153
#define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
52-
#define DISABLED_MASK4 0
54+
#define DISABLED_MASK4 (DISABLE_PCID)
5355
#define DISABLED_MASK5 0
5456
#define DISABLED_MASK6 0
5557
#define DISABLED_MASK7 0

arch/x86/kernel/cpu/bugs.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@
2121

2222
void __init check_bugs(void)
2323
{
24+
#ifdef CONFIG_X86_32
25+
/*
26+
* Regardless of whether PCID is enumerated, the SDM says
27+
* that it can't be enabled in 32-bit mode.
28+
*/
29+
setup_clear_cpu_cap(X86_FEATURE_PCID);
30+
#endif
31+
2432
identify_boot_cpu();
2533

2634
if (!IS_ENABLED(CONFIG_SMP)) {

0 commit comments

Comments
 (0)