PM / QoS: Add dev_pm_qos_request tracepoints
authorSahara <keun-o.park@windriver.com>
Fri, 21 Jun 2013 02:12:30 +0000 (11:12 +0900)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 24 Jun 2013 11:09:03 +0000 (13:09 +0200)
Adds tracepoints to dev_pm_qos_add_request, dev_pm_qos_update_request,
and dev_pm_qos_remove_request.  It's useful for checking device name,
dev_pm_qos_request_type, and value.

Signed-off-by: Sahara <keun-o.park@windriver.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/qos.c
include/trace/events/power.h

index 71671c42ef457e3486f13b770114a0c09459a708..5c1361a9e5dd58049c3835d414f42607cdb46411 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/export.h>
 #include <linux/pm_runtime.h>
 #include <linux/err.h>
+#include <trace/events/power.h>
 
 #include "power.h"
 
@@ -305,6 +306,7 @@ int dev_pm_qos_add_request(struct device *dev, struct dev_pm_qos_request *req,
        else if (!dev->power.qos)
                ret = dev_pm_qos_constraints_allocate(dev);
 
+       trace_dev_pm_qos_add_request(dev_name(dev), type, value);
        if (!ret) {
                req->dev = dev;
                req->type = type;
@@ -349,6 +351,8 @@ static int __dev_pm_qos_update_request(struct dev_pm_qos_request *req,
                return -EINVAL;
        }
 
+       trace_dev_pm_qos_update_request(dev_name(req->dev), req->type,
+                                       new_value);
        if (curr_value != new_value)
                ret = apply_constraint(req, PM_QOS_UPDATE_REQ, new_value);
 
@@ -398,6 +402,8 @@ static int __dev_pm_qos_remove_request(struct dev_pm_qos_request *req)
        if (IS_ERR_OR_NULL(req->dev->power.qos))
                return -ENODEV;
 
+       trace_dev_pm_qos_remove_request(dev_name(req->dev), req->type,
+                                       PM_QOS_DEFAULT_VALUE);
        ret = apply_constraint(req, PM_QOS_REMOVE_REQ, PM_QOS_DEFAULT_VALUE);
        memset(req, 0, sizeof(*req));
        return ret;
index 6411f924afb150649935de1ecea0ffbfc22bb5d1..8e42410bd1591c5168d616d3ebcac66a1d22aed5 100644 (file)
@@ -299,6 +299,57 @@ DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
                        { PM_QOS_REMOVE_REQ,    "REMOVE_REQ" }),
                  __entry->prev_value, __entry->curr_value)
 );
+
+DECLARE_EVENT_CLASS(dev_pm_qos_request,
+
+       TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
+                s32 new_value),
+
+       TP_ARGS(name, type, new_value),
+
+       TP_STRUCT__entry(
+               __string( name,                    name         )
+               __field( enum dev_pm_qos_req_type, type         )
+               __field( s32,                      new_value    )
+       ),
+
+       TP_fast_assign(
+               __assign_str(name, name);
+               __entry->type = type;
+               __entry->new_value = new_value;
+       ),
+
+       TP_printk("device=%s type=%s new_value=%d",
+                 __get_str(name),
+                 __print_symbolic(__entry->type,
+                       { DEV_PM_QOS_LATENCY,   "DEV_PM_QOS_LATENCY" },
+                       { DEV_PM_QOS_FLAGS,     "DEV_PM_QOS_FLAGS" }),
+                 __entry->new_value)
+);
+
+DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
+
+       TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
+                s32 new_value),
+
+       TP_ARGS(name, type, new_value)
+);
+
+DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
+
+       TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
+                s32 new_value),
+
+       TP_ARGS(name, type, new_value)
+);
+
+DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
+
+       TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
+                s32 new_value),
+
+       TP_ARGS(name, type, new_value)
+);
 #endif /* _TRACE_POWER_H */
 
 /* This part must be outside protection */
This page took 0.032712 seconds and 5 git commands to generate.