diff options
| -rw-r--r-- | drivers/base/power/qos.c | 6 | ||||
| -rw-r--r-- | include/trace/events/power.h | 51 |
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 | |||
| 303 | DECLARE_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 | |||
| 330 | DEFINE_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 | |||
| 338 | DEFINE_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 | |||
| 346 | DEFINE_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 */ |
