X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fkernel-ctl%2Fkernel-ctl.c;h=5f25adf02dc269debabcbdad5d04729ec0d46eb3;hp=3d12df4177db3f686dc482562fab286473efd487;hb=99930a9d179c900b48dd2bd033abee425775c22a;hpb=5226f1bc2f82f9c68e974a6e49a7bcdb547f6a55 diff --git a/src/common/kernel-ctl/kernel-ctl.c b/src/common/kernel-ctl/kernel-ctl.c index 3d12df417..5f25adf02 100644 --- a/src/common/kernel-ctl/kernel-ctl.c +++ b/src/common/kernel-ctl/kernel-ctl.c @@ -22,9 +22,11 @@ #include #include #include +#include #include #include #include +#include #include "kernel-ctl.h" #include "kernel-ioctl.h" @@ -89,10 +91,12 @@ int kernctl_create_session(int fd) /* open the metadata global channel */ int kernctl_open_metadata(int fd, struct lttng_channel_attr *chops) { - struct lttng_kernel_old_channel old_channel; struct lttng_kernel_channel channel; if (lttng_kernel_use_old_abi) { + struct lttng_kernel_old_channel old_channel; + + memset(&old_channel, 0, sizeof(old_channel)); old_channel.overwrite = chops->overwrite; old_channel.subbuf_size = chops->subbuf_size; old_channel.num_subbuf = chops->num_subbuf; @@ -111,6 +115,7 @@ int kernctl_open_metadata(int fd, struct lttng_channel_attr *chops) &old_channel); } + memset(&channel, 0, sizeof(channel)); channel.overwrite = chops->overwrite; channel.subbuf_size = chops->subbuf_size; channel.num_subbuf = chops->num_subbuf; @@ -225,11 +230,49 @@ int kernctl_list_tracker_pids(int fd) return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS); } -int kernctl_session_metadata_regenerate(int fd) +int kernctl_session_regenerate_metadata(int fd) { return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_METADATA_REGEN); } +int kernctl_session_regenerate_statedump(int fd) +{ + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_STATEDUMP); +} + +int kernctl_session_set_name(int fd, const char *name) +{ + int ret; + struct lttng_kernel_session_name session_name; + + ret = lttng_strncpy(session_name.name, name, sizeof(session_name.name)); + if (ret) { + goto end; + } + + ret = LTTNG_IOCTL_CHECK( + fd, LTTNG_KERNEL_SESSION_SET_NAME, &session_name); +end: + return ret; +} + +int kernctl_session_set_creation_time(int fd, time_t time) +{ + int ret; + struct lttng_kernel_session_creation_time creation_time; + + ret = time_to_iso8601_str(time, creation_time.iso8601, + sizeof(creation_time.iso8601)); + if (ret) { + goto end; + } + + ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_SET_CREATION_TIME, + &creation_time); +end: + return ret; +} + int kernctl_create_stream(int fd) { return compat_ioctl_no_arg(fd, LTTNG_KERNEL_OLD_STREAM, @@ -241,6 +284,7 @@ int kernctl_create_event(int fd, struct lttng_kernel_event *ev) if (lttng_kernel_use_old_abi) { struct lttng_kernel_old_event old_event; + memset(&old_event, 0, sizeof(old_event)); memcpy(old_event.name, ev->name, sizeof(old_event.name)); old_event.instrumentation = ev->instrumentation; switch (ev->instrumentation) { @@ -278,6 +322,7 @@ int kernctl_add_context(int fd, struct lttng_kernel_context *ctx) if (lttng_kernel_use_old_abi) { struct lttng_kernel_old_context old_ctx; + memset(&old_ctx, 0, sizeof(old_ctx)); old_ctx.ctx = ctx->ctx; /* only type that uses the union */ if (ctx->ctx == LTTNG_KERNEL_CONTEXT_PERF_CPU_COUNTER) { @@ -340,6 +385,11 @@ int kernctl_filter(int fd, struct lttng_filter_bytecode *filter) return ret; } +int kernctl_add_callsite(int fd, struct lttng_kernel_event_callsite *callsite) +{ + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ADD_CALLSITE, callsite); +} + int kernctl_tracepoint_list(int fd) { return compat_ioctl_no_arg(fd, LTTNG_KERNEL_OLD_TRACEPOINT_LIST, @@ -393,40 +443,19 @@ int kernctl_wait_quiescent(int fd) LTTNG_KERNEL_WAIT_QUIESCENT); } -int kernctl_calibrate(int fd, struct lttng_kernel_calibrate *calibrate) +int kernctl_buffer_flush(int fd) { - int ret; - - if (lttng_kernel_use_old_abi == -1) { - ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_CALIBRATE, calibrate); - if (!ret) { - lttng_kernel_use_old_abi = 0; - goto end; - } - lttng_kernel_use_old_abi = 1; - } - if (lttng_kernel_use_old_abi) { - struct lttng_kernel_old_calibrate old_calibrate; - - old_calibrate.type = calibrate->type; - ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_OLD_CALIBRATE, - &old_calibrate); - if (ret) { - goto end; - } - calibrate->type = old_calibrate.type; - } else { - ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_CALIBRATE, calibrate); - } - -end: - return ret; + return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_FLUSH); } +int kernctl_buffer_flush_empty(int fd) +{ + return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_FLUSH_EMPTY); +} -int kernctl_buffer_flush(int fd) +int kernctl_buffer_clear(int fd) { - return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_FLUSH); + return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_CLEAR); } /* returns the version of the metadata. */ @@ -435,6 +464,10 @@ int kernctl_get_metadata_version(int fd, uint64_t *version) return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_GET_METADATA_VERSION, version); } +int kernctl_metadata_cache_dump(int fd) +{ + return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_METADATA_CACHE_DUMP); +} /* Buffer operations */ @@ -496,6 +529,16 @@ int kernctl_snapshot(int fd) return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_SNAPSHOT); } +/* + * Get a snapshot of the current ring buffer producer and consumer positions, + * regardless of whether or not the two positions are contained within the + * same sub-buffer. + */ +int kernctl_snapshot_sample_positions(int fd) +{ + return LTTNG_IOCTL_CHECK(fd, RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS); +} + /* Get the consumer position (iteration start) */ int kernctl_snapshot_get_consumed(int fd, unsigned long *pos) {