qos: Pass the list of cpus with affected qos to notifer

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>
This commit is contained in:
Mahesh Sivasubramanian 2014-08-27 11:42:48 -06:00
parent e4b5be8fb2
commit 9b6ffd790b
1 changed files with 10 additions and 4 deletions

View File

@ -160,7 +160,8 @@ static inline void pm_qos_set_value(struct pm_qos_constraints *c, s32 value)
c->target_value = value;
}
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;
@ -184,8 +185,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];
}
}
/**
@ -206,6 +210,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;
spin_lock_irqsave(&pm_qos_lock, flags);
prev_value = pm_qos_get_value(c);
@ -235,15 +240,16 @@ 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);
if (prev_value != curr_value) {
blocking_notifier_call_chain(c->notifiers,
(unsigned long)curr_value,
NULL);
&cpus);
return 1;
} else {
return 0;