During idle injection period, CPU PM QOS class shall be ignored.
This will indirectly influence the idle governors to choose the
deepest idle states.

Signed-off-by: Jacob Pan <jacob.jun....@linux.intel.com>
---
 drivers/thermal/intel_powerclamp.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/thermal/intel_powerclamp.c 
b/drivers/thermal/intel_powerclamp.c
index de90f89..62dbf95 100644
--- a/drivers/thermal/intel_powerclamp.c
+++ b/drivers/thermal/intel_powerclamp.c
@@ -51,6 +51,7 @@
 #include <linux/debugfs.h>
 #include <linux/seq_file.h>
 #include <linux/sched/rt.h>
+#include <linux/pm_qos.h>
 
 #include <asm/nmi.h>
 #include <asm/msr.h>
@@ -483,6 +484,10 @@ static int start_power_clamp(void)
        clamping = true;
        schedule_delayed_work(&poll_pkg_cstate_work, 0);
 
+       /* Tell PM QOS all CPU constraints are ignored during idle injection */
+       pm_qos_set_constraint_class_state(PM_QOS_CPU_DMA_LATENCY,
+                                       PM_QOS_CONSTRAINT_IGNORED);
+
        /* start one thread per online cpu */
        for_each_online_cpu(cpu) {
                struct task_struct **p =
@@ -524,6 +529,9 @@ static void end_power_clamp(void)
                        kthread_stop(thread);
                }
        }
+       /* make CPU PM QOS active again */
+       pm_qos_set_constraint_class_state(PM_QOS_CPU_DMA_LATENCY,
+                                       PM_QOS_CONSTRAINT_AVAILABLE);
 }
 
 static int powerclamp_cpu_callback(struct notifier_block *nfb,
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to