From a64e63e861abb27c4693390aa73de0f3e7de3ab6 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 4 Jul 2018 16:15:07 -0400 Subject: [PATCH] Backport: trackers: update lttng-modules tracer ABI Signed-off-by: Mathieu Desnoyers --- src/common/kernel-ctl/kernel-ctl.c | 61 ++++++++++++++++++++++++++++ src/common/kernel-ctl/kernel-ctl.h | 4 ++ src/common/kernel-ctl/kernel-ioctl.h | 6 +++ src/common/lttng-kernel.h | 16 ++++++++ 4 files changed, 87 insertions(+) diff --git a/src/common/kernel-ctl/kernel-ctl.c b/src/common/kernel-ctl/kernel-ctl.c index bc52c3e5d..be9d41261 100644 --- a/src/common/kernel-ctl/kernel-ctl.c +++ b/src/common/kernel-ctl/kernel-ctl.c @@ -228,6 +228,67 @@ int kernctl_list_tracker_pids(int fd) return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS); } +static +enum lttng_kernel_tracker_type get_kernel_tracker_type(enum lttng_tracker_type type) +{ + switch (type) { + case LTTNG_TRACKER_PID: + return LTTNG_KERNEL_TRACKER_PID; + case LTTNG_TRACKER_VPID: + return LTTNG_KERNEL_TRACKER_VPID; + case LTTNG_TRACKER_UID: + return LTTNG_KERNEL_TRACKER_UID; + case LTTNG_TRACKER_VUID: + return LTTNG_KERNEL_TRACKER_VUID; + case LTTNG_TRACKER_GID: + return LTTNG_KERNEL_TRACKER_GID; + case LTTNG_TRACKER_VGID: + return LTTNG_KERNEL_TRACKER_VGID; + default: + return LTTNG_KERNEL_TRACKER_UNKNOWN; + } +} + +int kernctl_track_id(int fd, enum lttng_tracker_type tracker_type, int id) +{ + struct lttng_kernel_tracker_args args; + + args.id = id; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_TRACK_ID, &args); +} + +int kernctl_untrack_id(int fd, enum lttng_tracker_type tracker_type, int id) +{ + struct lttng_kernel_tracker_args args; + + args.id = id; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_UNTRACK_ID, &args); +} + +int kernctl_list_tracker_ids(int fd, enum lttng_tracker_type tracker_type) +{ + struct lttng_kernel_tracker_args args; + + args.id = -1; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_IDS, + &args); +} + int kernctl_session_regenerate_metadata(int fd) { return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_METADATA_REGEN); diff --git a/src/common/kernel-ctl/kernel-ctl.h b/src/common/kernel-ctl/kernel-ctl.h index 97b3128d3..8c0ff49e0 100644 --- a/src/common/kernel-ctl/kernel-ctl.h +++ b/src/common/kernel-ctl/kernel-ctl.h @@ -64,6 +64,10 @@ int kernctl_track_pid(int fd, int pid); int kernctl_untrack_pid(int fd, int pid); int kernctl_list_tracker_pids(int fd); +int kernctl_track_id(int fd, enum lttng_tracker_type tracker_type, int id); +int kernctl_untrack_id(int fd, enum lttng_tracker_type tracker_type, int id); +int kernctl_list_tracker_ids(int fd, enum lttng_tracker_type tracker_type); + int kernctl_session_regenerate_metadata(int fd); int kernctl_session_regenerate_statedump(int fd); diff --git a/src/common/kernel-ctl/kernel-ioctl.h b/src/common/kernel-ctl/kernel-ioctl.h index 070357cc6..8aebc1b8b 100644 --- a/src/common/kernel-ctl/kernel-ioctl.h +++ b/src/common/kernel-ctl/kernel-ioctl.h @@ -134,6 +134,12 @@ #define LTTNG_KERNEL_SESSION_METADATA_REGEN _IO(0xF6, 0x59) /* 0x5A and 0x5B are reserved for a future ABI-breaking cleanup. */ #define LTTNG_KERNEL_SESSION_STATEDUMP _IO(0xF6, 0x5C) +#define LTTNG_KERNEL_SESSION_LIST_TRACKER_IDS \ + _IOR(0xF6, 0x5D, struct lttng_kernel_tracker_args) +#define LTTNG_KERNEL_SESSION_TRACK_ID \ + _IOR(0xF6, 0x5E, struct lttng_kernel_tracker_args) +#define LTTNG_KERNEL_SESSION_UNTRACK_ID \ + _IOR(0xF6, 0x5F, struct lttng_kernel_tracker_args) /* Channel FD ioctl */ #define LTTNG_KERNEL_STREAM _IO(0xF6, 0x62) diff --git a/src/common/lttng-kernel.h b/src/common/lttng-kernel.h index 8d87539a4..55e7f0102 100644 --- a/src/common/lttng-kernel.h +++ b/src/common/lttng-kernel.h @@ -157,4 +157,20 @@ struct lttng_kernel_filter_bytecode { char data[0]; } LTTNG_PACKED; +enum lttng_kernel_tracker_type { + LTTNG_KERNEL_TRACKER_UNKNOWN = -1, + + LTTNG_KERNEL_TRACKER_PID = 0, + LTTNG_KERNEL_TRACKER_VPID = 1, + LTTNG_KERNEL_TRACKER_UID = 2, + LTTNG_KERNEL_TRACKER_VUID = 3, + LTTNG_KERNEL_TRACKER_GID = 4, + LTTNG_KERNEL_TRACKER_VGID = 5, +}; + +struct lttng_kernel_tracker_args { + enum lttng_kernel_tracker_type type; + int32_t id; +}; + #endif /* _LTTNG_KERNEL_H */ -- 2.34.1