1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM cgroup
5 #if !defined(_TRACE_CGROUP_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_CGROUP_H
8 #include <linux/cgroup.h>
9 #include <linux/tracepoint.h>
11 DECLARE_EVENT_CLASS(cgroup_root
,
13 TP_PROTO(struct cgroup_root
*root
),
19 __field( u16
, ss_mask
)
20 __string( name
, root
->name
)
24 __entry
->root
= root
->hierarchy_id
;
25 __entry
->ss_mask
= root
->subsys_mask
;
26 __assign_str(name
, root
->name
);
29 TP_printk("root=%d ss_mask=%#x name=%s",
30 __entry
->root
, __entry
->ss_mask
, __get_str(name
))
33 DEFINE_EVENT(cgroup_root
, cgroup_setup_root
,
35 TP_PROTO(struct cgroup_root
*root
),
40 DEFINE_EVENT(cgroup_root
, cgroup_destroy_root
,
42 TP_PROTO(struct cgroup_root
*root
),
47 DEFINE_EVENT(cgroup_root
, cgroup_remount
,
49 TP_PROTO(struct cgroup_root
*root
),
54 DECLARE_EVENT_CLASS(cgroup
,
56 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
64 __string( path
, path
)
68 __entry
->root
= cgrp
->root
->hierarchy_id
;
69 __entry
->id
= cgroup_id(cgrp
);
70 __entry
->level
= cgrp
->level
;
71 __assign_str(path
, path
);
74 TP_printk("root=%d id=%d level=%d path=%s",
75 __entry
->root
, __entry
->id
, __entry
->level
, __get_str(path
))
78 DEFINE_EVENT(cgroup
, cgroup_mkdir
,
80 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
85 DEFINE_EVENT(cgroup
, cgroup_rmdir
,
87 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
92 DEFINE_EVENT(cgroup
, cgroup_release
,
94 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
99 DEFINE_EVENT(cgroup
, cgroup_rename
,
101 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
106 DEFINE_EVENT(cgroup
, cgroup_freeze
,
108 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
113 DEFINE_EVENT(cgroup
, cgroup_unfreeze
,
115 TP_PROTO(struct cgroup
*cgrp
, const char *path
),
120 DECLARE_EVENT_CLASS(cgroup_migrate
,
122 TP_PROTO(struct cgroup
*dst_cgrp
, const char *path
,
123 struct task_struct
*task
, bool threadgroup
),
125 TP_ARGS(dst_cgrp
, path
, task
, threadgroup
),
128 __field( int, dst_root
)
129 __field( int, dst_id
)
130 __field( int, dst_level
)
132 __string( dst_path
, path
)
133 __string( comm
, task
->comm
)
137 __entry
->dst_root
= dst_cgrp
->root
->hierarchy_id
;
138 __entry
->dst_id
= cgroup_id(dst_cgrp
);
139 __entry
->dst_level
= dst_cgrp
->level
;
140 __assign_str(dst_path
, path
);
141 __entry
->pid
= task
->pid
;
142 __assign_str(comm
, task
->comm
);
145 TP_printk("dst_root=%d dst_id=%d dst_level=%d dst_path=%s pid=%d comm=%s",
146 __entry
->dst_root
, __entry
->dst_id
, __entry
->dst_level
,
147 __get_str(dst_path
), __entry
->pid
, __get_str(comm
))
150 DEFINE_EVENT(cgroup_migrate
, cgroup_attach_task
,
152 TP_PROTO(struct cgroup
*dst_cgrp
, const char *path
,
153 struct task_struct
*task
, bool threadgroup
),
155 TP_ARGS(dst_cgrp
, path
, task
, threadgroup
)
158 DEFINE_EVENT(cgroup_migrate
, cgroup_transfer_tasks
,
160 TP_PROTO(struct cgroup
*dst_cgrp
, const char *path
,
161 struct task_struct
*task
, bool threadgroup
),
163 TP_ARGS(dst_cgrp
, path
, task
, threadgroup
)
166 DECLARE_EVENT_CLASS(cgroup_event
,
168 TP_PROTO(struct cgroup
*cgrp
, const char *path
, int val
),
170 TP_ARGS(cgrp
, path
, val
),
175 __field( int, level
)
176 __string( path
, path
)
181 __entry
->root
= cgrp
->root
->hierarchy_id
;
182 __entry
->id
= cgroup_id(cgrp
);
183 __entry
->level
= cgrp
->level
;
184 __assign_str(path
, path
);
188 TP_printk("root=%d id=%d level=%d path=%s val=%d",
189 __entry
->root
, __entry
->id
, __entry
->level
, __get_str(path
),
193 DEFINE_EVENT(cgroup_event
, cgroup_notify_populated
,
195 TP_PROTO(struct cgroup
*cgrp
, const char *path
, int val
),
197 TP_ARGS(cgrp
, path
, val
)
200 DEFINE_EVENT(cgroup_event
, cgroup_notify_frozen
,
202 TP_PROTO(struct cgroup
*cgrp
, const char *path
, int val
),
204 TP_ARGS(cgrp
, path
, val
)
207 #endif /* _TRACE_CGROUP_H */
209 /* This part must be outside protection */
210 #include <trace/define_trace.h>