brintos

brintos / linux-shallow public Read only

0
0
Text · 3.3 KiB · 2b0b4b6 Raw
150 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2 3#undef TRACE_SYSTEM4#define TRACE_SYSTEM rpm5 6#if !defined(_TRACE_RUNTIME_POWER_H) || defined(TRACE_HEADER_MULTI_READ)7#define _TRACE_RUNTIME_POWER_H8 9#include <linux/ktime.h>10#include <linux/tracepoint.h>11 12struct device;13 14/*15 * The rpm_internal events are used for tracing some important16 * runtime pm internal functions.17 */18DECLARE_EVENT_CLASS(rpm_internal,19 20	TP_PROTO(struct device *dev, int flags),21 22	TP_ARGS(dev, flags),23 24	TP_STRUCT__entry(25		__string(       name,		dev_name(dev)	)26		__field(        int,            flags           )27		__field(        int ,   	usage_count	)28		__field(        int ,   	disable_depth   )29		__field(        int ,   	runtime_auto	)30		__field(        int ,   	request_pending	)31		__field(        int ,   	irq_safe	)32		__field(        int ,   	child_count 	)33	),34 35	TP_fast_assign(36		__assign_str(name);37		__entry->flags = flags;38		__entry->usage_count = atomic_read(39			&dev->power.usage_count);40		__entry->disable_depth = dev->power.disable_depth;41		__entry->runtime_auto = dev->power.runtime_auto;42		__entry->request_pending = dev->power.request_pending;43		__entry->irq_safe = dev->power.irq_safe;44		__entry->child_count = atomic_read(45			&dev->power.child_count);46	),47 48	TP_printk("%s flags-%x cnt-%-2d dep-%-2d auto-%-1d p-%-1d"49			" irq-%-1d child-%d",50			__get_str(name), __entry->flags,51			__entry->usage_count,52			__entry->disable_depth,53			__entry->runtime_auto,54			__entry->request_pending,55			__entry->irq_safe,56			__entry->child_count57		 )58);59DEFINE_EVENT(rpm_internal, rpm_suspend,60 61	TP_PROTO(struct device *dev, int flags),62 63	TP_ARGS(dev, flags)64);65DEFINE_EVENT(rpm_internal, rpm_resume,66 67	TP_PROTO(struct device *dev, int flags),68 69	TP_ARGS(dev, flags)70);71DEFINE_EVENT(rpm_internal, rpm_idle,72 73	TP_PROTO(struct device *dev, int flags),74 75	TP_ARGS(dev, flags)76);77DEFINE_EVENT(rpm_internal, rpm_usage,78 79	TP_PROTO(struct device *dev, int flags),80 81	TP_ARGS(dev, flags)82);83 84TRACE_EVENT(rpm_return_int,85	TP_PROTO(struct device *dev, unsigned long ip, int ret),86	TP_ARGS(dev, ip, ret),87 88	TP_STRUCT__entry(89		__string(       name,		dev_name(dev))90		__field(	unsigned long,		ip	)91		__field(	int,			ret	)92	),93 94	TP_fast_assign(95		__assign_str(name);96		__entry->ip = ip;97		__entry->ret = ret;98	),99 100	TP_printk("%pS:%s ret=%d", (void *)__entry->ip, __get_str(name),101		__entry->ret)102);103 104#define RPM_STATUS_STRINGS \105	EM(RPM_INVALID, "RPM_INVALID") \106	EM(RPM_ACTIVE, "RPM_ACTIVE") \107	EM(RPM_RESUMING, "RPM_RESUMING") \108	EM(RPM_SUSPENDED, "RPM_SUSPENDED") \109	EMe(RPM_SUSPENDING, "RPM_SUSPENDING")110 111/* Enums require being exported to userspace, for user tool parsing. */112#undef EM113#undef EMe114#define EM(a, b)	TRACE_DEFINE_ENUM(a);115#define EMe(a, b)	TRACE_DEFINE_ENUM(a);116 117RPM_STATUS_STRINGS118 119/*120 * Now redefine the EM() and EMe() macros to map the enums to the strings that121 * will be printed in the output.122 */123#undef EM124#undef EMe125#define EM(a, b)	{ a, b },126#define EMe(a, b)	{ a, b }127 128TRACE_EVENT(rpm_status,129	TP_PROTO(struct device *dev, enum rpm_status status),130	TP_ARGS(dev, status),131 132	TP_STRUCT__entry(133		__string(name,	dev_name(dev))134		__field(int,	status)135	),136 137	TP_fast_assign(138		__assign_str(name);139		__entry->status = status;140	),141 142	TP_printk("%s status=%s", __get_str(name),143		__print_symbolic(__entry->status, RPM_STATUS_STRINGS))144);145 146#endif /* _TRACE_RUNTIME_POWER_H */147 148/* This part must be outside protection */149#include <trace/define_trace.h>150