summaryrefslogtreecommitdiff
path: root/kernel/power
diff options
context:
space:
mode:
authorMahesh Sivasubramanian <msivasub@codeaurora.org>2014-08-27 11:42:48 -0600
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:50 -0800
commit394da4e2300afbbab271951821048dd543fed3df (patch)
tree25b28e84b00d68f2d8604cb225027f0b7346974f /kernel/power
parente62cf98098cde189ced94744441c7c44655e2cb0 (diff)
qos: Pass the list of cpus with affected qos to notifier
Send the list of cpus whose qos has been affected along with the changed value. Driver listening in for notifier can use this to apply the qos value for the respective cpus. Change-Id: I8f3c2ea624784c806c55de41cc7c7fcf8ebf02da Signed-off-by: Mahesh Sivasubramanian <msivasub@codeaurora.org> [mattw@codeaurora.org: resolve trivial context conflicts] Signed-off-by: Matt Wagantall <mattw@codeaurora.org> Conflicts: kernel/power/qos.c
Diffstat (limited to 'kernel/power')
-rw-r--r--kernel/power/qos.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index 907a90bd20c5..03769831a416 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -266,7 +266,8 @@ static const struct file_operations pm_qos_debug_fops = {
.release = single_release,
};
-static inline void pm_qos_set_value_for_cpus(struct pm_qos_constraints *c)
+static inline void pm_qos_set_value_for_cpus(struct pm_qos_constraints *c,
+ struct cpumask *cpus)
{
struct pm_qos_request *req = NULL;
int cpu;
@@ -290,8 +291,11 @@ static inline void pm_qos_set_value_for_cpus(struct pm_qos_constraints *c)
}
}
- for_each_possible_cpu(cpu)
+ for_each_possible_cpu(cpu) {
+ if (c->target_per_cpu[cpu] != qos_val[cpu])
+ cpumask_set_cpu(cpu, cpus);
c->target_per_cpu[cpu] = qos_val[cpu];
+ }
}
/**
@@ -312,6 +316,7 @@ int pm_qos_update_target(struct pm_qos_constraints *c,
unsigned long flags;
int prev_value, curr_value, new_value;
struct plist_node *node = &req->node;
+ struct cpumask cpus;
int ret;
spin_lock_irqsave(&pm_qos_lock, flags);
@@ -342,8 +347,9 @@ int pm_qos_update_target(struct pm_qos_constraints *c,
}
curr_value = pm_qos_get_value(c);
+ cpumask_clear(&cpus);
pm_qos_set_value(c, curr_value);
- pm_qos_set_value_for_cpus(c);
+ pm_qos_set_value_for_cpus(c, &cpus);
spin_unlock_irqrestore(&pm_qos_lock, flags);
@@ -353,7 +359,7 @@ int pm_qos_update_target(struct pm_qos_constraints *c,
if (c->notifiers)
blocking_notifier_call_chain(c->notifiers,
(unsigned long)curr_value,
- NULL);
+ &cpus);
} else {
ret = 0;
}