From: Mathieu Desnoyers Date: Mon, 1 Nov 2021 18:31:51 +0000 (-0400) Subject: Refactoring: combine event notifier notifier and recorder enable/disable X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=7b25ab0ebebea6eef31b687292db60eab4c6babc;p=lttng-modules.git Refactoring: combine event notifier notifier and recorder enable/disable Signed-off-by: Mathieu Desnoyers Change-Id: Ia6cffc5bb36b91c5a5c289c1d1b13accb55dcce3 --- diff --git a/include/lttng/events-internal.h b/include/lttng/events-internal.h index a9121a1b..8ac1b01b 100644 --- a/include/lttng/events-internal.h +++ b/include/lttng/events-internal.h @@ -787,18 +787,14 @@ void lttng_event_enabler_session_add(struct lttng_kernel_session *session, struct lttng_event_recorder_enabler *event_enabler); void lttng_event_enabler_destroy(struct lttng_event_recorder_enabler *event_enabler); -int lttng_event_enabler_enable(struct lttng_event_recorder_enabler *event_enabler); -int lttng_event_enabler_disable(struct lttng_event_recorder_enabler *event_enabler); +int lttng_event_enabler_enable(struct lttng_event_enabler_common *event_enabler); +int lttng_event_enabler_disable(struct lttng_event_enabler_common *event_enabler); + struct lttng_event_notifier_enabler *lttng_event_notifier_enabler_create( struct lttng_event_notifier_group *event_notifier_group, enum lttng_enabler_format_type format_type, struct lttng_kernel_abi_event_notifier *event_notifier_param); -int lttng_event_notifier_enabler_enable( - struct lttng_event_notifier_enabler *event_notifier_enabler); -int lttng_event_notifier_enabler_disable( - struct lttng_event_notifier_enabler *event_notifier_enabler); - int lttng_event_enabler_attach_filter_bytecode(struct lttng_event_enabler_common *event_enabler, struct lttng_kernel_abi_filter_bytecode __user *bytecode); int lttng_event_notifier_enabler_attach_capture_bytecode( diff --git a/src/lttng-abi.c b/src/lttng-abi.c index 6a1954d3..8eeb632a 100644 --- a/src/lttng-abi.c +++ b/src/lttng-abi.c @@ -1987,9 +1987,9 @@ long lttng_event_notifier_enabler_ioctl(struct file *file, unsigned int cmd, uns switch (cmd) { case LTTNG_KERNEL_ABI_ENABLE: - return lttng_event_notifier_enabler_enable(event_notifier_enabler); + return lttng_event_enabler_enable(&event_notifier_enabler->parent); case LTTNG_KERNEL_ABI_DISABLE: - return lttng_event_notifier_enabler_disable(event_notifier_enabler); + return lttng_event_enabler_disable(&event_notifier_enabler->parent); case LTTNG_KERNEL_ABI_FILTER: return lttng_event_enabler_attach_filter_bytecode(&event_notifier_enabler->parent, (struct lttng_kernel_abi_filter_bytecode __user *) arg); @@ -2714,10 +2714,10 @@ long lttng_event_recorder_enabler_ioctl(struct file *file, unsigned int cmd, uns } case LTTNG_KERNEL_ABI_OLD_ENABLE: case LTTNG_KERNEL_ABI_ENABLE: - return lttng_event_enabler_enable(event_enabler); + return lttng_event_enabler_enable(&event_enabler->parent); case LTTNG_KERNEL_ABI_OLD_DISABLE: case LTTNG_KERNEL_ABI_DISABLE: - return lttng_event_enabler_disable(event_enabler); + return lttng_event_enabler_disable(&event_enabler->parent); case LTTNG_KERNEL_ABI_FILTER: return lttng_event_enabler_attach_filter_bytecode(&event_enabler->parent, (struct lttng_kernel_abi_filter_bytecode __user *) arg); diff --git a/src/lttng-events.c b/src/lttng-events.c index ffec2b85..f864eaba 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -68,6 +68,7 @@ static void lttng_session_lazy_sync_event_enablers(struct lttng_kernel_session * static void lttng_session_sync_event_enablers(struct lttng_kernel_session *session); static void lttng_event_notifier_enabler_destroy(struct lttng_event_notifier_enabler *event_notifier_enabler); static void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group *event_notifier_group); +static void lttng_event_enabler_sync(struct lttng_event_enabler_common *event_enabler); static void _lttng_event_destroy(struct lttng_kernel_event_common *event); static void _lttng_channel_destroy(struct lttng_kernel_channel_buffer *chan); @@ -2503,20 +2504,20 @@ void lttng_event_enabler_session_add(struct lttng_kernel_session *session, mutex_unlock(&sessions_mutex); } -int lttng_event_enabler_enable(struct lttng_event_recorder_enabler *event_enabler) +int lttng_event_enabler_enable(struct lttng_event_enabler_common *event_enabler) { mutex_lock(&sessions_mutex); - lttng_event_recorder_enabler_as_enabler(event_enabler)->enabled = 1; - lttng_session_lazy_sync_event_enablers(event_enabler->chan->parent.session); + event_enabler->enabled = 1; + lttng_event_enabler_sync(event_enabler); mutex_unlock(&sessions_mutex); return 0; } -int lttng_event_enabler_disable(struct lttng_event_recorder_enabler *event_enabler) +int lttng_event_enabler_disable(struct lttng_event_enabler_common *event_enabler) { mutex_lock(&sessions_mutex); - lttng_event_recorder_enabler_as_enabler(event_enabler)->enabled = 0; - lttng_session_lazy_sync_event_enablers(event_enabler->chan->parent.session); + event_enabler->enabled = 0; + lttng_event_enabler_sync(event_enabler); mutex_unlock(&sessions_mutex); return 0; } @@ -2561,26 +2562,7 @@ int lttng_event_enabler_attach_filter_bytecode(struct lttng_event_enabler_common ret = lttng_enabler_attach_filter_bytecode(event_enabler, bytecode); if (ret) goto error; - - 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); - lttng_session_lazy_sync_event_enablers(event_recorder_enabler->chan->parent.session); - break; - } - case LTTNG_EVENT_ENABLER_TYPE_NOTIFIER: - { - struct lttng_event_notifier_enabler *event_notifier_enabler = - container_of(event_enabler, struct lttng_event_notifier_enabler, parent); - lttng_event_notifier_group_sync_enablers(event_notifier_enabler->group); - break; - } - default: - WARN_ON_ONCE(1); - return -ENOSYS; - } + lttng_event_enabler_sync(event_enabler); return 0; error: @@ -2914,6 +2896,29 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group } } +static +void lttng_event_enabler_sync(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); + lttng_session_lazy_sync_event_enablers(event_recorder_enabler->chan->parent.session); + break; + } + case LTTNG_EVENT_ENABLER_TYPE_NOTIFIER: + { + struct lttng_event_notifier_enabler *event_notifier_enabler = + container_of(event_enabler, struct lttng_event_notifier_enabler, parent); + lttng_event_notifier_group_sync_enablers(event_notifier_enabler->group); + break; + } + default: + WARN_ON_ONCE(1); + } +} + /* * Serialize at most one packet worth of metadata into a metadata * channel.