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
),
64 __dynamic_array(char, path
,
65 cgroup_path(cgrp
, NULL
, 0) + 1)
69 __entry
->root
= cgrp
->root
->hierarchy_id
;
70 __entry
->id
= cgrp
->id
;
71 __entry
->level
= cgrp
->level
;
72 cgroup_path(cgrp
, __get_dynamic_array(path
),
73 __get_dynamic_array_len(path
));
76 TP_printk("root=%d id=%d level=%d path=%s",
77 __entry
->root
, __entry
->id
, __entry
->level
, __get_str(path
))
80 DEFINE_EVENT(cgroup
, cgroup_mkdir
,
82 TP_PROTO(struct cgroup
*cgroup
),
87 DEFINE_EVENT(cgroup
, cgroup_rmdir
,
89 TP_PROTO(struct cgroup
*cgroup
),
94 DEFINE_EVENT(cgroup
, cgroup_release
,
96 TP_PROTO(struct cgroup
*cgroup
),
101 DEFINE_EVENT(cgroup
, cgroup_rename
,
103 TP_PROTO(struct cgroup
*cgroup
),
108 DECLARE_EVENT_CLASS(cgroup_migrate
,
110 TP_PROTO(struct cgroup
*dst_cgrp
, struct task_struct
*task
, bool threadgroup
),
112 TP_ARGS(dst_cgrp
, task
, threadgroup
),
115 __field( int, dst_root
)
116 __field( int, dst_id
)
117 __field( int, dst_level
)
118 __dynamic_array(char, dst_path
,
119 cgroup_path(dst_cgrp
, NULL
, 0) + 1)
121 __string( comm
, task
->comm
)
125 __entry
->dst_root
= dst_cgrp
->root
->hierarchy_id
;
126 __entry
->dst_id
= dst_cgrp
->id
;
127 __entry
->dst_level
= dst_cgrp
->level
;
128 cgroup_path(dst_cgrp
, __get_dynamic_array(dst_path
),
129 __get_dynamic_array_len(dst_path
));
130 __entry
->pid
= task
->pid
;
131 __assign_str(comm
, task
->comm
);
134 TP_printk("dst_root=%d dst_id=%d dst_level=%d dst_path=%s pid=%d comm=%s",
135 __entry
->dst_root
, __entry
->dst_id
, __entry
->dst_level
,
136 __get_str(dst_path
), __entry
->pid
, __get_str(comm
))
139 DEFINE_EVENT(cgroup_migrate
, cgroup_attach_task
,
141 TP_PROTO(struct cgroup
*dst_cgrp
, struct task_struct
*task
, bool threadgroup
),
143 TP_ARGS(dst_cgrp
, task
, threadgroup
)
146 DEFINE_EVENT(cgroup_migrate
, cgroup_transfer_tasks
,
148 TP_PROTO(struct cgroup
*dst_cgrp
, struct task_struct
*task
, bool threadgroup
),
150 TP_ARGS(dst_cgrp
, task
, threadgroup
)
153 #endif /* _TRACE_CGROUP_H */
155 /* This part must be outside protection */
156 #include <trace/define_trace.h>