+/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM lttng_statedump
-#if !defined(_TRACE_LTTNG_STATEDUMP_H) || defined(TRACE_HEADER_MULTI_READ)
-#define _TRACE_LTTNG_STATEDUMP_H
+#if !defined(LTTNG_TRACE_LTTNG_STATEDUMP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define LTTNG_TRACE_LTTNG_STATEDUMP_H
-#include <linux/tracepoint.h>
+#include <probes/lttng-tracepoint-event.h>
+#include <linux/nsproxy.h>
+#include <linux/pid_namespace.h>
+#include <linux/types.h>
+#include <linux/version.h>
-TRACE_EVENT(lttng_statedump_start,
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0))
+#define lttng_proc_inum ns.inum
+#else
+#define lttng_proc_inum proc_inum
+#endif
+
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_start,
TP_PROTO(struct lttng_session *session),
TP_ARGS(session),
- TP_STRUCT__entry(
- ),
- TP_fast_assign(
- ),
- TP_printk("")
+ TP_FIELDS()
)
-TRACE_EVENT(lttng_statedump_end,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_end,
TP_PROTO(struct lttng_session *session),
TP_ARGS(session),
- TP_STRUCT__entry(
- ),
- TP_fast_assign(
- ),
- TP_printk("")
+ TP_FIELDS()
)
-TRACE_EVENT(lttng_statedump_process_state,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_state,
TP_PROTO(struct lttng_session *session,
struct task_struct *p,
- int type, int mode, int submode, int status),
- TP_ARGS(session, p, type, mode, submode, status),
- TP_STRUCT__entry(
- __field(pid_t, tid)
- __field(pid_t, vtid)
- __field(pid_t, pid)
- __field(pid_t, vpid)
- __field(pid_t, ppid)
- __field(pid_t, vppid)
- __array_text(char, name, TASK_COMM_LEN)
- __field(int, type)
- __field(int, mode)
- __field(int, submode)
- __field(int, status)
- ),
- TP_fast_assign(
- tp_assign(tid, p->pid)
- tp_assign(vtid, !p->nsproxy ? 0 : task_pid_vnr(p))
- tp_assign(pid, p->tgid)
- tp_assign(vpid, !p->nsproxy ? 0 : task_tgid_vnr(p))
- tp_assign(ppid,
+ int type, int mode, int submode, int status,
+ struct pid_namespace *pid_ns),
+ TP_ARGS(session, p, type, mode, submode, status, pid_ns),
+ TP_FIELDS(
+ ctf_integer(pid_t, tid, p->pid)
+ ctf_integer(pid_t, vtid, pid_ns ? task_pid_nr_ns(p, pid_ns) : 0)
+ ctf_integer(pid_t, pid, p->tgid)
+ ctf_integer(pid_t, vpid, pid_ns ? task_tgid_nr_ns(p, pid_ns) : 0)
+ ctf_integer(pid_t, ppid,
({
pid_t ret;
rcu_read_unlock();
ret;
}))
- tp_assign(vppid,
+ ctf_integer(pid_t, vppid,
({
struct task_struct *parent;
- pid_t ret;
+ pid_t ret = 0;
- rcu_read_lock();
- parent = rcu_dereference(current->real_parent);
- if (!parent->nsproxy)
- ret = 0;
- else
- ret = task_tgid_nr(parent);
- rcu_read_unlock();
+ if (pid_ns) {
+ rcu_read_lock();
+ parent = rcu_dereference(p->real_parent);
+ ret = task_tgid_nr_ns(parent, pid_ns);
+ rcu_read_unlock();
+ }
ret;
}))
- tp_memcpy(name, p->comm, TASK_COMM_LEN)
- tp_assign(type, type)
- tp_assign(mode, mode)
- tp_assign(submode, submode)
- tp_assign(status, status)
- ),
- TP_printk("")
+ ctf_array_text(char, name, p->comm, TASK_COMM_LEN)
+ ctf_integer(int, type, type)
+ ctf_integer(int, mode, mode)
+ ctf_integer(int, submode, submode)
+ ctf_integer(int, status, status)
+ ctf_integer(int, ns_level, pid_ns ? pid_ns->level : 0)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ ctf_integer(unsigned int, ns_inum, pid_ns ? pid_ns->lttng_proc_inum : 0)
+#endif
+ ctf_integer(unsigned int, cpu, task_cpu(p))
+ )
)
-TRACE_EVENT(lttng_statedump_file_descriptor,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_file_descriptor,
TP_PROTO(struct lttng_session *session,
- struct task_struct *p, int fd, const char *filename),
- TP_ARGS(session, p, fd, filename),
- TP_STRUCT__entry(
- __field(pid_t, pid)
- __field(int, fd)
- __string(filename, filename)
- ),
- TP_fast_assign(
- tp_assign(pid, p->tgid)
- tp_assign(fd, fd)
- tp_strcpy(filename, filename)
- ),
- TP_printk("")
+ struct task_struct *p, int fd, const char *filename,
+ unsigned int flags, fmode_t fmode),
+ TP_ARGS(session, p, fd, filename, flags, fmode),
+ TP_FIELDS(
+ ctf_integer(pid_t, pid, p->tgid)
+ ctf_integer(int, fd, fd)
+ ctf_integer_oct(unsigned int, flags, flags)
+ ctf_integer_hex(fmode_t, fmode, fmode)
+ ctf_string(filename, filename)
+ )
)
-TRACE_EVENT(lttng_statedump_vm_map,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_vm_map,
TP_PROTO(struct lttng_session *session,
struct task_struct *p, struct vm_area_struct *map,
unsigned long inode),
TP_ARGS(session, p, map, inode),
- TP_STRUCT__entry(
- __field(pid_t, pid)
- __field_hex(unsigned long, start)
- __field_hex(unsigned long, end)
- __field_hex(unsigned long, flags)
- __field(unsigned long, inode)
- __field(unsigned long, pgoff)
- ),
- TP_fast_assign(
- tp_assign(pid, p->tgid)
- tp_assign(start, map->vm_start)
- tp_assign(end, map->vm_end)
- tp_assign(flags, map->vm_flags)
- tp_assign(inode, inode)
- tp_assign(pgoff, map->vm_pgoff << PAGE_SHIFT)
- ),
- TP_printk("")
+ TP_FIELDS(
+ ctf_integer(pid_t, pid, p->tgid)
+ ctf_integer_hex(unsigned long, start, map->vm_start)
+ ctf_integer_hex(unsigned long, end, map->vm_end)
+ ctf_integer_hex(unsigned long, flags, map->vm_flags)
+ ctf_integer(unsigned long, inode, inode)
+ ctf_integer(unsigned long, pgoff, map->vm_pgoff << PAGE_SHIFT)
+ )
)
-TRACE_EVENT(lttng_statedump_network_interface,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_network_interface,
TP_PROTO(struct lttng_session *session,
struct net_device *dev, struct in_ifaddr *ifa),
TP_ARGS(session, dev, ifa),
- TP_STRUCT__entry(
- __string(name, dev->name)
- __field_network_hex(uint32_t, address_ipv4)
- ),
- TP_fast_assign(
- tp_strcpy(name, dev->name)
- tp_assign(address_ipv4, ifa ? ifa->ifa_address : 0U)
- ),
- TP_printk("")
+ TP_FIELDS(
+ ctf_string(name, dev->name)
+ ctf_integer_network_hex(uint32_t, address_ipv4,
+ ifa ? ifa->ifa_address : 0U)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_block_device,
+ TP_PROTO(struct lttng_session *session,
+ dev_t dev, const char *diskname),
+ TP_ARGS(session, dev, diskname),
+ TP_FIELDS(
+ ctf_integer(dev_t, dev, dev)
+ ctf_string(diskname, diskname)
+ )
)
/* Called with desc->lock held */
-TRACE_EVENT(lttng_statedump_interrupt,
+LTTNG_TRACEPOINT_EVENT(lttng_statedump_interrupt,
TP_PROTO(struct lttng_session *session,
unsigned int irq, const char *chip_name,
struct irqaction *action),
TP_ARGS(session, irq, chip_name, action),
- TP_STRUCT__entry(
- __field(unsigned int, irq)
- __string(name, chip_name)
- __string(action, action->name)
- ),
- TP_fast_assign(
- tp_assign(irq, irq)
- tp_strcpy(name, chip_name)
- tp_strcpy(action, action->name)
- ),
- TP_printk("")
+ TP_FIELDS(
+ ctf_integer(unsigned int, irq, irq)
+ ctf_string(name, chip_name)
+ ctf_string(action, action->name ? : "")
+ )
)
-#endif /* _TRACE_LTTNG_STATEDUMP_H */
+#endif /* LTTNG_TRACE_LTTNG_STATEDUMP_H */
/* This part must be outside protection */
-#include "../../../probes/define_trace.h"
+#include <probes/define_trace.h>