From 0def91708e136463a7e19e322932844e596a02db Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 2 Nov 2021 16:58:34 -0400 Subject: [PATCH] Refactoring: introduce lttng_get_event_ht_from_enabler Signed-off-by: Mathieu Desnoyers Change-Id: I82759291c892c0d0c8b7a7c6be4a32ec8fac0dcd --- include/lttng/events-internal.h | 21 +++++++++++++++++++++ src/lttng-events.c | 20 ++++++++------------ src/lttng-syscalls.c | 14 ++++++-------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/include/lttng/events-internal.h b/include/lttng/events-internal.h index 3c741e66..8bfe094a 100644 --- a/include/lttng/events-internal.h +++ b/include/lttng/events-internal.h @@ -594,6 +594,27 @@ struct lttng_event_enabler_common *lttng_event_notifier_enabler_as_enabler( return &event_notifier_enabler->parent; } +static inline +struct lttng_event_ht *lttng_get_event_ht_from_enabler(struct lttng_event_enabler_common *event_enabler) +{ + switch (event_enabler->enabler_type) { + case LTTNG_EVENT_ENABLER_TYPE_RECORDER: + { + struct lttng_event_recorder_enabler *event_recorder_enabler = + container_of(event_enabler, struct lttng_event_recorder_enabler, parent); + return &event_recorder_enabler->chan->parent.session->priv->events_ht; + } + case LTTNG_EVENT_ENABLER_TYPE_NOTIFIER: + { + struct lttng_event_notifier_enabler *event_notifier_enabler = + container_of(event_enabler, struct lttng_event_notifier_enabler, parent); + return &event_notifier_enabler->group->events_ht; + } + default: + return NULL; + } +} + int lttng_context_init(void); void lttng_context_exit(void); int lttng_kernel_context_append(struct lttng_kernel_ctx **ctx_p, diff --git a/src/lttng-events.c b/src/lttng-events.c index b6fbd347..039b43e6 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -875,10 +875,10 @@ void _lttng_metadata_channel_hangup(struct lttng_metadata_stream *stream) struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct lttng_event_recorder_enabler *event_enabler, const struct lttng_kernel_event_desc *event_desc) { + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_enabler->parent); struct lttng_kernel_channel_buffer *chan = event_enabler->chan; struct lttng_kernel_abi_event *event_param = &event_enabler->parent.event_param; enum lttng_kernel_abi_instrumentation itype = event_param->instrumentation; - struct lttng_kernel_session *session = chan->parent.session; struct lttng_kernel_event_recorder *event_recorder; struct lttng_kernel_event_recorder_private *event_recorder_priv; struct lttng_kernel_event_common_private *event_priv; @@ -916,8 +916,7 @@ struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l goto type_error; } - head = utils_borrow_hash_table_bucket(session->priv->events_ht.table, - LTTNG_EVENT_HT_SIZE, event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { event_recorder_priv = container_of(event_priv, struct lttng_kernel_event_recorder_private, parent); @@ -1157,6 +1156,7 @@ full: struct lttng_kernel_event_notifier *_lttng_event_notifier_create(struct lttng_event_notifier_enabler *event_enabler, const struct lttng_kernel_event_desc *event_desc) { + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_enabler->parent); struct lttng_event_notifier_group *event_notifier_group = event_enabler->group; struct lttng_kernel_abi_event *event_param = &event_enabler->parent.event_param; uint64_t token = event_enabler->parent.user_token; @@ -1194,8 +1194,7 @@ struct lttng_kernel_event_notifier *_lttng_event_notifier_create(struct lttng_ev goto type_error; } - head = utils_borrow_hash_table_bucket(event_notifier_group->events_ht.table, - LTTNG_EVENT_HT_SIZE, event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { event_notifier_priv = container_of(event_priv, struct lttng_kernel_event_notifier_private, parent); @@ -2061,7 +2060,7 @@ struct lttng_enabler_ref *lttng_enabler_ref( static void lttng_create_tracepoint_event_if_missing(struct lttng_event_recorder_enabler *event_enabler) { - struct lttng_kernel_session *session = event_enabler->chan->parent.session; + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_enabler->parent); struct lttng_kernel_probe_desc *probe_desc; const struct lttng_kernel_event_desc *desc; int i; @@ -2089,9 +2088,7 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_recorder_enable /* * Check if already created. */ - head = utils_borrow_hash_table_bucket( - session->priv->events_ht.table, LTTNG_EVENT_HT_SIZE, - desc->event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { event_recorder_priv = container_of(event_priv, struct lttng_kernel_event_recorder_private, parent); if (event_priv->desc == desc @@ -2117,7 +2114,7 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_recorder_enable static void lttng_create_tracepoint_event_notifier_if_missing(struct lttng_event_notifier_enabler *event_notifier_enabler) { - struct lttng_event_notifier_group *event_notifier_group = event_notifier_enabler->group; + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_notifier_enabler->parent); struct lttng_kernel_probe_desc *probe_desc; const struct lttng_kernel_event_desc *desc; int i; @@ -2144,8 +2141,7 @@ void lttng_create_tracepoint_event_notifier_if_missing(struct lttng_event_notifi /* * Check if already created. */ - head = utils_borrow_hash_table_bucket( - event_notifier_group->events_ht.table, + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { if (event_priv->desc == desc diff --git a/src/lttng-syscalls.c b/src/lttng-syscalls.c index 7fa6d7e5..82829dcb 100644 --- a/src/lttng-syscalls.c +++ b/src/lttng-syscalls.c @@ -536,9 +536,9 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl struct hlist_head *chan_table, struct lttng_event_recorder_enabler *syscall_event_enabler, enum sc_type type) { + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&syscall_event_enabler->parent); struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(&syscall_event_enabler->parent); struct lttng_kernel_channel_buffer *chan = syscall_event_enabler->chan; - struct lttng_kernel_session *session = chan->parent.session; unsigned int i; /* Allocate events for each syscall matching enabler, insert into table */ @@ -561,9 +561,7 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl /* * Check if already created. */ - head = utils_borrow_hash_table_bucket( - session->priv->events_ht.table, LTTNG_EVENT_HT_SIZE, - desc->event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { if (event_priv->desc == desc && get_syscall_table_from_event(event_priv->pub) == syscall_table) @@ -832,6 +830,7 @@ int create_unknown_event_notifier( struct lttng_event_notifier_enabler *event_notifier_enabler, enum sc_type type) { + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_notifier_enabler->parent); struct lttng_kernel_event_common_private *event_priv; struct lttng_kernel_event_notifier *event_notifier; const struct lttng_kernel_event_desc *desc; @@ -881,8 +880,7 @@ int create_unknown_event_notifier( /* * Check if already created. */ - head = utils_borrow_hash_table_bucket(group->events_ht.table, - LTTNG_EVENT_HT_SIZE, desc->event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { if (event_priv->desc == desc && event_priv->user_token == base_enabler->user_token) @@ -926,6 +924,7 @@ static int create_matching_event_notifiers( const struct trace_syscall_entry *table, size_t table_len, enum sc_type type) { + struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&syscall_event_notifier_enabler->parent); struct lttng_event_notifier_group *group = syscall_event_notifier_enabler->group; const struct lttng_kernel_event_desc *desc; uint64_t user_token = syscall_event_notifier_enabler->parent.user_token; @@ -955,8 +954,7 @@ static int create_matching_event_notifiers( /* * Check if already created. */ - head = utils_borrow_hash_table_bucket(group->events_ht.table, - LTTNG_EVENT_HT_SIZE, desc->event_name); + head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { if (event_priv->desc == desc && event_priv->user_token == syscall_event_notifier_enabler->parent.user_token) -- 2.34.1