summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch')
-rw-r--r--debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch89
1 files changed, 0 insertions, 89 deletions
diff --git a/debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch b/debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch
deleted file mode 100644
index c6499cb76..000000000
--- a/debian/patches-rt/thermal-Defer-thermal-wakups-to-threads.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From: Daniel Wagner <wagi@monom.org>
-Date: Tue, 17 Feb 2015 09:37:44 +0100
-Subject: thermal: Defer thermal wakups to threads
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.0/older/patches-5.0.10-rt7.tar.xz
-
-On RT the spin lock in pkg_temp_thermal_platfrom_thermal_notify will
-call schedule while we run in irq context.
-
-[<ffffffff816850ac>] dump_stack+0x4e/0x8f
-[<ffffffff81680f7d>] __schedule_bug+0xa6/0xb4
-[<ffffffff816896b4>] __schedule+0x5b4/0x700
-[<ffffffff8168982a>] schedule+0x2a/0x90
-[<ffffffff8168a8b5>] rt_spin_lock_slowlock+0xe5/0x2d0
-[<ffffffff8168afd5>] rt_spin_lock+0x25/0x30
-[<ffffffffa03a7b75>] pkg_temp_thermal_platform_thermal_notify+0x45/0x134 [x86_pkg_temp_thermal]
-[<ffffffff8103d4db>] ? therm_throt_process+0x1b/0x160
-[<ffffffff8103d831>] intel_thermal_interrupt+0x211/0x250
-[<ffffffff8103d8c1>] smp_thermal_interrupt+0x21/0x40
-[<ffffffff8169415d>] thermal_interrupt+0x6d/0x80
-
-Let's defer the work to a kthread.
-
-Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
-[bigeasy: reoder init/denit position. TODO: flush swork on exit]
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/thermal/intel/x86_pkg_temp_thermal.c | 28 ++++++++++++++++++++++++++-
- 1 file changed, 27 insertions(+), 1 deletion(-)
-
---- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
-+++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
-@@ -29,6 +29,7 @@
- #include <linux/pm.h>
- #include <linux/thermal.h>
- #include <linux/debugfs.h>
-+#include <linux/kthread.h>
- #include <asm/cpu_device_id.h>
- #include <asm/mce.h>
-
-@@ -329,7 +330,7 @@ static void pkg_thermal_schedule_work(in
- schedule_delayed_work_on(cpu, work, ms);
- }
-
--static int pkg_thermal_notify(u64 msr_val)
-+static void pkg_thermal_notify_work(struct kthread_work *work)
- {
- int cpu = smp_processor_id();
- struct pkg_device *pkgdev;
-@@ -348,8 +349,32 @@ static int pkg_thermal_notify(u64 msr_va
- }
-
- spin_unlock_irqrestore(&pkg_temp_lock, flags);
-+}
-+
-+#ifdef CONFIG_PREEMPT_RT_FULL
-+static DEFINE_KTHREAD_WORK(notify_work, pkg_thermal_notify_work);
-+
-+static int pkg_thermal_notify(u64 msr_val)
-+{
-+ kthread_schedule_work(&notify_work);
-+ return 0;
-+}
-+
-+static void pkg_thermal_notify_flush(void)
-+{
-+ kthread_flush_work(&notify_work);
-+}
-+
-+#else /* !CONFIG_PREEMPT_RT_FULL */
-+
-+static void pkg_thermal_notify_flush(void) { }
-+
-+static int pkg_thermal_notify(u64 msr_val)
-+{
-+ pkg_thermal_notify_work(NULL);
- return 0;
- }
-+#endif /* CONFIG_PREEMPT_RT_FULL */
-
- static int pkg_temp_thermal_device_add(unsigned int cpu)
- {
-@@ -548,6 +573,7 @@ static void __exit pkg_temp_thermal_exit
- platform_thermal_package_rate_control = NULL;
-
- cpuhp_remove_state(pkg_thermal_hp_state);
-+ pkg_thermal_notify_flush();
- debugfs_remove_recursive(debugfs);
- kfree(packages);
- }