]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
trace: Added a trace event for pmqos requests
authorSai Gurrappadi <sgurrappadi@nvidia.com>
Wed, 22 Jan 2014 21:21:11 +0000 (13:21 -0800)
committerBharat Nihalani <bnihalani@nvidia.com>
Wed, 25 Jun 2014 14:10:07 +0000 (07:10 -0700)
Now trace pmqos requests when they are added and updated.

Bug 1441748

Change-Id: Ic31f2dfec2f250bd0953f594c45495a38f4384cb
Signed-off-by: Sai Gurrappadi <sgurrappadi@nvidia.com>
Reviewed-on: http://git-master/r/358866
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
include/trace/events/power.h
kernel/power/qos.c

index 23ae177241ba9a1066d478ca7e2e58e290ad5e38..52ec6e12e916cf48e887406c97f1df49d31f0eb8 100644 (file)
@@ -123,6 +123,33 @@ TRACE_EVENT(cpu_scale,
                  (unsigned long)__entry->state)
 );
 
+TRACE_EVENT(pm_qos_request,
+
+       TP_PROTO(u32 class, s32 value, u32 priority, u64 request),
+
+       TP_ARGS(class, value, priority, request),
+
+       TP_STRUCT__entry(
+               __field(u32, class)
+               __field(s32, value)
+               __field(u32, priority)
+               __field(u64, request)
+       ),
+
+       TP_fast_assign(
+               __entry->class = class;
+               __entry->value = value;
+               __entry->priority = priority;
+               __entry->request = request;
+       ),
+
+       TP_printk("class=%lu, value=%d, prio=%lu, request=0x%lx",
+                 (unsigned long)__entry->class,
+                 (int)__entry->value,
+                 (unsigned long)__entry->priority,
+                 (unsigned long)__entry->request)
+);
+
 DEFINE_EVENT(cpu, cpu_frequency,
 
        TP_PROTO(unsigned int frequency, unsigned int cpu_id),
index d9b07e2ca213352c7872bb33e557fe126203ff1c..b838cbb1d586f1a4b4b70580247efb21282154f9 100644 (file)
@@ -48,6 +48,7 @@
 #include <linux/moduleparam.h>
 #include <linux/uaccess.h>
 #include <linux/export.h>
+#include <trace/events/power.h>
 
 /*
  * locking rule: all changes to constraints or notifiers lists
@@ -549,6 +550,8 @@ static int pm_qos_update_bounded_target(struct pm_qos_constraints *c, s32 value,
        case PM_QOS_REMOVE_REQ:
                prio = pm_qos_get_prio_level(priority, &parent->prio_list);
                pm_qos_remove_node(&req->node, prio, parent, c->type);
+               trace_pm_qos_request(req->pm_qos_class, -1,
+                                       -1 , (unsigned long)req);
                break;
        case PM_QOS_UPDATE_REQ:
                /*
@@ -575,6 +578,8 @@ static int pm_qos_update_bounded_target(struct pm_qos_constraints *c, s32 value,
                }
                plist_node_init(&req->node, new_value);
                pm_qos_add_node(&req->node, prio, c->type);
+               trace_pm_qos_request(req->pm_qos_class, new_value,
+                                       priority, (unsigned long)req);
                break;
        default:
                break;
@@ -626,6 +631,8 @@ int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
                         enum pm_qos_req_action action, int value)
 {
        int prev_value, curr_value, new_value, ret;
+       struct pm_qos_request *req = container_of(node, struct pm_qos_request,
+                                                       node);
 
        mutex_lock(&pm_qos_lock);
        prev_value = pm_qos_get_value(c);
@@ -637,6 +644,8 @@ int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
        switch (action) {
        case PM_QOS_REMOVE_REQ:
                plist_del(node, &c->list);
+               trace_pm_qos_request(req->pm_qos_class, -1, -1,
+                                       (unsigned long)req);
                break;
        case PM_QOS_UPDATE_REQ:
                /*
@@ -648,6 +657,8 @@ int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
        case PM_QOS_ADD_REQ:
                plist_node_init(node, new_value);
                plist_add(node, &c->list);
+               trace_pm_qos_request(req->pm_qos_class, new_value, 10,
+                                       (unsigned long)req);
                break;
        default:
                /* no action */