All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Linus Torvalds <torvalds@linux-foundation.org>,
	Nikolay Borisov <nik.borisov@suse.com>,
	"Ahmed S. Darwish" <darwi@linutronix.de>,
	Arnd Bergmann <arnd@arndb.de>,
	Russell King <linux@armlinux.org.uk>,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	Huacai Chen <chenhuacai@kernel.org>,
	WANG Xuerui <kernel@xen0n.name>,
	loongarch@lists.linux.dev,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-m68k@lists.linux-m68k.org,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-mips@vger.kernel.org,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Rich Felker <dalias@libc.org>,
	John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
	linux-sh@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	sparclinux@vger.kernel.org, Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	linux-um@lists.infradead.org,
	Richard Henderson <richard.henderson@linaro.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Chris Zankel <chris@zankel.net>,
	Tom Lendacky <thomas.lendacky@amd.com>
Subject: [patch 02/17] x86/cpu: Switch to arch_cpu_finalize_init()
Date: Wed, 14 Jun 2023 01:39:24 +0200 (CEST)	[thread overview]
Message-ID: <20230613224545.019583869@linutronix.de> (raw)
In-Reply-To: 20230613223827.532680283@linutronix.de

check_bugs() is a dump ground for finalizing the CPU bringup. Only parts of
it has to do with actual CPU bugs.

Split it apart into arch_cpu_finalize_init() and cpu_select_mitigations().

Fixup the bogus 32bit comments while at it.

No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/Kconfig             |    1 
 arch/x86/include/asm/bugs.h  |    2 -
 arch/x86/kernel/cpu/bugs.c   |   51 -----------------------------------------
 arch/x86/kernel/cpu/common.c |   53 +++++++++++++++++++++++++++++++++++++++++++
 arch/x86/kernel/cpu/cpu.h    |    1 
 5 files changed, 56 insertions(+), 52 deletions(-)

--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -71,6 +71,7 @@ config X86
 	select ARCH_HAS_ACPI_TABLE_UPGRADE	if ACPI
 	select ARCH_HAS_CACHE_LINE_SIZE
 	select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
+	select ARCH_HAS_CPU_FINALIZE_INIT
 	select ARCH_HAS_CURRENT_STACK_POINTER
 	select ARCH_HAS_DEBUG_VIRTUAL
 	select ARCH_HAS_DEBUG_VM_PGTABLE	if !X86_PAE
--- a/arch/x86/include/asm/bugs.h
+++ b/arch/x86/include/asm/bugs.h
@@ -4,8 +4,6 @@
 
 #include <asm/processor.h>
 
-extern void check_bugs(void);
-
 #if defined(CONFIG_CPU_SUP_INTEL) && defined(CONFIG_X86_32)
 int ppro_with_ram_bug(void);
 #else
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -9,7 +9,6 @@
  *	- Andrew D. Balsa (code cleanup).
  */
 #include <linux/init.h>
-#include <linux/utsname.h>
 #include <linux/cpu.h>
 #include <linux/module.h>
 #include <linux/nospec.h>
@@ -27,8 +26,6 @@
 #include <asm/msr.h>
 #include <asm/vmx.h>
 #include <asm/paravirt.h>
-#include <asm/alternative.h>
-#include <asm/set_memory.h>
 #include <asm/intel-family.h>
 #include <asm/e820/api.h>
 #include <asm/hypervisor.h>
