pmqos: Enable cpu isolation awareness
Set long latency requirement for isolated cores to ensure LPM logic will select a deep sleep state. Change-Id: I83e9fbb800df259616a145d311b50627dc42a5ff Signed-off-by: Olav Haugan <ohaugan@codeaurora.org>
This commit is contained in:
parent
287b1a8c1c
commit
bc24c063ef
2 changed files with 13 additions and 3 deletions
|
@ -625,12 +625,15 @@ static void smp_callback(void *v)
|
||||||
static int cpuidle_latency_notify(struct notifier_block *b,
|
static int cpuidle_latency_notify(struct notifier_block *b,
|
||||||
unsigned long l, void *v)
|
unsigned long l, void *v)
|
||||||
{
|
{
|
||||||
const struct cpumask *cpus;
|
struct cpumask cpus;
|
||||||
|
|
||||||
cpus = v ?: cpu_online_mask;
|
if (v)
|
||||||
|
cpumask_andnot(&cpus, v, cpu_isolated_mask);
|
||||||
|
else
|
||||||
|
cpumask_andnot(&cpus, cpu_online_mask, cpu_isolated_mask);
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
smp_call_function_many(cpus, smp_callback, NULL, 1);
|
smp_call_function_many(&cpus, smp_callback, NULL, 1);
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/irqdesc.h>
|
#include <linux/irqdesc.h>
|
||||||
|
#include <linux/cpumask.h>
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
@ -447,6 +448,9 @@ EXPORT_SYMBOL_GPL(pm_qos_request);
|
||||||
|
|
||||||
int pm_qos_request_for_cpu(int pm_qos_class, int cpu)
|
int pm_qos_request_for_cpu(int pm_qos_class, int cpu)
|
||||||
{
|
{
|
||||||
|
if (cpu_isolated(cpu))
|
||||||
|
return INT_MAX;
|
||||||
|
|
||||||
return pm_qos_array[pm_qos_class]->constraints->target_per_cpu[cpu];
|
return pm_qos_array[pm_qos_class]->constraints->target_per_cpu[cpu];
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pm_qos_request_for_cpu);
|
EXPORT_SYMBOL(pm_qos_request_for_cpu);
|
||||||
|
@ -469,6 +473,9 @@ int pm_qos_request_for_cpumask(int pm_qos_class, struct cpumask *mask)
|
||||||
val = c->default_value;
|
val = c->default_value;
|
||||||
|
|
||||||
for_each_cpu(cpu, mask) {
|
for_each_cpu(cpu, mask) {
|
||||||
|
if (cpu_isolated(cpu))
|
||||||
|
continue;
|
||||||
|
|
||||||
switch (c->type) {
|
switch (c->type) {
|
||||||
case PM_QOS_MIN:
|
case PM_QOS_MIN:
|
||||||
if (c->target_per_cpu[cpu] < val)
|
if (c->target_per_cpu[cpu] < val)
|
||||||
|
|
Loading…
Add table
Reference in a new issue