1 // SPDX-FileCopyrightText: 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
3 // SPDX-License-Identifier: GPL-2.0-only
6 #define TRACE_SYSTEM lttng_statedump
8 #if !defined(LTTNG_TRACE_LTTNG_STATEDUMP_H) || defined(TRACE_HEADER_MULTI_READ)
9 #define LTTNG_TRACE_LTTNG_STATEDUMP_H
11 #include <lttng/tracepoint-event.h>
12 #include <linux/nsproxy.h>
13 #include <linux/cgroup.h>
14 #include <linux/ipc_namespace.h>
15 #include <net/net_namespace.h>
16 #include <linux/pid_namespace.h>
17 #include <linux/user_namespace.h>
18 #include <linux/utsname.h>
19 #include <linux/types.h>
20 #include <linux/user_namespace.h>
22 #include <lttng/kernel-version.h>
24 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0) || \
25 LTTNG_RHEL_KERNEL_RANGE(4,18,0,305,0,0, 4,19,0,0,0,0))
26 #include <linux/time_namespace.h>
29 #ifndef LTTNG_MNT_NS_MISSING_HEADER
30 # ifndef ONCE_LTTNG_FS_MOUNT_H
31 # define ONCE_LTTNG_FS_MOUNT_H
32 # include <../fs/mount.h>
36 LTTNG_TRACEPOINT_EVENT(lttng_statedump_start
,
37 TP_PROTO(struct lttng_kernel_session
*session
),
42 LTTNG_TRACEPOINT_EVENT(lttng_statedump_end
,
43 TP_PROTO(struct lttng_kernel_session
*session
),
48 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_state
,
49 TP_PROTO(struct lttng_kernel_session
*session
,
50 struct task_struct
*p
,
51 int type
, int mode
, int submode
, int status
,
52 struct files_struct
*files
),
53 TP_ARGS(session
, p
, type
, mode
, submode
, status
, files
),
55 ctf_integer(pid_t
, tid
, p
->pid
)
56 ctf_integer(pid_t
, pid
, p
->tgid
)
57 ctf_integer(pid_t
, ppid
,
62 ret
= task_tgid_nr(p
->real_parent
);
66 ctf_array_text(char, name
, p
->comm
, TASK_COMM_LEN
)
67 ctf_integer(int, type
, type
)
68 ctf_integer(int, mode
, mode
)
69 ctf_integer(int, submode
, submode
)
70 ctf_integer(int, status
, status
)
71 ctf_integer(unsigned int, cpu
, task_cpu(p
))
72 ctf_integer_hex(struct files_struct
*, file_table_address
, files
)
76 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0))
77 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_cgroup_ns
,
78 TP_PROTO(struct lttng_kernel_session
*session
,
79 struct task_struct
*p
,
80 struct cgroup_namespace
*cgroup_ns
),
81 TP_ARGS(session
, p
, cgroup_ns
),
83 ctf_integer(pid_t
, tid
, p
->pid
)
84 ctf_integer(unsigned int, ns_inum
, cgroup_ns
? cgroup_ns
->ns
.inum
: 0)
89 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_ipc_ns
,
90 TP_PROTO(struct lttng_kernel_session
*session
,
91 struct task_struct
*p
,
92 struct ipc_namespace
*ipc_ns
),
93 TP_ARGS(session
, p
, ipc_ns
),
95 ctf_integer(pid_t
, tid
, p
->pid
)
96 ctf_integer(unsigned int, ns_inum
, ipc_ns
? ipc_ns
->ns
.inum
: 0)
100 #if !defined(LTTNG_MNT_NS_MISSING_HEADER)
101 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_mnt_ns
,
102 TP_PROTO(struct lttng_kernel_session
*session
,
103 struct task_struct
*p
,
104 struct mnt_namespace
*mnt_ns
),
105 TP_ARGS(session
, p
, mnt_ns
),
107 ctf_integer(pid_t
, tid
, p
->pid
)
108 ctf_integer(unsigned int, ns_inum
, mnt_ns
? mnt_ns
->ns
.inum
: 0)
113 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_net_ns
,
114 TP_PROTO(struct lttng_kernel_session
*session
,
115 struct task_struct
*p
,
117 TP_ARGS(session
, p
, net_ns
),
119 ctf_integer(pid_t
, tid
, p
->pid
)
120 ctf_integer(unsigned int, ns_inum
, net_ns
? net_ns
->ns
.inum
: 0)
124 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_pid_ns
,
125 TP_PROTO(struct lttng_kernel_session
*session
,
126 struct task_struct
*p
,
127 struct pid_namespace
*pid_ns
),
128 TP_ARGS(session
, p
, pid_ns
),
130 ctf_integer(pid_t
, tid
, p
->pid
)
131 ctf_integer(pid_t
, vtid
, pid_ns
? task_pid_nr_ns(p
, pid_ns
) : 0)
132 ctf_integer(pid_t
, vpid
, pid_ns
? task_tgid_nr_ns(p
, pid_ns
) : 0)
133 ctf_integer(pid_t
, vppid
,
135 struct task_struct
*parent
;
140 parent
= rcu_dereference(p
->real_parent
);
141 ret
= task_tgid_nr_ns(parent
, pid_ns
);
146 ctf_integer(int, ns_level
, pid_ns
? pid_ns
->level
: 0)
147 ctf_integer(unsigned int, ns_inum
, pid_ns
? pid_ns
->ns
.inum
: 0)
151 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_user_ns
,
152 TP_PROTO(struct lttng_kernel_session
*session
,
153 struct task_struct
*p
,
154 struct user_namespace
*user_ns
),
155 TP_ARGS(session
, p
, user_ns
),
157 ctf_integer(pid_t
, tid
, p
->pid
)
158 ctf_integer(uid_t
, vuid
, user_ns
? from_kuid_munged(user_ns
, task_cred_xxx(p
, uid
)) : 0)
159 ctf_integer(gid_t
, vgid
, user_ns
? from_kgid_munged(user_ns
, task_cred_xxx(p
, gid
)) : 0)
160 ctf_integer(int, ns_level
, user_ns
? user_ns
->level
: 0)
161 ctf_integer(unsigned int, ns_inum
, user_ns
? user_ns
->ns
.inum
: 0)
165 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_uts_ns
,
166 TP_PROTO(struct lttng_kernel_session
*session
,
167 struct task_struct
*p
,
168 struct uts_namespace
*uts_ns
),
169 TP_ARGS(session
, p
, uts_ns
),
171 ctf_integer(pid_t
, tid
, p
->pid
)
172 ctf_integer(unsigned int, ns_inum
, uts_ns
? uts_ns
->ns
.inum
: 0)
176 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0) || \
177 LTTNG_RHEL_KERNEL_RANGE(4,18,0,305,0,0, 4,19,0,0,0,0))
178 LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_time_ns
,
179 TP_PROTO(struct lttng_kernel_session
*session
,
180 struct task_struct
*p
,
181 struct time_namespace
*time_ns
),
182 TP_ARGS(session
, p
, time_ns
),
184 ctf_integer(pid_t
, tid
, p
->pid
)
185 ctf_integer(unsigned int, ns_inum
, time_ns
? time_ns
->ns
.inum
: 0)
190 LTTNG_TRACEPOINT_EVENT(lttng_statedump_file_descriptor
,
191 TP_PROTO(struct lttng_kernel_session
*session
,
192 struct files_struct
*files
,
193 int fd
, const char *filename
,
194 unsigned int flags
, fmode_t fmode
),
195 TP_ARGS(session
, files
, fd
, filename
, flags
, fmode
),
197 ctf_integer_hex(struct files_struct
*, file_table_address
, files
)
198 ctf_integer(int, fd
, fd
)
199 ctf_integer_oct(unsigned int, flags
, flags
)
200 ctf_integer_hex(fmode_t
, fmode
, fmode
)
201 ctf_string(filename
, filename
)
205 LTTNG_TRACEPOINT_EVENT(lttng_statedump_vm_map
,
206 TP_PROTO(struct lttng_kernel_session
*session
,
207 struct task_struct
*p
, struct vm_area_struct
*map
,
208 unsigned long inode
),
209 TP_ARGS(session
, p
, map
, inode
),
211 ctf_integer(pid_t
, pid
, p
->tgid
)
212 ctf_integer_hex(unsigned long, start
, map
->vm_start
)
213 ctf_integer_hex(unsigned long, end
, map
->vm_end
)
214 ctf_integer_hex(unsigned long, flags
, map
->vm_flags
)
215 ctf_integer(unsigned long, inode
, inode
)
216 ctf_integer(unsigned long, pgoff
, map
->vm_pgoff
<< PAGE_SHIFT
)
220 LTTNG_TRACEPOINT_EVENT(lttng_statedump_network_interface
,
221 TP_PROTO(struct lttng_kernel_session
*session
,
222 struct net_device
*dev
, struct in_ifaddr
*ifa
),
223 TP_ARGS(session
, dev
, ifa
),
225 ctf_string(name
, dev
->name
)
226 ctf_integer_network_hex(uint32_t, address_ipv4
,
227 ifa
? ifa
->ifa_address
: 0U)
231 LTTNG_TRACEPOINT_EVENT(lttng_statedump_block_device
,
232 TP_PROTO(struct lttng_kernel_session
*session
,
233 dev_t dev
, const char *diskname
),
234 TP_ARGS(session
, dev
, diskname
),
236 ctf_integer(dev_t
, dev
, dev
)
237 ctf_string(diskname
, diskname
)
241 /* Called with desc->lock held */
242 LTTNG_TRACEPOINT_EVENT(lttng_statedump_interrupt
,
243 TP_PROTO(struct lttng_kernel_session
*session
,
244 unsigned int irq
, const char *chip_name
,
245 struct irqaction
*action
),
246 TP_ARGS(session
, irq
, chip_name
, action
),
248 ctf_integer(unsigned int, irq
, irq
)
249 ctf_string(name
, chip_name
)
250 ctf_string(action
, action
->name
? : "")
251 ctf_integer(pid_t
, tid
, action
->thread
? action
->thread
->pid
: 0)
255 #if defined(CONFIG_X86_32) || defined(CONFIG_X86_64)
257 #define LTTNG_HAVE_STATEDUMP_CPU_TOPOLOGY
259 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,7,0) || \
260 LTTNG_RHEL_KERNEL_RANGE(5,14,0,452,0,0, 5,15,0,0,0,0))
261 LTTNG_TRACEPOINT_EVENT(lttng_statedump_cpu_topology
,
262 TP_PROTO(struct lttng_kernel_session
*session
, struct cpuinfo_x86
*c
),
265 ctf_string(architecture
, "x86")
266 ctf_integer(uint16_t, cpu_id
, c
->cpu_index
)
267 ctf_string(vendor
, c
->x86_vendor_id
[0] ? c
->x86_vendor_id
: "unknown")
268 ctf_integer(uint8_t, family
, c
->x86
)
269 ctf_integer(uint8_t, model
, c
->x86_model
)
270 ctf_string(model_name
, c
->x86_model_id
[0] ? c
->x86_model_id
: "unknown")
271 ctf_integer(uint16_t, physical_id
, c
->topo
.pkg_id
)
272 ctf_integer(uint16_t, core_id
, c
->topo
.core_id
)
273 ctf_integer(uint16_t, cores
, c
->booted_cores
)
277 LTTNG_TRACEPOINT_EVENT(lttng_statedump_cpu_topology
,
278 TP_PROTO(struct lttng_kernel_session
*session
, struct cpuinfo_x86
*c
),
281 ctf_string(architecture
, "x86")
282 ctf_integer(uint16_t, cpu_id
, c
->cpu_index
)
283 ctf_string(vendor
, c
->x86_vendor_id
[0] ? c
->x86_vendor_id
: "unknown")
284 ctf_integer(uint8_t, family
, c
->x86
)
285 ctf_integer(uint8_t, model
, c
->x86_model
)
286 ctf_string(model_name
, c
->x86_model_id
[0] ? c
->x86_model_id
: "unknown")
287 ctf_integer(uint16_t, physical_id
, c
->phys_proc_id
)
288 ctf_integer(uint16_t, core_id
, c
->cpu_core_id
)
289 ctf_integer(uint16_t, cores
, c
->booted_cores
)
292 #endif /* LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,7,0) */
294 #endif /* CONFIG_X86_32 || CONFIG_X86_64 */
296 #endif /* LTTNG_TRACE_LTTNG_STATEDUMP_H */
298 /* This part must be outside protection */
299 #include <lttng/define_trace.h>