@@ -125,21 +122,8 @@ DEFINE_STATIC_KEY_FALSE(switch_mm_cond_l
 DEFINE_STATIC_KEY_FALSE(mmio_stale_data_clear);
 EXPORT_SYMBOL_GPL(mmio_stale_data_clear);
 
-void __init check_bugs(void)
+void __init cpu_select_mitigations(void)
 {
-	identify_boot_cpu();
-
-	/*
-	 * identify_boot_cpu() initialized SMT support information, let the
-	 * core code know.
-	 */
-	cpu_smt_check_topology();
-
-	if (!IS_ENABLED(CONFIG_SMP)) {
-		pr_info("CPU: ");
-		print_cpu_info(&boot_cpu_data);
-	}
-
 	/*
 	 * Read the SPEC_CTRL MSR to account for reserved bits which may
 	 * have unknown values. AMD64_LS_CFG MSR is cached in the early AMD
@@ -176,39 +160,6 @@ void __init check_bugs(void)
 	md_clear_select_mitigation();
 	srbds_select_mitigation();
 	l1d_flush_select_mitigation();
-
-	arch_smt_update();
-
-#ifdef CONFIG_X86_32
-	/*
-	 * Check whether we are able to run this kernel safely on SMP.
-	 *
-	 * - i386 is no longer supported.
-	 * - In order to run on anything without a TSC, we need to be
-	 *   compiled for a i486.
-	 */
-	if (boot_cpu_data.x86 < 4)
-		panic("Kernel requires i486+ for 'invlpg' and other features");
-
-	init_utsname()->machine[1] =
-		'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
-	alternative_instructions();
-
-	fpu__init_check_bugs();
-#else /* CONFIG_X86_64 */
-	alternative_instructions();
-
-	/*
-	 * Make sure the first 2MB area is not mapped by huge pages
-	 * There are typically fixed size MTRRs in there and overlapping
-	 * MTRRs into large pages causes slow downs.
-	 *
-	 * Right now we don't do that with gbpages because there seems
-	 * very little benefit for that case.
-	 */
-	if (!direct_gbpages)
-		set_memory_4k((unsigned long)__va(0), 1);
-#endif
 }
 
 /*
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -19,11 +19,14 @@
 #include <linux/kprobes.h>
 #include <linux/kgdb.h>
 #include <linux/smp.h>
+#include <linux/cpu.h>
 #include <linux/io.h>
 #include <linux/syscore_ops.h>
 #include <linux/pgtable.h>
 #include <linux/stackprotector.h>
+#include <linux/utsname.h>
 
+#include <asm/alternative.h>
 #include <asm/cmdline.h>
 #include <asm/perf_event.h>
 #include <asm/mmu_context.h>
@@ -59,6 +62,7 @@
 #include <asm/intel-family.h>
 #include <asm/cpu_device_id.h>
 #include <asm/uv/uv.h>
+#include <asm/set_memory.h>
 #include <asm/sigframe.h>
 #include <asm/traps.h>
 #include <asm/sev.h>
@@ -2362,3 +2366,52 @@ void arch_smt_update(void)
 	/* Check whether IPI broadcasting can be enabled */
 	apic_smt_update();
 }
