From 49926dbd13cfcb46f6947b7e99bc2999c06dc743 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 15 Mar 2021 22:50:28 -0400 Subject: [PATCH] Refactoring: struct lttng_channel_ops - Namespace this structure with lttng_ust_ prefix, - Use struct_size extensibility scheme. There was no prior padding, so extensibility was an issue in the past. Signed-off-by: Mathieu Desnoyers Change-Id: Ie8334f5f651f100aaea60ee83d3c8e2b6b300a5a --- include/lttng/ust-events.h | 12 ++++++++++-- liblttng-ust/lttng-ring-buffer-client.h | 1 + liblttng-ust/lttng-ring-buffer-metadata-client.h | 4 ++-- liblttng-ust/ust-events-internal.h | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h index 164c82c4..d070a3cc 100644 --- a/include/lttng/ust-events.h +++ b/include/lttng/ust-events.h @@ -498,8 +498,14 @@ struct lttng_ust_shm_handle; * IMPORTANT: this structure is part of the ABI between the probe and * UST. Fields need to be only added at the end, never reordered, never * removed. + * + * The field @struct_size should be used to determine the size of the + * structure. It should be queried before using additional fields added + * at the end of the structure. */ -struct lttng_channel_ops { +struct lttng_ust_channel_ops { + uint32_t struct_size; + struct lttng_channel *(*channel_create)(const char *name, void *buf_addr, size_t subbuf_size, size_t num_subbuf, @@ -527,6 +533,8 @@ struct lttng_channel_ops { int (*flush_buffer)(struct channel *chan, struct lttng_ust_shm_handle *handle); void (*event_strcpy)(struct lttng_ust_lib_ring_buffer_ctx *ctx, const char *src, size_t len); + + /* End of base ABI. Fields below should be used after checking struct_size. */ }; /* @@ -548,7 +556,7 @@ struct lttng_channel { struct lttng_session *session; int objd; /* Object associated to channel */ struct cds_list_head node; /* Channel list in session */ - const struct lttng_channel_ops *ops; + const struct lttng_ust_channel_ops *ops; int header_type; /* 0: unset, 1: compact, 2: large */ struct lttng_ust_shm_handle *handle; /* shared-memory handle */ diff --git a/liblttng-ust/lttng-ring-buffer-client.h b/liblttng-ust/lttng-ring-buffer-client.h index 9cc862cf..c3b77182 100644 --- a/liblttng-ust/lttng-ring-buffer-client.h +++ b/liblttng-ust/lttng-ring-buffer-client.h @@ -792,6 +792,7 @@ int lttng_flush_buffer(struct channel *chan, struct lttng_ust_shm_handle *handle static struct lttng_transport lttng_relay_transport = { .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING "-mmap", .ops = { + .struct_size = sizeof(struct lttng_ust_channel_ops), .channel_create = _channel_create, .channel_destroy = lttng_channel_destroy, .event_reserve = lttng_event_reserve, diff --git a/liblttng-ust/lttng-ring-buffer-metadata-client.h b/liblttng-ust/lttng-ring-buffer-metadata-client.h index 5a3840c8..bb5c5dfe 100644 --- a/liblttng-ust/lttng-ring-buffer-metadata-client.h +++ b/liblttng-ust/lttng-ring-buffer-metadata-client.h @@ -314,14 +314,14 @@ int lttng_flush_buffer(struct channel *chan, struct lttng_ust_shm_handle *handle static struct lttng_transport lttng_relay_transport = { .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING "-mmap", .ops = { + .struct_size = sizeof(struct lttng_ust_channel_ops), + .channel_create = _channel_create, .channel_destroy = lttng_channel_destroy, .event_reserve = lttng_event_reserve, .event_commit = lttng_event_commit, .event_write = lttng_event_write, .packet_avail_size = lttng_packet_avail_size, - //.get_reader_wait_queue = lttng_get_reader_wait_queue, - //.get_hp_wait_queue = lttng_get_hp_wait_queue, .is_finalized = lttng_is_finalized, .is_disabled = lttng_is_disabled, .flush_buffer = lttng_flush_buffer, diff --git a/liblttng-ust/ust-events-internal.h b/liblttng-ust/ust-events-internal.h index f351e954..a3146b37 100644 --- a/liblttng-ust/ust-events-internal.h +++ b/liblttng-ust/ust-events-internal.h @@ -189,7 +189,7 @@ struct lttng_event_notifier_group { struct lttng_transport { char *name; struct cds_list_head node; - struct lttng_channel_ops ops; + struct lttng_ust_channel_ops ops; const struct lttng_ust_lib_ring_buffer_config *client_config; }; -- 2.34.1