Skip to content

Commit

Permalink
PM: PM QOS update fix
Browse files Browse the repository at this point in the history
This update handles a use case where pm_qos update requests need to
silently fail if the update is being sent to a handle that is NULL.

The problem was that the original pm_qos silently fails when a request
update is passed to a parameter that has not been added to the list yet.
This update restores that behavior.

Signed-off-by: markgross <markgross@thegnar.org>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
  • Loading branch information
Mark Gross authored and Rafael J. Wysocki committed May 16, 2010
1 parent 8f77578 commit 25f3a5a
Showing 1 changed file with 14 additions and 12 deletions.
26 changes: 14 additions & 12 deletions kernel/pm_qos_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,19 +252,21 @@ void pm_qos_update_request(struct pm_qos_request_list *pm_qos_req,
int pending_update = 0;
s32 temp;

spin_lock_irqsave(&pm_qos_lock, flags);
if (new_value == PM_QOS_DEFAULT_VALUE)
temp = pm_qos_array[pm_qos_req->pm_qos_class]->default_value;
else
temp = new_value;

if (temp != pm_qos_req->value) {
pending_update = 1;
pm_qos_req->value = temp;
if (pm_qos_req) { /*guard against callers passing in null */
spin_lock_irqsave(&pm_qos_lock, flags);
if (new_value == PM_QOS_DEFAULT_VALUE)
temp = pm_qos_array[pm_qos_req->pm_qos_class]->default_value;
else
temp = new_value;

if (temp != pm_qos_req->value) {
pending_update = 1;
pm_qos_req->value = temp;
}
spin_unlock_irqrestore(&pm_qos_lock, flags);
if (pending_update)
update_target(pm_qos_req->pm_qos_class);
}
spin_unlock_irqrestore(&pm_qos_lock, flags);
if (pending_update)
update_target(pm_qos_req->pm_qos_class);
}
EXPORT_SYMBOL_GPL(pm_qos_update_request);

Expand Down

0 comments on commit 25f3a5a

Please sign in to comment.