(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),
#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
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:
/*
}
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;
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);
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:
/*
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 */