X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-events.c;h=e9b5687198a6cfd56cf6bb537086bb2a8360c0a9;hb=a029f2a396b6da864697416a9e5f9b98a601356c;hp=230e393446735edcfaef947c274a39faa0d6f891;hpb=c570be0da77e963d77bac099d468bc0cd5f1bd63;p=lttng-modules.git diff --git a/src/lttng-events.c b/src/lttng-events.c index 230e3934..e9b56871 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -49,6 +49,12 @@ #include #include +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,16,0)) +#include +#else +#include +#endif + #define METADATA_CACHE_DEFAULT_SIZE 4096 static LIST_HEAD(sessions); @@ -72,8 +78,8 @@ static void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier static void _lttng_event_destroy(struct lttng_kernel_event_common *event); static void _lttng_channel_destroy(struct lttng_kernel_channel_buffer *chan); -static int _lttng_event_unregister(struct lttng_kernel_event_recorder *event); -static int _lttng_event_notifier_unregister(struct lttng_kernel_event_notifier *event_notifier); +static void _lttng_event_unregister(struct lttng_kernel_event_recorder *event); +static void _lttng_event_notifier_unregister(struct lttng_kernel_event_notifier *event_notifier); static int _lttng_event_metadata_statedump(struct lttng_kernel_session *session, struct lttng_kernel_channel_buffer *chan, @@ -364,10 +370,8 @@ void lttng_session_destroy(struct lttng_kernel_session *session) ret = lttng_syscalls_unregister_channel(chan_priv->pub); WARN_ON(ret); } - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { - ret = _lttng_event_unregister(event_recorder_priv->pub); - WARN_ON(ret); - } + list_for_each_entry(event_recorder_priv, &session->priv->events, node) + _lttng_event_unregister(event_recorder_priv->pub); synchronize_trace(); /* Wait for in-flight events to complete */ list_for_each_entry(chan_priv, &session->priv->chan, node) { ret = lttng_syscalls_destroy_event(chan_priv->pub); @@ -415,10 +419,8 @@ void lttng_event_notifier_group_destroy( WARN_ON(ret); list_for_each_entry_safe(event_notifier_priv, tmpevent_notifier_priv, - &event_notifier_group->event_notifiers_head, node) { - ret = _lttng_event_notifier_unregister(event_notifier_priv->pub); - WARN_ON(ret); - } + &event_notifier_group->event_notifiers_head, node) + _lttng_event_notifier_unregister(event_notifier_priv->pub); /* Wait for in-flight event notifier to complete */ synchronize_trace(); @@ -1432,8 +1434,7 @@ void register_event(struct lttng_kernel_event_recorder *event_recorder) const struct lttng_kernel_event_desc *desc; int ret = -EINVAL; - if (event_recorder->priv->parent.registered) - return; + WARN_ON_ONCE(event_recorder->priv->parent.registered); desc = event_recorder->priv->parent.desc; switch (event_recorder->priv->parent.instrumentation) { @@ -1469,14 +1470,14 @@ void register_event(struct lttng_kernel_event_recorder *event_recorder) /* * Only used internally at session destruction. */ -int _lttng_event_unregister(struct lttng_kernel_event_recorder *event_recorder) +static +void unregister_event(struct lttng_kernel_event_recorder *event_recorder) { struct lttng_kernel_event_common_private *event_priv = &event_recorder->priv->parent; const struct lttng_kernel_event_desc *desc; int ret = -EINVAL; - if (!event_priv->registered) - return 0; + WARN_ON_ONCE(!event_priv->registered); desc = event_priv->desc; switch (event_priv->instrumentation) { @@ -1514,9 +1515,16 @@ int _lttng_event_unregister(struct lttng_kernel_event_recorder *event_recorder) default: WARN_ON_ONCE(1); } + WARN_ON_ONCE(ret); if (!ret) event_priv->registered = 0; - return ret; +} + +static +void _lttng_event_unregister(struct lttng_kernel_event_recorder *event_recorder) +{ + if (event_recorder->priv->parent.registered) + unregister_event(event_recorder); } /* Only used for tracepoints for now. */ @@ -1526,8 +1534,7 @@ void register_event_notifier(struct lttng_kernel_event_notifier *event_notifier) const struct lttng_kernel_event_desc *desc; int ret = -EINVAL; - if (event_notifier->priv->parent.registered) - return; + WARN_ON_ONCE(event_notifier->priv->parent.registered); desc = event_notifier->priv->parent.desc; switch (event_notifier->priv->parent.instrumentation) { @@ -1561,14 +1568,12 @@ void register_event_notifier(struct lttng_kernel_event_notifier *event_notifier) } static -int _lttng_event_notifier_unregister( - struct lttng_kernel_event_notifier *event_notifier) +int unregister_event_notifier(struct lttng_kernel_event_notifier *event_notifier) { const struct lttng_kernel_event_desc *desc; int ret = -EINVAL; - if (!event_notifier->priv->parent.registered) - return 0; + WARN_ON_ONCE(!event_notifier->priv->parent.registered); desc = event_notifier->priv->parent.desc; switch (event_notifier->priv->parent.instrumentation) { @@ -1606,6 +1611,13 @@ int _lttng_event_notifier_unregister( return ret; } +static +void _lttng_event_notifier_unregister(struct lttng_kernel_event_notifier *event_notifier) +{ + if (event_notifier->priv->parent.registered) + unregister_event_notifier(event_notifier); +} + /* * Only used internally at session destruction. */ @@ -2784,9 +2796,11 @@ void lttng_session_sync_event_enablers(struct lttng_kernel_session *session) * state. */ if (enabled) { - register_event(event_recorder); + if (!event_recorder_priv->parent.registered) + register_event(event_recorder); } else { - _lttng_event_unregister(event_recorder); + if (event_recorder_priv->parent.registered) + _lttng_event_unregister(event_recorder); } /* Check if has enablers without bytecode enabled */ @@ -2877,7 +2891,7 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group register_event_notifier(event_notifier); } else { if (event_notifier_priv->parent.registered) - _lttng_event_notifier_unregister(event_notifier); + unregister_event_notifier(event_notifier); } /* Check if has enablers without bytecode enabled */