summaryrefslogtreecommitdiff
path: root/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch')
-rw-r--r--recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch239
1 files changed, 239 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch
new file mode 100644
index 0000000..b98ae77
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/002j.patch
@@ -0,0 +1,239 @@
+--- b/arch/Kconfig
++++ a/arch/Kconfig
+@@ -5,9 +5,6 @@
+ config KEXEC_CORE
+ bool
+
+-config HOTPLUG_SMT
+- bool
+-
+ config OPROFILE
+ tristate "OProfile system profiling"
+ depends on PROFILING
+--- b/arch/x86/Kconfig
++++ a/arch/x86/Kconfig
+@@ -147,7 +147,6 @@
+ select HAVE_UID16 if X86_32 || IA32_EMULATION
+ select HAVE_UNSTABLE_SCHED_CLOCK
+ select HAVE_USER_RETURN_NOTIFIER
+- select HOTPLUG_SMT if SMP
+ select IRQ_FORCED_THREADING
+ select MODULES_USE_ELF_RELA if X86_64
+ select MODULES_USE_ELF_REL if X86_32
+--- b/include/linux/cpu.h
++++ a/include/linux/cpu.h
+@@ -257,17 +257,4 @@
+ static inline void cpuhp_report_idle_dead(void) { }
+ #endif /* #ifdef CONFIG_HOTPLUG_CPU */
+
+-enum cpuhp_smt_control {
+- CPU_SMT_ENABLED,
+- CPU_SMT_DISABLED,
+- CPU_SMT_FORCE_DISABLED,
+- CPU_SMT_NOT_SUPPORTED,
+-};
+-
+-#if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
+-extern enum cpuhp_smt_control cpu_smt_control;
+-#else
+-# define cpu_smt_control (CPU_SMT_ENABLED)
+-#endif
+-
+ #endif /* _LINUX_CPU_H_ */
+--- b/kernel/cpu.c
++++ a/kernel/cpu.c
+@@ -978,29 +978,6 @@
+ EXPORT_SYMBOL(cpu_down);
+ #endif /*CONFIG_HOTPLUG_CPU*/
+
+-#ifdef CONFIG_HOTPLUG_SMT
+-enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
+-
+-static int __init smt_cmdline_disable(char *str)
+-{
+- cpu_smt_control = CPU_SMT_DISABLED;
+- if (str && !strcmp(str, "force")) {
+- pr_info("SMT: Force disabled\n");
+- cpu_smt_control = CPU_SMT_FORCE_DISABLED;
+- }
+- return 0;
+-}
+-early_param("nosmt", smt_cmdline_disable);
+-
+-static inline bool cpu_smt_allowed(unsigned int cpu)
+-{
+- return cpu_smt_control == CPU_SMT_ENABLED ||
+- topology_is_primary_thread(cpu);
+-}
+-#else
+-static inline bool cpu_smt_allowed(unsigned int cpu) { return true; }
+-#endif
+-
+ /**
+ * notify_cpu_starting(cpu) - Invoke the callbacks on the starting CPU
+ * @cpu: cpu that just started
+@@ -1119,10 +1096,6 @@
+ err = -EBUSY;
+ goto out;
+ }
+- if (!cpu_smt_allowed(cpu)) {
+- err = -EPERM;
+- goto out;
+- }
+
+ err = _cpu_up(cpu, 0, target);
+ out:
+@@ -1869,153 +1842,10 @@
+ NULL
+ };
+
+-#ifdef CONFIG_HOTPLUG_SMT
+-
+-static const char *smt_states[] = {
+- [CPU_SMT_ENABLED] = "on",
+- [CPU_SMT_DISABLED] = "off",
+- [CPU_SMT_FORCE_DISABLED] = "forceoff",
+- [CPU_SMT_NOT_SUPPORTED] = "notsupported",
+-};
+-
+-static ssize_t
+-show_smt_control(struct device *dev, struct device_attribute *attr, char *buf)
+-{
+- return snprintf(buf, PAGE_SIZE - 2, "%s\n", smt_states[cpu_smt_control]);
+-}
+-
+-static void cpuhp_offline_cpu_device(unsigned int cpu)
+-{
+- struct device *dev = get_cpu_device(cpu);
+-
+- dev->offline = true;
+- /* Tell user space about the state change */
+- kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
+-}
+-
+-static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
+-{
+- int cpu, ret = 0;
+-
+- cpu_maps_update_begin();
+- for_each_online_cpu(cpu) {
+- if (topology_is_primary_thread(cpu))
+- continue;
+- ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
+- if (ret)
+- break;
+- /*
+- * As this needs to hold the cpu maps lock it's impossible
+- * to call device_offline() because that ends up calling
+- * cpu_down() which takes cpu maps lock. cpu maps lock
+- * needs to be held as this might race against in kernel
+- * abusers of the hotplug machinery (thermal management).
+- *
+- * So nothing would update device:offline state. That would
+- * leave the sysfs entry stale and prevent onlining after
+- * smt control has been changed to 'off' again. This is
+- * called under the sysfs hotplug lock, so it is properly
+- * serialized against the regular offline usage.
+- */
+- cpuhp_offline_cpu_device(cpu);
+- }
+- if (!ret)
+- cpu_smt_control = ctrlval;
+- cpu_maps_update_done();
+- return ret;
+-}
+-
+-static void cpuhp_smt_enable(void)
+-{
+- cpu_maps_update_begin();
+- cpu_smt_control = CPU_SMT_ENABLED;
+- cpu_maps_update_done();
+-}
+-
+-static ssize_t
+-store_smt_control(struct device *dev, struct device_attribute *attr,
+- const char *buf, size_t count)
+-{
+- int ctrlval, ret;
+-
+- if (sysfs_streq(buf, "on"))
+- ctrlval = CPU_SMT_ENABLED;
+- else if (sysfs_streq(buf, "off"))
+- ctrlval = CPU_SMT_DISABLED;
+- else if (sysfs_streq(buf, "forceoff"))
+- ctrlval = CPU_SMT_FORCE_DISABLED;
+- else
+- return -EINVAL;
+-
+- if (cpu_smt_control == CPU_SMT_FORCE_DISABLED)
+- return -EPERM;
+-
+- if (cpu_smt_control == CPU_SMT_NOT_SUPPORTED)
+- return -ENODEV;
+-
+- ret = lock_device_hotplug_sysfs();
+- if (ret)
+- return ret;
+-
+- if (ctrlval != cpu_smt_control) {
+- switch (ctrlval) {
+- case CPU_SMT_ENABLED:
+- cpuhp_smt_enable();
+- break;
+- case CPU_SMT_DISABLED:
+- case CPU_SMT_FORCE_DISABLED:
+- ret = cpuhp_smt_disable(ctrlval);
+- break;
+- }
+- }
+-
+- unlock_device_hotplug();
+- return ret ? ret : count;
+-}
+-static DEVICE_ATTR(control, 0644, show_smt_control, store_smt_control);
+-
+-static ssize_t
+-show_smt_active(struct device *dev, struct device_attribute *attr, char *buf)
+-{
+- bool active = topology_max_smt_threads() > 1;
+-
+- return snprintf(buf, PAGE_SIZE - 2, "%d\n", active);
+-}
+-static DEVICE_ATTR(active, 0444, show_smt_active, NULL);
+-
+-static struct attribute *cpuhp_smt_attrs[] = {
+- &dev_attr_control.attr,
+- &dev_attr_active.attr,
+- NULL
+-};
+-
+-static const struct attribute_group cpuhp_smt_attr_group = {
+- .attrs = cpuhp_smt_attrs,
+- .name = "smt",
+- NULL
+-};
+-
+-static int __init cpu_smt_state_init(void)
+-{
+- if (!topology_smt_supported())
+- cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
+-
+- return sysfs_create_group(&cpu_subsys.dev_root->kobj,
+- &cpuhp_smt_attr_group);
+-}
+-
+-#else
+-static inline int cpu_smt_state_init(void) { return 0; }
+-#endif
+-
+ static int __init cpuhp_sysfs_init(void)
+ {
+ int cpu, ret;
+
+- ret = cpu_smt_state_init();
+- if (ret)
+- return ret;
+-
+ ret = sysfs_create_group(&cpu_subsys.dev_root->kobj,
+ &cpuhp_cpu_root_attr_group);
+ if (ret)