+
+void __init arch_cpu_finalize_init(void)
+{
+	identify_boot_cpu();
+
+	/*
+	 * identify_boot_cpu() initialized SMT support information, let the
+	 * core code know.
+	 */
+	cpu_smt_check_topology();
+
+	if (!IS_ENABLED(CONFIG_SMP)) {
+		pr_info("CPU: ");
+		print_cpu_info(&boot_cpu_data);
+	}
+
+	arch_smt_update();
+
+	cpu_select_mitigations();
+
+	if (IS_ENABLED(CONFIG_X86_32)) {
+		/*
+		 * Check whether this is a real i386 which is not longer
+		 * supported and fixup the utsname.
+		 */
+		if (boot_cpu_data.x86 < 4)
+			panic("Kernel requires i486+ for 'invlpg' and other features");
+
+		init_utsname()->machine[1] =
+			'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
+	}
+
+	alternative_instructions();
+
+	if (IS_ENABLED(CONFIG_X86_64)) {
+		/*
+		 * Make sure the first 2MB area is not mapped by huge pages
+		 * There are typically fixed size MTRRs in there and overlapping
+		 * MTRRs into large pages causes slow downs.
+		 *
+		 * Right now we don't do that with gbpages because there seems
+		 * very little benefit for that case.
+		 */
+		if (!direct_gbpages)
+			set_memory_4k((unsigned long)__va(0), 1);
+	} else {
+		fpu__init_check_bugs();
+	}
+}
--- a/arch/x86/kernel/cpu/cpu.h
+++ b/arch/x86/kernel/cpu/cpu.h
@@ -79,6 +79,7 @@ extern void detect_ht(struct cpuinfo_x86
 extern void check_null_seg_clears_base(struct cpuinfo_x86 *c);
 
 unsigned int aperfmperf_get_khz(int cpu);
+void cpu_select_mitigations(void);
 
 extern void x86_spec_ctrl_setup_ap(void);
 extern void update_srbds_msr(void);


WARNING: multiple messages have this Message-ID (diff)
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Linus Torvalds <torvalds@linux-foundation.org>,
	Nikolay Borisov <nik.borisov@suse.com>,
	"Ahmed S. Darwish" <darwi@linutronix.de>,
	Arnd Bergmann <arnd@arndb.de>,
	Russell King <linux@armlinux.org.uk>,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	Huacai Chen <chenhuacai@kernel.org>,
	WANG Xuerui <kernel@xen0n.name>,
	loongarch@lists.linux.dev,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-m68k@lists.linux-m68k.org,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-mips@vger.kernel.org,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Rich Felker <dalias@libc.org>,
	John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
	linux-sh@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	sparclinux@vger.kernel.org, Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	linux-um@lists.infradead.org,
	Richard Henderson <richard.henderson@linaro.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Chris Zankel <chris@zankel.net>,
	Tom Lendacky <thomas.lendacky@amd.com>
Subject: [patch 02/17] x86/cpu: Switch to arch_cpu_finalize_init()
Date: Wed, 14 Jun 2023 01:39:24 +0200 (CEST)	[thread overview]
Message-ID: <20230613224545.019583869@linutronix.de> (raw)
In-Reply-To: 20230613223827.532680283@linutronix.de

check_bugs() is a dump ground for finalizing the CPU bringup. Only parts of
it has to do with actual CPU bugs.

Split it apart into arch_cpu_finalize_init() and cpu_select_mitigations().

Fixup the bogus 32bit comments while at it.

No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/Kconfig             |    1 
 arch/x86/include/asm/bugs.h  |    2 -
 arch/x86/kernel/cpu/bugs.c   |   51 -----------------------------------------
 arch/x86/kernel/cpu/common.c |   53 +++++++++++++++++++++++++++++++++++++++++++
 arch/x86/kernel/cpu/cpu.h    |    1 
 5 files changed, 56 insertions(+), 52 deletions(-)

--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -71,6 +71,7 @@ config X86
 	select ARCH_HAS_ACPI_TABLE_UPGRADE	if ACPI
 	select ARCH_HAS_CACHE_LINE_SIZE
 	select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
+	select ARCH_HAS_CPU_FINALIZE_INIT
 	select ARCH_HAS_CURRENT_STACK_POINTER
 	select ARCH_HAS_DEBUG_VIRTUAL
 	select ARCH_HAS_DEBUG_VM_PGTABLE	if !X86_PAE
--- a/arch/x86/include/asm/bugs.h
+++ b/arch/x86/include/asm/bugs.h
@@ -4,8 +4,6 @@
 
 #include <asm/processor.h>
 
-extern void check_bugs(void);
-
 #if defined(CONFIG_CPU_SUP_INTEL) && defined(CONFIG_X86_32)
 int ppro_with_ram_bug(void);
 #else
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -9,7 +9,6 @@
  *	- Andrew D. Balsa (code cleanup).
  */
 #include <linux/init.h>
-#include <linux/utsname.h>
 #include <linux/cpu.h>
 #include <linux/module.h>
 #include <linux/nospec.h>
@@ -27,8 +26,6 @@
 #include <asm/msr.h>
 #include <asm/vmx.h>
 #include <asm/paravirt.h>
-#include <asm/alternative.h>
-#include <asm/set_memory.h>
 #include <asm/intel-family.h>
 #include <asm/e820/api.h>
 #include <asm/hypervisor.h>
@@ -125,21 +122,8 @@ DEFINE_STATIC_KEY_FALSE(switch_mm_cond_l
 DEFINE_STATIC_KEY_FALSE(mmio_stale_data_clear);
 EXPORT_SYMBOL_GPL(mmio_stale_data_clear);
 
-void __init check_bugs(void)
+void __init cpu_select_mitigations(void)
 {
-	identify_boot_cpu();
-
-	/*
-	 * identify_boot_cpu() initialized SMT support information, let the
-	 * core code know.
-	 */
-	cpu_smt_check_topology();
-
-	if (!IS_ENABLED(CONFIG_SMP)) {
-		pr_info("CPU: ");
-		print_cpu_info(&boot_cpu_data);
-	}
-
 	/*
 	 * Read the SPEC_CTRL MSR to account for reserved bits which may
 	 * have unknown values. AMD64_LS_CFG MSR is cached in the early AMD
@@ -176,39 +160,6 @@ void __init check_bugs(void)
 	md_clear_select_mitigation();
 	srbds_select_mitigation();
 	l1d_flush_select_mitigation();
-
-	arch_smt_update();
-
-#ifdef CONFIG_X86_32
-	/*
-	 * Check whether we are able to run this kernel safely on SMP.
-	 *
-	 * - i386 is no longer supported.
-	 * - In order to run on anything without a TSC, we need to be
-	 *   compiled for a i486.
-	 */
-	if (boot_cpu_data.x86 < 4)
-		panic("Kernel requires i486+ for 'invlpg' and other features");
-
-	init_utsname()->machine[1] =
-		'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
-	alternative_instructions();
-
-	fpu__init_check_bugs();
-#else /* CONFIG_X86_64 */
-	alternative_instructions();
-
-	/*
-	 * Make sure the first 2MB area is not mapped by huge pages
-	 * There are typically fixed size MTRRs in there and overlapping
-	 * MTRRs into large pages causes slow downs.
-	 *
-	 * Right now we don't do that with gbpages because there seems
-	 * very little benefit for that case.
-	 */
-	if (!direct_gbpages)
-		set_memory_4k((unsigned long)__va(0), 1);
-#endif
 }
 
 /*
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -19,11 +19,14 @@
 #include <linux/kprobes.h>
 #include <linux/kgdb.h>
 #include <linux/smp.h>
+#include <linux/cpu.h>
 #include <linux/io.h>
 #include <linux/syscore_ops.h>
 #include <linux/pgtable.h>
 #include <linux/stackprotector.h>
+#include <linux/utsname.h>
 
+#include <asm/alternative.h>
 #include <asm/cmdline.h>
 #include <asm/perf_event.h>
 #include <asm/mmu_context.h>
@@ -59,6 +62,7 @@
 #include <asm/intel-family.h>
 #include <asm/cpu_device_id.h>
 #include <asm/uv/uv.h>
+#include <asm/set_memory.h>
 #include <asm/sigframe.h>
 #include <asm/traps.h>
 #include <asm/sev.h>
@@ -2362,3 +2366,52 @@ void arch_smt_update(void)
 	/* Check whether IPI broadcasting can be enabled */
 	apic_smt_update();
 }
+
+void __init arch_cpu_finalize_init(void)
+{
+	identify_boot_cpu();
+
+	/*
+	 * identify_boot_cpu() initialized SMT support information, let the
+	 * core code know.
+	 */
+	cpu_smt_check_topology();
+
+	if (!IS_ENABLED(CONFIG_SMP)) {
+		pr_info("CPU: ");
+		print_cpu_info(&boot_cpu_data);
+	}
+
+	arch_smt_update();
+
+	cpu_select_mitigations();
+
+	if (IS_ENABLED(CONFIG_X86_32)) {
+		/*
+		 * Check whether this is a real i386 which is not longer
+		 * supported and fixup the utsname.
+		 */
+		if (boot_cpu_data.x86 < 4)
+			panic("Kernel requires i486+ for 'invlpg' and other features");
+
+		init_utsname()->machine[1] =
+			'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
+	}
+
+	alternative_instructions();
+
+	if (IS_ENABLED(CONFIG_X86_64)) {
+		/*
+		 * Make sure the first 2MB area is not mapped by huge pages
+		 * There are typically fixed size MTRRs in there and overlapping
+		 * MTRRs into large pages causes slow downs.
+		 *
+		 * Right now we don't do that with gbpages because there seems
+		 * very little benefit for that case.
+		 */
+		if (!direct_gbpages)
+			set_memory_4k((unsigned long)__va(0), 1);
+	} else {
+		fpu__init_check_bugs();
+	}
+}
--- a/arch/x86/kernel/cpu/cpu.h
+++ b/arch/x86/kernel/cpu/cpu.h
@@ -79,6 +79,7 @@ extern void detect_ht(struct cpuinfo_x86
 extern void check_null_seg_clears_base(struct cpuinfo_x86 *c);
 
 unsigned int aperfmperf_get_khz(int cpu);
+void cpu_select_mitigations(void);
 
 extern void x86_spec_ctrl_setup_ap(void);
 extern void update_srbds_msr(void);


_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um

WARNING: multiple messages have this Message-ID (diff)
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Linus Torvalds <torvalds@linux-foundation.org>,
	Nikolay Borisov <nik.borisov@suse.com>,
	"Ahmed S. Darwish" <darwi@linutronix.de>,
	Arnd Bergmann <arnd@arndb.de>,
	Russell King <linux@armlinux.org.uk>,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	Huacai Chen <chenhuacai@kernel.org>,
	WANG Xuerui <kernel@xen0n.name>,
	loongarch@lists.linux.dev,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-m68k@lists.linux-m68k.org,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-mips@vger.kernel.org,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Rich Felker <dalias@libc.org>,
	John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
	linux-sh@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	sparclinux@vger.kernel.org, Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	linux-um@lists.infradead.org,
	Richard Henderson <richard.henderson@linaro.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Chris Zankel <chris@zankel.net>,
	Tom Lendacky <thomas.lendacky@amd.com>
Subject: [patch 02/17] x86/cpu: Switch to arch_cpu_finalize_init()
Date: Wed, 14 Jun 2023 01:39:24 +0200 (CEST)	[thread overview]
Message-ID: <20230613224545.019583869@linutronix.de> (raw)
In-Reply-To: 20230613223827.532680283@linutronix.de

check_bugs() is a dump ground for finalizing the CPU bringup. Only parts of
it has to do with actual CPU bugs.

Split it apart into arch_cpu_finalize_init() and cpu_select_mitigations().

Fixup the bogus 32bit comments while at it.

No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/Kconfig             |    1 
 arch/x86/include/asm/bugs.h  |    2 -
 arch/x86/kernel/cpu/bugs.c   |   51 -----------------------------------------
 arch/x86/kernel/cpu/common.c |   53 +++++++++++++++++++++++++++++++++++++++++++
 arch/x86/kernel/cpu/cpu.h    |    1 
 5 files changed, 56 insertions(+), 52 deletions(-)

--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -71,6 +71,7 @@ config X86
 	select ARCH_HAS_ACPI_TABLE_UPGRADE	if ACPI
 	select ARCH_HAS_CACHE_LINE_SIZE
 	select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
+	select ARCH_HAS_CPU_FINALIZE_INIT
 	select ARCH_HAS_CURRENT_STACK_POINTER
 	select ARCH_HAS_DEBUG_VIRTUAL
 	select ARCH_HAS_DEBUG_VM_PGTABLE	if !X86_PAE
--- a/arch/x86/include/asm/bugs.h
+++ b/arch/x86/include/asm/bugs.h
@@ -4,8 +4,6 @@
 
 #include <asm/processor.h>
 
-extern void check_bugs(void);
-
 #if defined(CONFIG_CPU_SUP_INTEL) && defined(CONFIG_X86_32)
 int ppro_with_ram_bug(void);
 #else
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -9,7 +9,6 @@
  *	- Andrew D. Balsa (code cleanup).
  */
 #include <linux/init.h>
-#include <linux/utsname.h>
 #include <linux/cpu.h>
 #include <linux/module.h>
 #include <linux/nospec.h>
@@ -27,8 +26,6 @@
 #include <asm/msr.h>
 #include <asm/vmx.h>
 #include <asm/paravirt.h>
-#include <asm/alternative.h>
-#include <asm/set_memory.h>
 #include <asm/intel-family.h>
 #include <asm/e820/api.h>
 #include <asm/hypervisor.h>
@@ -125,21 +122,8 @@ DEFINE_STATIC_KEY_FALSE(switch_mm_cond_l
 DEFINE_STATIC_KEY_FALSE(mmio_stale_data_clear);
 EXPORT_SYMBOL_GPL(mmio_stale_data_clear);
 
-void __init check_bugs(void)
+void __init cpu_select_mitigations(void)
 {
-	identify_boot_cpu();
-
-	/*
-	 * identify_boot_cpu() initialized SMT support information, let the
-	 * core code know.
-	 */
-	cpu_smt_check_topology();
-
-	if (!IS_ENABLED(CONFIG_SMP)) {
-		pr_info("CPU: ");
-		print_cpu_info(&boot_cpu_data);
-	}
-
 	/*
 	 * Read the SPEC_CTRL MSR to account for reserved bits which may
 	 * have unknown values. AMD64_LS_CFG MSR is cached in the early AMD
@@ -176,39 +160,6 @@ void __init check_bugs(void)
 	md_clear_select_mitigation();
 	srbds_select_mitigation();
 	l1d_flush_select_mitigation();
-
-	arch_smt_update();
-
-#ifdef CONFIG_X86_32
-	/*
-	 * Check whether we are able to run this kernel safely on SMP.
-	 *
-	 * - i386 is no longer supported.
-	 * - In order to run on anything without a TSC, we need to be
-	 *   compiled for a i486.
-	 */
-	if (boot_cpu_data.x86 < 4)
-		panic("Kernel requires i486+ for 'invlpg' and other features");
-
-	init_utsname()->machine[1] =
-		'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
-	alternative_instructions();
-
-	fpu__init_check_bugs();
-#else /* CONFIG_X86_64 */
-	alternative_instructions();
-
-	/*
-	 * Make sure the first 2MB area is not mapped by huge pages
-	 * There are typically fixed size MTRRs in there and overlapping
-	 * MTRRs into large pages causes slow downs.
-	 *
-	 * Right now we don't do that with gbpages because there seems
-	 * very little benefit for that case.
-	 */
-	if (!direct_gbpages)
-		set_memory_4k((unsigned long)__va(0), 1);
-#endif
 }
 
 /*
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -19,11 +19,14 @@
 #include <linux/kprobes.h>
 #include <linux/kgdb.h>
 #include <linux/smp.h>
+#include <linux/cpu.h>
 #include <linux/io.h>
 #include <linux/syscore_ops.h>
 #include <linux/pgtable.h>
 #include <linux/stackprotector.h>
+#include <linux/utsname.h>
 
+#include <asm/alternative.h>
 #include <asm/cmdline.h>
 #include <asm/perf_event.h>
 #include <asm/mmu_context.h>
@@ -59,6 +62,7 @@
 #include <asm/intel-family.h>
 #include <asm/cpu_device_id.h>
 #include <asm/uv/uv.h>
+#include <asm/set_memory.h>
 #include <asm/sigframe.h>
 #include <asm/traps.h>
 #include <asm/sev.h>
@@ -2362,3 +2366,52 @@ void arch_smt_update(void)
 	/* Check whether IPI broadcasting can be enabled */
 	apic_smt_update();
 }
+
+void __init arch_cpu_finalize_init(void)
+{
+	identify_boot_cpu();
+
+	/*
+	 * identify_boot_cpu() initialized SMT support information, let the
+	 * core code know.
+	 */
+	cpu_smt_check_topology();
+
+	if (!IS_ENABLED(CONFIG_SMP)) {
+		pr_info("CPU: ");
+		print_cpu_info(&boot_cpu_data);
+	}
+
+	arch_smt_update();
+
+	cpu_select_mitigations();
+
+	if (IS_ENABLED(CONFIG_X86_32)) {
+		/*
+		 * Check whether this is a real i386 which is not longer
+		 * supported and fixup the utsname.
+		 */
+		if (boot_cpu_data.x86 < 4)
+			panic("Kernel requires i486+ for 'invlpg' and other features");
+
+		init_utsname()->machine[1] =
+			'0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
+	}
+
+	alternative_instructions();
+
+	if (IS_ENABLED(CONFIG_X86_64)) {
+		/*
+		 * Make sure the first 2MB area is not mapped by huge pages
+		 * There are typically fixed size MTRRs in there and overlapping
+		 * MTRRs into large pages causes slow downs.
+		 *
+		 * Right now we don't do that with gbpages because there seems
+		 * very little benefit for that case.
+		 */
+		if (!direct_gbpages)
+			set_memory_4k((unsigned long)__va(0), 1);
+	} else {
+		fpu__init_check_bugs();
+	}
+}
--- a/arch/x86/kernel/cpu/cpu.h
+++ b/arch/x86/kernel/cpu/cpu.h
@@ -79,6 +79,7 @@ extern void detect_ht(struct cpuinfo_x86
 extern void check_null_seg_clears_base(struct cpuinfo_x86 *c);
 
 unsigned int aperfmperf_get_khz(int cpu);
+void cpu_select_mitigations(void);
 
 extern void x86_spec_ctrl_setup_ap(void);
 extern void update_srbds_msr(void);


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-06-13 23:39 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-13 23:39 [patch 00/17] init, treewide, x86: Cleanup check_bugs() and start sanitizing the x86 boot process Thomas Gleixner
2023-06-13 23:39 ` Thomas Gleixner
2023-06-13 23:39 ` Thomas Gleixner
2023-06-13 23:39 ` [patch 01/17] init: Provide arch_cpu_finalize_init() Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  9:28   ` Borislav Petkov
2023-06-14  9:28     ` Borislav Petkov
2023-06-14  9:28     ` Borislav Petkov
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` Thomas Gleixner [this message]
2023-06-13 23:39   ` [patch 02/17] x86/cpu: Switch to arch_cpu_finalize_init() Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  9:53   ` Thomas Gleixner
2023-06-14  9:53     ` Thomas Gleixner
2023-06-14  9:53     ` Thomas Gleixner
2023-06-14 10:39     ` Borislav Petkov
2023-06-14 10:39       ` Borislav Petkov
2023-06-14 10:39       ` Borislav Petkov
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 03/17] ARM: cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:27   ` [patch 03/17] " Philippe Mathieu-Daudé
2023-06-25 21:27     ` Philippe Mathieu-Daudé
2023-06-25 21:27     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 04/17] ia64/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:24   ` [patch 04/17] " Philippe Mathieu-Daudé
2023-06-25 21:24     ` Philippe Mathieu-Daudé
2023-06-25 21:24     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 05/17] loongarch/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:24   ` [patch 05/17] " Philippe Mathieu-Daudé
2023-06-25 21:24     ` Philippe Mathieu-Daudé
2023-06-25 21:24     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 06/17] m68k/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  9:22   ` Geert Uytterhoeven
2023-06-14  9:22     ` Geert Uytterhoeven
2023-06-14  9:22     ` Geert Uytterhoeven
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 07/17] mips/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:25   ` [patch 07/17] " Philippe Mathieu-Daudé
2023-06-25 21:25     ` Philippe Mathieu-Daudé
2023-06-25 21:25     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 08/17] sh/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:29   ` [patch 08/17] " Philippe Mathieu-Daudé
2023-06-25 21:29     ` Philippe Mathieu-Daudé
2023-06-25 21:29     ` Philippe Mathieu-Daudé
2023-06-25 21:45   ` John Paul Adrian Glaubitz
2023-06-25 21:45     ` John Paul Adrian Glaubitz
2023-06-25 21:45     ` John Paul Adrian Glaubitz
2023-06-13 23:39 ` [patch 09/17] sparc/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14 20:41   ` Sam Ravnborg
2023-06-14 20:41     ` Sam Ravnborg
2023-06-14 20:41     ` Sam Ravnborg
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:30   ` [patch 09/17] " Philippe Mathieu-Daudé
2023-06-25 21:30     ` Philippe Mathieu-Daudé
2023-06-25 21:30     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 10/17] um/cpu: " Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  6:51   ` Richard Weinberger
2023-06-14  6:51     ` Richard Weinberger
2023-06-14  6:51     ` Richard Weinberger
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:28   ` [patch 10/17] " Philippe Mathieu-Daudé
2023-06-25 21:28     ` Philippe Mathieu-Daudé
2023-06-25 21:28     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 11/17] init: Remove check_bugs() leftovers Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  6:14   ` Richard Henderson
2023-06-14  6:14     ` Richard Henderson
2023-06-14  6:14     ` Richard Henderson
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-25 21:31   ` [patch 11/17] " Philippe Mathieu-Daudé
2023-06-25 21:31     ` Philippe Mathieu-Daudé
2023-06-25 21:31     ` Philippe Mathieu-Daudé
2023-06-13 23:39 ` [patch 12/17] init: Invoke arch_cpu_finalize_init() earlier Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-15 21:44   ` Edgecombe, Rick P
2023-06-15 21:44     ` Edgecombe, Rick P
2023-06-15 21:44     ` Edgecombe, Rick P
2023-06-15 22:03     ` Thomas Gleixner
2023-06-15 22:03       ` Thomas Gleixner
2023-06-15 22:03       ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 13/17] init, x86: Move mem_encrypt_init() into arch_cpu_finalize_init() Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-21 17:12   ` [patch 13/17] " Tom Lendacky
2023-06-21 17:12     ` Tom Lendacky
2023-06-21 17:12     ` Tom Lendacky
2023-06-13 23:39 ` [patch 14/17] x86/init: Initialize signal frame size late Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 15/17] x86/fpu: Remove cpuinfo argument from init functions Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 16/17] x86/fpu: Mark init functions __init Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-06-13 23:39 ` [patch 17/17] x86/fpu: Move FPU initialization into arch_cpu_finalize_init() Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-13 23:39   ` Thomas Gleixner
2023-06-14  5:03   ` Chang S. Bae
2023-06-14  5:03     ` Chang S. Bae
2023-06-14  5:03     ` Chang S. Bae
2023-06-14  9:52     ` Thomas Gleixner
2023-06-14  9:52       ` Thomas Gleixner
2023-06-14  9:52       ` Thomas Gleixner
2023-06-16  9:24   ` [tip: x86/boot] " tip-bot2 for Thomas Gleixner
2023-09-01 17:30   ` [patch 17/17] " Guenter Roeck
2023-09-01 17:30     ` Guenter Roeck
2023-09-01 17:30     ` Guenter Roeck
2023-09-01 18:00     ` Nikolay Borisov
2023-09-01 18:00       ` Nikolay Borisov
2023-09-01 18:00       ` Nikolay Borisov
2023-09-01 18:21       ` Guenter Roeck
2023-09-01 18:21         ` Guenter Roeck
2023-09-01 18:21         ` Guenter Roeck
2023-09-01 18:02     ` Nikolay Borisov
2023-09-01 18:02       ` Nikolay Borisov
2023-09-01 18:02       ` Nikolay Borisov
2023-09-01 21:09       ` Guenter Roeck
2023-09-01 21:09         ` Guenter Roeck
2023-09-01 21:09         ` Guenter Roeck
2023-06-28  3:38 ` [patch 00/17] init, treewide, x86: Cleanup check_bugs() and start sanitizing the x86 boot process Jan Engelhardt
2023-06-28  3:38   ` Jan Engelhardt
2023-06-28  3:38   ` Jan Engelhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230613224545.019583869@linutronix.de \
    --to=tglx@linutronix.de \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=anton.ivanov@cambridgegreys.com \
    --cc=arnd@arndb.de \
    --cc=chenhuacai@kernel.org \
    --cc=chris@zankel.net \
    --cc=dalias@libc.org \
    --cc=darwi@linutronix.de \
    --cc=davem@davemloft.net \
    --cc=geert@linux-m68k.org \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=johannes@sipsolutions.net \
    --cc=kernel@xen0n.name \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=loongarch@lists.linux.dev \
    --cc=mpe@ellerman.id.au \
    --cc=nik.borisov@suse.com \
    --cc=richard.henderson@linaro.org \
    --cc=richard@nod.at \
    --cc=sparclinux@vger.kernel.org \
    --cc=thomas.lendacky@amd.com \
    --cc=torvalds@linux-foundation.org \
    --cc=tsbogend@alpha.franken.de \
    --cc=x86@kernel.org \
    --cc=ysato@users.sourceforge.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.