X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Flttng-events.c;h=fa151acfb15ad8f4a30bb206a09bee5e5a6fb962;hb=546cb5f29a6b43d6240f21a1a2d1a38b2919f966;hp=b9452e05f20ad5aeb9c71184570c7bb8e4885943;hpb=c8e143808da3085788221089556ecae52afd58a9;p=lttng-modules.git diff --git a/src/lttng-events.c b/src/lttng-events.c index b9452e05..fa151acf 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -362,7 +362,7 @@ void lttng_session_destroy(struct lttng_kernel_session *session) ret = lttng_syscalls_unregister_syscall_table(&chan_priv->parent.syscall_table); WARN_ON(ret); } - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { + list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node) { ret = _lttng_event_unregister(&event_recorder_priv->pub->parent); WARN_ON(ret); } @@ -374,7 +374,7 @@ void lttng_session_destroy(struct lttng_kernel_session *session) list_for_each_entry_safe(event_recorder_enabler, tmp_event_recorder_enabler, &session->priv->enablers_head, node) lttng_event_enabler_destroy(&event_recorder_enabler->parent); - list_for_each_entry_safe(event_recorder_priv, tmpevent_recorder_priv, &session->priv->events, node) + list_for_each_entry_safe(event_recorder_priv, tmpevent_recorder_priv, &session->priv->events, parent.node) _lttng_event_destroy(&event_recorder_priv->pub->parent); list_for_each_entry_safe(chan_priv, tmpchan_priv, &session->priv->chan, node) { BUG_ON(chan_priv->channel_type == METADATA_CHANNEL); @@ -413,7 +413,7 @@ 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) { + &event_notifier_group->event_notifiers_head, parent.node) { ret = _lttng_event_unregister(&event_notifier_priv->pub->parent); WARN_ON(ret); } @@ -431,7 +431,7 @@ void lttng_event_notifier_group_destroy( lttng_event_enabler_destroy(&event_notifier_enabler->parent); list_for_each_entry_safe(event_notifier_priv, tmpevent_notifier_priv, - &event_notifier_group->event_notifiers_head, node) + &event_notifier_group->event_notifiers_head, parent.node) _lttng_event_destroy(&event_notifier_priv->pub->parent); if (event_notifier_group->error_counter) { @@ -567,7 +567,7 @@ int lttng_session_metadata_regenerate(struct lttng_kernel_session *session) chan_priv->metadata_dumped = 0; } - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { + list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node) { event_recorder_priv->metadata_dumped = 0; } @@ -1060,7 +1060,7 @@ struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l module_put(event_recorder->priv->parent.desc->owner); goto statedump_error; } - list_add(&event_recorder_return->priv->node, &chan->parent.session->priv->events); + list_add(&event_recorder_return->priv->parent.node, &chan->parent.session->priv->events); break; } @@ -1138,7 +1138,7 @@ struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l goto statedump_error; } hlist_add_head(&event_recorder->priv->parent.hlist_node, head); - list_add(&event_recorder->priv->node, &chan->parent.session->priv->events); + list_add(&event_recorder->priv->parent.node, &chan->parent.session->priv->events); return event_recorder; statedump_error: @@ -1348,7 +1348,7 @@ struct lttng_kernel_event_notifier *_lttng_kernel_event_notifier_create(struct l goto register_error; } - list_add(&event_notifier->priv->node, &event_notifier_group->event_notifiers_head); + list_add(&event_notifier->priv->parent.node, &event_notifier_group->event_notifiers_head); hlist_add_head(&event_notifier->priv->parent.hlist_node, head); /* @@ -1623,7 +1623,7 @@ void _lttng_event_destroy(struct lttng_kernel_event_common *event) default: WARN_ON_ONCE(1); } - list_del(&event_recorder->priv->node); + list_del(&event_recorder->priv->parent.node); kmem_cache_free(event_recorder_private_cache, event_recorder->priv); kmem_cache_free(event_recorder_cache, event_recorder); break; @@ -1660,7 +1660,7 @@ void _lttng_event_destroy(struct lttng_kernel_event_common *event) default: WARN_ON_ONCE(1); } - list_del(&event_notifier->priv->node); + list_del(&event_notifier->priv->parent.node); kmem_cache_free(event_notifier_private_cache, event_notifier->priv); kmem_cache_free(event_notifier_cache, event_notifier); break; @@ -2201,20 +2201,19 @@ void lttng_create_syscall_event_if_missing(struct lttng_event_enabler_common *ev } /* - * Create struct lttng_kernel_event_recorder if it is missing and present in the list of - * tracepoint probes. + * Create event if it is missing and present in the list of tracepoint probes. * Should be called with sessions mutex held. */ static -void lttng_create_event_if_missing(struct lttng_event_recorder_enabler *event_enabler) +void lttng_create_event_if_missing(struct lttng_event_enabler_common *event_enabler) { - switch (event_enabler->parent.event_param.instrumentation) { + switch (event_enabler->event_param.instrumentation) { case LTTNG_KERNEL_ABI_TRACEPOINT: - lttng_create_tracepoint_event_if_missing(&event_enabler->parent); + lttng_create_tracepoint_event_if_missing(event_enabler); break; case LTTNG_KERNEL_ABI_SYSCALL: - lttng_create_syscall_event_if_missing(&event_enabler->parent); + lttng_create_syscall_event_if_missing(event_enabler); break; default: @@ -2232,9 +2231,9 @@ static int lttng_event_enabler_ref_events(struct lttng_event_recorder_enabler *event_enabler) { struct lttng_kernel_channel_buffer *chan = event_enabler->chan; - struct lttng_kernel_session *session = event_enabler->chan->parent.session; struct lttng_event_enabler_common *base_enabler = lttng_event_recorder_enabler_as_enabler(event_enabler); struct lttng_kernel_event_recorder_private *event_recorder_priv; + struct list_head *event_list_head = lttng_get_event_list_head_from_enabler(&event_enabler->parent); if (base_enabler->event_param.instrumentation == LTTNG_KERNEL_ABI_SYSCALL && base_enabler->event_param.u.syscall.abi == LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL && @@ -2251,10 +2250,10 @@ int lttng_event_enabler_ref_events(struct lttng_event_recorder_enabler *event_en } /* First ensure that probe events are created for this enabler. */ - lttng_create_event_if_missing(event_enabler); + lttng_create_event_if_missing(&event_enabler->parent); /* For each event matching event_enabler in session event list. */ - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { + list_for_each_entry(event_recorder_priv, event_list_head, parent.node) { struct lttng_kernel_event_recorder *event_recorder = event_recorder_priv->pub; struct lttng_enabler_ref *enabler_ref; @@ -2286,29 +2285,6 @@ int lttng_event_enabler_ref_events(struct lttng_event_recorder_enabler *event_en return 0; } -/* - * Create struct lttng_kernel_event_notifier if it is missing and present in the list of - * tracepoint probes. - * Should be called with sessions mutex held. - */ -static -void lttng_create_event_notifier_if_missing(struct lttng_event_notifier_enabler *event_notifier_enabler) -{ - switch (event_notifier_enabler->parent.event_param.instrumentation) { - case LTTNG_KERNEL_ABI_TRACEPOINT: - lttng_create_tracepoint_event_if_missing(&event_notifier_enabler->parent); - break; - - case LTTNG_KERNEL_ABI_SYSCALL: - lttng_create_syscall_event_if_missing(&event_notifier_enabler->parent); - break; - - default: - WARN_ON_ONCE(1); - break; - } -} - /* * Create event_notifiers associated with a event_notifier enabler (if not already present). */ @@ -2319,6 +2295,7 @@ int lttng_event_notifier_enabler_ref_event_notifiers( struct lttng_event_notifier_group *event_notifier_group = event_notifier_enabler->group; struct lttng_event_enabler_common *base_enabler = lttng_event_notifier_enabler_as_enabler(event_notifier_enabler); struct lttng_kernel_event_notifier_private *event_notifier_priv; + struct list_head *event_list_head = lttng_get_event_list_head_from_enabler(&event_notifier_enabler->parent); if (base_enabler->event_param.instrumentation == LTTNG_KERNEL_ABI_SYSCALL && base_enabler->event_param.u.syscall.abi == LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL && @@ -2337,10 +2314,10 @@ int lttng_event_notifier_enabler_ref_event_notifiers( } /* First ensure that probe event_notifiers are created for this enabler. */ - lttng_create_event_notifier_if_missing(event_notifier_enabler); + lttng_create_event_if_missing(&event_notifier_enabler->parent); /* Link the created event_notifier with its associated enabler. */ - list_for_each_entry(event_notifier_priv, &event_notifier_group->event_notifiers_head, node) { + list_for_each_entry(event_notifier_priv, event_list_head, parent.node) { struct lttng_kernel_event_notifier *event_notifier = event_notifier_priv->pub; struct lttng_enabler_ref *enabler_ref; @@ -2696,7 +2673,7 @@ void lttng_session_sync_event_enablers(struct lttng_kernel_session *session) * and its channel and session transient states are enabled, we * enable the event, else we disable it. */ - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { + list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node) { struct lttng_kernel_event_recorder *event_recorder = event_recorder_priv->pub; struct lttng_enabler_ref *enabler_ref; struct lttng_kernel_bytecode_runtime *runtime; @@ -2791,7 +2768,7 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group * For each event_notifier, if at least one of its enablers is enabled, * we enable the event_notifier, else we disable it. */ - list_for_each_entry(event_notifier_priv, &event_notifier_group->event_notifiers_head, node) { + list_for_each_entry(event_notifier_priv, &event_notifier_group->event_notifiers_head, parent.node) { struct lttng_kernel_event_notifier *event_notifier = event_notifier_priv->pub; struct lttng_enabler_ref *enabler_ref; struct lttng_kernel_bytecode_runtime *runtime; @@ -4112,7 +4089,7 @@ skip_session: goto end; } - list_for_each_entry(event_recorder_priv, &session->priv->events, node) { + list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node) { ret = _lttng_event_metadata_statedump(session, event_recorder_priv->pub->chan, event_recorder_priv->pub); if (ret)