summaryrefslogtreecommitdiff
path: root/kernel/power/qos.c
diff options
context:
space:
mode:
authorPraveen Chidambaram <pchidamb@codeaurora.org>2014-05-20 12:57:14 -0600
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:49 -0800
commit259672e3c7a9d5abf57faca96195479cdd1f8854 (patch)
tree3ac45bda4c94322a5c7f168b3d4ec3921a07ba1d /kernel/power/qos.c
parente46cd379b5f09fbd7a9f97d014ef5be694af49f5 (diff)
QoS: Modify data structures and function arguments for scalability.
QoS add requests uses a handle to the priority list that is used internally to save the request, but this does not extend well. Also, dev_pm_qos structure definition seems to use a list object directly. The 'derivative' relationship seems to be broken. Use pm_qos_request objects instead of passing around the protected priority list object. Change-Id: Ie4c9c22dd4ea13265fe01f080ba68cf77d9d484d Signed-off-by: Praveen Chidambaram <pchidamb@codeaurora.org> [mattw@codeaurora.org: resolve context conflicts and extend struct modifications to additional affected users] Signed-off-by: Matt Wagantall <mattw@codeaurora.org> Conflicts: include/linux/pm_qos.h
Diffstat (limited to 'kernel/power/qos.c')
-rw-r--r--kernel/power/qos.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index 97b0df71303e..44c1bed88cc6 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -263,18 +263,20 @@ static const struct file_operations pm_qos_debug_fops = {
* pm_qos_update_target - manages the constraints list and calls the notifiers
* if needed
* @c: constraints data struct
- * @node: request to add to the list, to update or to remove
+ * @req: request to add to the list, to update or to remove
* @action: action to take on the constraints list
* @value: value of the request to add or update
*
* This function returns 1 if the aggregated constraint value has changed, 0
* otherwise.
*/
-int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
- enum pm_qos_req_action action, int value)
+int pm_qos_update_target(struct pm_qos_constraints *c,
+ struct pm_qos_request *req,
+ enum pm_qos_req_action action, int value)
{
unsigned long flags;
int prev_value, curr_value, new_value;
+ struct plist_node *node = &req->node;
int ret;
spin_lock_irqsave(&pm_qos_lock, flags);
@@ -412,7 +414,7 @@ static void __pm_qos_update_request(struct pm_qos_request *req,
if (new_value != req->node.prio)
pm_qos_update_target(
pm_qos_array[req->pm_qos_class]->constraints,
- &req->node, PM_QOS_UPDATE_REQ, new_value);
+ req, PM_QOS_UPDATE_REQ, new_value);
}
/**
@@ -457,7 +459,7 @@ void pm_qos_add_request(struct pm_qos_request *req,
INIT_DELAYED_WORK(&req->work, pm_qos_work_fn);
trace_pm_qos_add_request(pm_qos_class, value);
pm_qos_update_target(pm_qos_array[pm_qos_class]->constraints,
- &req->node, PM_QOS_ADD_REQ, value);
+ req, PM_QOS_ADD_REQ, value);
}
EXPORT_SYMBOL_GPL(pm_qos_add_request);
@@ -511,7 +513,7 @@ void pm_qos_update_request_timeout(struct pm_qos_request *req, s32 new_value,
if (new_value != req->node.prio)
pm_qos_update_target(
pm_qos_array[req->pm_qos_class]->constraints,
- &req->node, PM_QOS_UPDATE_REQ, new_value);
+ req, PM_QOS_UPDATE_REQ, new_value);
schedule_delayed_work(&req->work, usecs_to_jiffies(timeout_us));
}
@@ -539,7 +541,7 @@ void pm_qos_remove_request(struct pm_qos_request *req)
trace_pm_qos_remove_request(req->pm_qos_class, PM_QOS_DEFAULT_VALUE);
pm_qos_update_target(pm_qos_array[req->pm_qos_class]->constraints,
- &req->node, PM_QOS_REMOVE_REQ,
+ req, PM_QOS_REMOVE_REQ,
PM_QOS_DEFAULT_VALUE);
memset(req, 0, sizeof(*req));
}