diff options
author | Mahesh Sivasubramanian <msivasub@codeaurora.org> | 2014-08-27 11:42:48 -0600 |
---|---|---|
committer | Rohit Vaswani <rvaswani@codeaurora.org> | 2016-03-01 12:22:50 -0800 |
commit | 394da4e2300afbbab271951821048dd543fed3df (patch) | |
tree | 25b28e84b00d68f2d8604cb225027f0b7346974f /kernel/power | |
parent | e62cf98098cde189ced94744441c7c44655e2cb0 (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.c | 14 |
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; } |