summaryrefslogtreecommitdiff
path: root/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch')
-rw-r--r--recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch
new file mode 100644
index 0000000..27951a0
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002c.patch
@@ -0,0 +1,116 @@
+--- b/arch/x86/kernel/cpu/bugs.c
++++ a/arch/x86/kernel/cpu/bugs.c
+@@ -61,7 +61,7 @@
+ * identify_boot_cpu() initialized SMT support information, let the
+ * core code know.
+ */
++ cpu_smt_check_topology();
+- cpu_smt_check_topology_early();
+
+ if (!IS_ENABLED(CONFIG_SMP)) {
+ pr_info("CPU: ");
+--- b/include/linux/cpu.h
++++ a/include/linux/cpu.h
+@@ -267,12 +267,10 @@
+ #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
+ extern enum cpuhp_smt_control cpu_smt_control;
+ extern void cpu_smt_disable(bool force);
+-extern void cpu_smt_check_topology_early(void);
+ extern void cpu_smt_check_topology(void);
+ #else
+ # define cpu_smt_control (CPU_SMT_ENABLED)
+ static inline void cpu_smt_disable(bool force) { }
+-static inline void cpu_smt_check_topology_early(void) { }
+ static inline void cpu_smt_check_topology(void) { }
+ #endif
+
+--- b/kernel/cpu.c
++++ a/kernel/cpu.c
+@@ -360,8 +360,6 @@
+ enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
+ EXPORT_SYMBOL_GPL(cpu_smt_control);
+
+-static bool cpu_smt_available __read_mostly;
+-
+ void __init cpu_smt_disable(bool force)
+ {
+ if (cpu_smt_control == CPU_SMT_FORCE_DISABLED ||
+@@ -378,28 +376,14 @@
+
+ /*
+ * The decision whether SMT is supported can only be done after the full
++ * CPU identification. Called from architecture code.
+- * CPU identification. Called from architecture code before non boot CPUs
+- * are brought up.
+ */
++void __init cpu_smt_check_topology(void)
+-void __init cpu_smt_check_topology_early(void)
+ {
+ if (!topology_smt_supported())
+ cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
+ }
+
+-/*
+- * If SMT was disabled by BIOS, detect it here, after the CPUs have been
+- * brought online. This ensures the smt/l1tf sysfs entries are consistent
+- * with reality. cpu_smt_available is set to true during the bringup of non
+- * boot CPUs when a SMT sibling is detected. Note, this may overwrite
+- * cpu_smt_control's previous setting.
+- */
+-void __init cpu_smt_check_topology(void)
+-{
+- if (!cpu_smt_available)
+- cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
+-}
+-
+ static int __init smt_cmdline_disable(char *str)
+ {
+ cpu_smt_disable(str && !strcmp(str, "force"));
+@@ -409,18 +393,10 @@
+
+ static inline bool cpu_smt_allowed(unsigned int cpu)
+ {
++ if (cpu_smt_control == CPU_SMT_ENABLED)
+- if (topology_is_primary_thread(cpu))
+ return true;
+
++ if (topology_is_primary_thread(cpu))
+- /*
+- * If the CPU is not a 'primary' thread and the booted_once bit is
+- * set then the processor has SMT support. Store this information
+- * for the late check of SMT support in cpu_smt_check_topology().
+- */
+- if (per_cpu(cpuhp_state, cpu).booted_once)
+- cpu_smt_available = true;
+-
+- if (cpu_smt_control == CPU_SMT_ENABLED)
+ return true;
+
+ /*
+@@ -2087,6 +2063,15 @@
+
+ static int __init cpu_smt_state_init(void)
+ {
++ /*
++ * If SMT was disabled by BIOS, detect it here, after the CPUs have
++ * been brought online. This ensures the smt/l1tf sysfs entries are
++ * consistent with reality. Note this may overwrite cpu_smt_control's
++ * previous setting.
++ */
++ if (topology_max_smt_threads() == 1)
++ cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
++
+ return sysfs_create_group(&cpu_subsys.dev_root->kobj,
+ &cpuhp_smt_attr_group);
+ }
+--- b/kernel/smp.c
++++ a/kernel/smp.c
+@@ -564,8 +564,6 @@
+ cpu_up(cpu);
+ }
+
+- /* Final decision about SMT support */
+- cpu_smt_check_topology();
+ /* Any cleanup work */
+ smp_announce();
+ smp_cpus_done(setup_max_cpus);