chengshan / rpms / kernel

Forked from rpms/kernel 2 years ago
Clone
10d356
centos-3.10-i686-fix-pcid-bug17925.patch 
10d356
10d356
https://bugs.centos.org/view.php?id=17925
10d356
10d356
When booting a recent 32-bit i686 kernel on a multi-cpu system with 'pcid' cpu feature, only the boot cpu is correctly initialized. The other cpu's fail to initialize, resulting in a badly running or crashing kernel.
10d356
10d356
The reason is two missing patches present in vanilla upstream kernels:
10d356
x86/mm: Disable PCID on 32-bit kernels
10d356
x86/mm/32: Move setup_clear_cpu_cap(X86_FEATURE_PCID) earlier
10d356
10d356
Submitted-by: Jerome Borsboom
10d356
Applied-by: Akemi Yagi <toracat@centos.org>
10d356
10d356
--- a/arch/x86/kernel/cpu/common.c	2020-10-21 10:17:08.000000000 -0700
10d356
+++ b/arch/x86/kernel/cpu/common.c	2020-12-09 22:10:47.945329193 -0800
10d356
@@ -1131,6 +1131,14 @@ static void __init early_identify_cpu(st
10d356
 		this_cpu->c_bsp_init(c);
10d356
 
10d356
 	cpu_set_bug_bits(c);
10d356
+
10d356
+#ifdef CONFIG_X86_32
10d356
+	/*
10d356
+	* Regardless of whether PCID is enumerated, the SDM says
10d356
+	* that it can't be enabled in 32-bit mode.
10d356
+	*/
10d356
+	setup_clear_cpu_cap(X86_FEATURE_PCID);
10d356
+#endif
10d356
 }
10d356
 
10d356
 void __init early_cpu_init(void)