xref: /openbmc/linux/include/trace/events/cgroup.h (revision ed1777de25e45bfb58fad63341904f8a77911785)
1*ed1777deSTejun Heo #undef TRACE_SYSTEM
2*ed1777deSTejun Heo #define TRACE_SYSTEM cgroup
3*ed1777deSTejun Heo 
4*ed1777deSTejun Heo #if !defined(_TRACE_CGROUP_H) || defined(TRACE_HEADER_MULTI_READ)
5*ed1777deSTejun Heo #define _TRACE_CGROUP_H
6*ed1777deSTejun Heo 
7*ed1777deSTejun Heo #include <linux/cgroup.h>
8*ed1777deSTejun Heo #include <linux/tracepoint.h>
9*ed1777deSTejun Heo 
10*ed1777deSTejun Heo DECLARE_EVENT_CLASS(cgroup_root,
11*ed1777deSTejun Heo 
12*ed1777deSTejun Heo 	TP_PROTO(struct cgroup_root *root),
13*ed1777deSTejun Heo 
14*ed1777deSTejun Heo 	TP_ARGS(root),
15*ed1777deSTejun Heo 
16*ed1777deSTejun Heo 	TP_STRUCT__entry(
17*ed1777deSTejun Heo 		__field(	int,		root			)
18*ed1777deSTejun Heo 		__field(	u16,		ss_mask			)
19*ed1777deSTejun Heo 		__string(	name,		root->name		)
20*ed1777deSTejun Heo 	),
21*ed1777deSTejun Heo 
22*ed1777deSTejun Heo 	TP_fast_assign(
23*ed1777deSTejun Heo 		__entry->root = root->hierarchy_id;
24*ed1777deSTejun Heo 		__entry->ss_mask = root->subsys_mask;
25*ed1777deSTejun Heo 		__assign_str(name, root->name);
26*ed1777deSTejun Heo 	),
27*ed1777deSTejun Heo 
28*ed1777deSTejun Heo 	TP_printk("root=%d ss_mask=%#x name=%s",
29*ed1777deSTejun Heo 		  __entry->root, __entry->ss_mask, __get_str(name))
30*ed1777deSTejun Heo );
31*ed1777deSTejun Heo 
32*ed1777deSTejun Heo DEFINE_EVENT(cgroup_root, cgroup_setup_root,
33*ed1777deSTejun Heo 
34*ed1777deSTejun Heo 	TP_PROTO(struct cgroup_root *root),
35*ed1777deSTejun Heo 
36*ed1777deSTejun Heo 	TP_ARGS(root)
37*ed1777deSTejun Heo );
38*ed1777deSTejun Heo 
39*ed1777deSTejun Heo DEFINE_EVENT(cgroup_root, cgroup_destroy_root,
40*ed1777deSTejun Heo 
41*ed1777deSTejun Heo 	TP_PROTO(struct cgroup_root *root),
42*ed1777deSTejun Heo 
43*ed1777deSTejun Heo 	TP_ARGS(root)
44*ed1777deSTejun Heo );
45*ed1777deSTejun Heo 
46*ed1777deSTejun Heo DEFINE_EVENT(cgroup_root, cgroup_remount,
47*ed1777deSTejun Heo 
48*ed1777deSTejun Heo 	TP_PROTO(struct cgroup_root *root),
49*ed1777deSTejun Heo 
50*ed1777deSTejun Heo 	TP_ARGS(root)
51*ed1777deSTejun Heo );
52*ed1777deSTejun Heo 
53*ed1777deSTejun Heo DECLARE_EVENT_CLASS(cgroup,
54*ed1777deSTejun Heo 
55*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *cgrp),
56*ed1777deSTejun Heo 
57*ed1777deSTejun Heo 	TP_ARGS(cgrp),
58*ed1777deSTejun Heo 
59*ed1777deSTejun Heo 	TP_STRUCT__entry(
60*ed1777deSTejun Heo 		__field(	int,		root			)
61*ed1777deSTejun Heo 		__field(	int,		id			)
62*ed1777deSTejun Heo 		__field(	int,		level			)
63*ed1777deSTejun Heo 		__dynamic_array(char,		path,
64*ed1777deSTejun Heo 				cgrp->kn ? cgroup_path(cgrp, NULL, 0) + 1
65*ed1777deSTejun Heo 					 : strlen("(null)"))
66*ed1777deSTejun Heo 	),
67*ed1777deSTejun Heo 
68*ed1777deSTejun Heo 	TP_fast_assign(
69*ed1777deSTejun Heo 		__entry->root = cgrp->root->hierarchy_id;
70*ed1777deSTejun Heo 		__entry->id = cgrp->id;
71*ed1777deSTejun Heo 		__entry->level = cgrp->level;
72*ed1777deSTejun Heo 		if (cgrp->kn)
73*ed1777deSTejun Heo 			cgroup_path(cgrp, __get_dynamic_array(path),
74*ed1777deSTejun Heo 				    __get_dynamic_array_len(path));
75*ed1777deSTejun Heo 		else
76*ed1777deSTejun Heo 			__assign_str(path, "(null)");
77*ed1777deSTejun Heo 	),
78*ed1777deSTejun Heo 
79*ed1777deSTejun Heo 	TP_printk("root=%d id=%d level=%d path=%s",
80*ed1777deSTejun Heo 		  __entry->root, __entry->id, __entry->level, __get_str(path))
81*ed1777deSTejun Heo );
82*ed1777deSTejun Heo 
83*ed1777deSTejun Heo DEFINE_EVENT(cgroup, cgroup_mkdir,
84*ed1777deSTejun Heo 
85*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *cgroup),
86*ed1777deSTejun Heo 
87*ed1777deSTejun Heo 	TP_ARGS(cgroup)
88*ed1777deSTejun Heo );
89*ed1777deSTejun Heo 
90*ed1777deSTejun Heo DEFINE_EVENT(cgroup, cgroup_rmdir,
91*ed1777deSTejun Heo 
92*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *cgroup),
93*ed1777deSTejun Heo 
94*ed1777deSTejun Heo 	TP_ARGS(cgroup)
95*ed1777deSTejun Heo );
96*ed1777deSTejun Heo 
97*ed1777deSTejun Heo DEFINE_EVENT(cgroup, cgroup_release,
98*ed1777deSTejun Heo 
99*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *cgroup),
100*ed1777deSTejun Heo 
101*ed1777deSTejun Heo 	TP_ARGS(cgroup)
102*ed1777deSTejun Heo );
103*ed1777deSTejun Heo 
104*ed1777deSTejun Heo DEFINE_EVENT(cgroup, cgroup_rename,
105*ed1777deSTejun Heo 
106*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *cgroup),
107*ed1777deSTejun Heo 
108*ed1777deSTejun Heo 	TP_ARGS(cgroup)
109*ed1777deSTejun Heo );
110*ed1777deSTejun Heo 
111*ed1777deSTejun Heo DECLARE_EVENT_CLASS(cgroup_migrate,
112*ed1777deSTejun Heo 
113*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *dst_cgrp, struct task_struct *task, bool threadgroup),
114*ed1777deSTejun Heo 
115*ed1777deSTejun Heo 	TP_ARGS(dst_cgrp, task, threadgroup),
116*ed1777deSTejun Heo 
117*ed1777deSTejun Heo 	TP_STRUCT__entry(
118*ed1777deSTejun Heo 		__field(	int,		dst_root		)
119*ed1777deSTejun Heo 		__field(	int,		dst_id			)
120*ed1777deSTejun Heo 		__field(	int,		dst_level		)
121*ed1777deSTejun Heo 		__dynamic_array(char,		dst_path,
122*ed1777deSTejun Heo 				dst_cgrp->kn ? cgroup_path(dst_cgrp, NULL, 0) + 1
123*ed1777deSTejun Heo 					     : strlen("(null)"))
124*ed1777deSTejun Heo 		__field(	int,		pid			)
125*ed1777deSTejun Heo 		__string(	comm,		task->comm		)
126*ed1777deSTejun Heo 	),
127*ed1777deSTejun Heo 
128*ed1777deSTejun Heo 	TP_fast_assign(
129*ed1777deSTejun Heo 		__entry->dst_root = dst_cgrp->root->hierarchy_id;
130*ed1777deSTejun Heo 		__entry->dst_id = dst_cgrp->id;
131*ed1777deSTejun Heo 		__entry->dst_level = dst_cgrp->level;
132*ed1777deSTejun Heo 		if (dst_cgrp->kn)
133*ed1777deSTejun Heo 			cgroup_path(dst_cgrp, __get_dynamic_array(dst_path),
134*ed1777deSTejun Heo 				    __get_dynamic_array_len(dst_path));
135*ed1777deSTejun Heo 		else
136*ed1777deSTejun Heo 			__assign_str(dst_path, "(null)");
137*ed1777deSTejun Heo 		__entry->pid = task->pid;
138*ed1777deSTejun Heo 		__assign_str(comm, task->comm);
139*ed1777deSTejun Heo 	),
140*ed1777deSTejun Heo 
141*ed1777deSTejun Heo 	TP_printk("dst_root=%d dst_id=%d dst_level=%d dst_path=%s pid=%d comm=%s",
142*ed1777deSTejun Heo 		  __entry->dst_root, __entry->dst_id, __entry->dst_level,
143*ed1777deSTejun Heo 		  __get_str(dst_path), __entry->pid, __get_str(comm))
144*ed1777deSTejun Heo );
145*ed1777deSTejun Heo 
146*ed1777deSTejun Heo DEFINE_EVENT(cgroup_migrate, cgroup_attach_task,
147*ed1777deSTejun Heo 
148*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *dst_cgrp, struct task_struct *task, bool threadgroup),
149*ed1777deSTejun Heo 
150*ed1777deSTejun Heo 	TP_ARGS(dst_cgrp, task, threadgroup)
151*ed1777deSTejun Heo );
152*ed1777deSTejun Heo 
153*ed1777deSTejun Heo DEFINE_EVENT(cgroup_migrate, cgroup_transfer_tasks,
154*ed1777deSTejun Heo 
155*ed1777deSTejun Heo 	TP_PROTO(struct cgroup *dst_cgrp, struct task_struct *task, bool threadgroup),
156*ed1777deSTejun Heo 
157*ed1777deSTejun Heo 	TP_ARGS(dst_cgrp, task, threadgroup)
158*ed1777deSTejun Heo );
159*ed1777deSTejun Heo 
160*ed1777deSTejun Heo #endif /* _TRACE_CGROUP_H */
161*ed1777deSTejun Heo 
162*ed1777deSTejun Heo /* This part must be outside protection */
163*ed1777deSTejun Heo #include <trace/define_trace.h>
164