diff options
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.patch | 116 |
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); |