aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/power/qos.c6
-rw-r--r--include/trace/events/power.h51
2 files changed, 57 insertions, 0 deletions
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index 71671c42ef45..5c1361a9e5dd 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -42,6 +42,7 @@
42#include <linux/export.h> 42#include <linux/export.h>
43#include <linux/pm_runtime.h> 43#include <linux/pm_runtime.h>
44#include <linux/err.h> 44#include <linux/err.h>
45#include <trace/events/power.h>
45 46
46#include "power.h" 47#include "power.h"
47 48
@@ -305,6 +306,7 @@ int dev_pm_qos_add_request(struct device *dev, struct dev_pm_qos_request *req,
305 else if (!dev->power.qos) 306 else if (!dev->power.qos)
306 ret = dev_pm_qos_constraints_allocate(dev); 307 ret = dev_pm_qos_constraints_allocate(dev);
307 308
309 trace_dev_pm_qos_add_request(dev_name(dev), type, value);
308 if (!ret) { 310 if (!ret) {
309 req->dev = dev; 311 req->dev = dev;
310 req->type = type; 312 req->type = type;
@@ -349,6 +351,8 @@ static int __dev_pm_qos_update_request(struct dev_pm_qos_request *req,
349 return -EINVAL; 351 return -EINVAL;
350 } 352 }
351 353
354 trace_dev_pm_qos_update_request(dev_name(req->dev), req->type,
355 new_value);
352 if (curr_value != new_value) 356 if (curr_value != new_value)
353 ret = apply_constraint(req, PM_QOS_UPDATE_REQ, new_value); 357 ret = apply_constraint(req, PM_QOS_UPDATE_REQ, new_value);
354 358
@@ -398,6 +402,8 @@ static int __dev_pm_qos_remove_request(struct dev_pm_qos_request *req)
398 if (IS_ERR_OR_NULL(req->dev->power.qos)) 402 if (IS_ERR_OR_NULL(req->dev->power.qos))
399 return -ENODEV; 403 return -ENODEV;
400 404
405 trace_dev_pm_qos_remove_request(dev_name(req->dev), req->type,
406 PM_QOS_DEFAULT_VALUE);
401 ret = apply_constraint(req, PM_QOS_REMOVE_REQ, PM_QOS_DEFAULT_VALUE); 407 ret = apply_constraint(req, PM_QOS_REMOVE_REQ, PM_QOS_DEFAULT_VALUE);
402 memset(req, 0, sizeof(*req)); 408 memset(req, 0, sizeof(*req));
403 return ret; 409 return ret;
diff --git a/include/trace/events/power.h b/include/trace/events/power.h
index 6411f924afb1..8e42410bd159 100644
--- a/include/trace/events/power.h
+++ b/include/trace/events/power.h
@@ -299,6 +299,57 @@ DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
299 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }), 299 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
300 __entry->prev_value, __entry->curr_value) 300 __entry->prev_value, __entry->curr_value)
301); 301);
302
303DECLARE_EVENT_CLASS(dev_pm_qos_request,
304
305 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
306 s32 new_value),
307
308 TP_ARGS(name, type, new_value),
309
310 TP_STRUCT__entry(
311 __string( name, name )
312 __field( enum dev_pm_qos_req_type, type )
313 __field( s32, new_value )
314 ),
315
316 TP_fast_assign(
317 __assign_str(name, name);
318 __entry->type = type;
319 __entry->new_value = new_value;
320 ),
321
322 TP_printk("device=%s type=%s new_value=%d",
323 __get_str(name),
324 __print_symbolic(__entry->type,
325 { DEV_PM_QOS_LATENCY, "DEV_PM_QOS_LATENCY" },
326 { DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
327 __entry->new_value)
328);
329
330DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
331
332 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
333 s32 new_value),
334
335 TP_ARGS(name, type, new_value)
336);
337
338DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
339
340 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
341 s32 new_value),
342
343 TP_ARGS(name, type, new_value)
344);
345
346DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
347
348 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
349 s32 new_value),
350
351 TP_ARGS(name, type, new_value)
352);
302#endif /* _TRACE_POWER_H */ 353#endif /* _TRACE_POWER_H */
303 354
304/* This part must be outside protection */ 355/* This part must be outside protection */