[PATCH 3/3] thermal/powerclamp: communicate with pm qos when injecting idle

From: Jacob Pan
Date: Tue Nov 26 2013 - 18:21:05 EST


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.pan@xxxxxxxxxxxxxxx>
---
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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/