X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-events.c;h=cb1eb5bf030ea233c15309e3c8baa21a04402c43;hb=5f4c791e2ad2c814101ccdb500e65543f2792c41;hp=9f683db18f2274badbaeb37288d4843fc7c246e0;hpb=99f52fcce5865809584c1e022bca1409702ea292;p=lttng-modules.git diff --git a/src/lttng-events.c b/src/lttng-events.c index 9f683db1..cb1eb5bf 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -90,21 +90,21 @@ int _lttng_field_statedump(struct lttng_session *session, void synchronize_trace(void) { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,1,0)) synchronize_rcu(); #else synchronize_sched(); #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) #ifdef CONFIG_PREEMPT_RT_FULL synchronize_rcu(); #endif -#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */ +#else /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */ #ifdef CONFIG_PREEMPT_RT synchronize_rcu(); #endif -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */ +#endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */ } void lttng_lock_sessions(void) @@ -337,7 +337,7 @@ void lttng_session_destroy(struct lttng_session *session) mutex_lock(&sessions_mutex); WRITE_ONCE(session->active, 0); list_for_each_entry(chan, &session->chan, list) { - ret = lttng_syscalls_unregister_event(chan); + ret = lttng_syscalls_unregister_channel(chan); WARN_ON(ret); } list_for_each_entry(event, &session->events, list) { @@ -386,7 +386,7 @@ void lttng_event_notifier_group_destroy( mutex_lock(&sessions_mutex); - ret = lttng_syscalls_unregister_event_notifier(event_notifier_group); + ret = lttng_syscalls_unregister_event_notifier_group(event_notifier_group); WARN_ON(ret); list_for_each_entry_safe(event_notifier, tmpevent_notifier, @@ -412,6 +412,7 @@ void lttng_event_notifier_group_destroy( if (event_notifier_group->error_counter) { struct lttng_counter *error_counter = event_notifier_group->error_counter; + error_counter->ops->counter_destroy(error_counter->counter); module_put(error_counter->transport->owner); lttng_kvfree(error_counter); @@ -1071,6 +1072,7 @@ struct lttng_event_notifier *_lttng_event_notifier_create( void *filter, enum lttng_kernel_instrumentation itype) { struct lttng_event_notifier *event_notifier; + struct lttng_counter *error_counter; const char *event_name; struct hlist_head *head; int ret; @@ -1234,9 +1236,12 @@ struct lttng_event_notifier *_lttng_event_notifier_create( /* * Clear the error counter bucket. The sessiond keeps track of which - * bucket is currently in use. We trust it. + * bucket is currently in use. We trust it. The session lock + * synchronizes against concurrent creation of the error + * counter. */ - if (event_notifier_group->error_counter) { + error_counter = event_notifier_group->error_counter; + if (error_counter) { size_t dimension_index[1]; /* @@ -1250,9 +1255,7 @@ struct lttng_event_notifier *_lttng_event_notifier_create( } dimension_index[0] = event_notifier->error_counter_index; - ret = event_notifier_group->error_counter->ops->counter_clear( - event_notifier_group->error_counter->counter, - dimension_index); + ret = error_counter->ops->counter_clear(error_counter->counter, dimension_index); if (ret) { printk(KERN_INFO "LTTng: event_notifier: Unable to clear error counter bucket %llu\n", event_notifier->error_counter_index); @@ -2065,7 +2068,7 @@ void lttng_create_syscall_event_if_missing(struct lttng_event_enabler *event_ena { int ret; - ret = lttng_syscalls_register_event(event_enabler->chan, NULL); + ret = lttng_syscalls_register_event(event_enabler, NULL); WARN_ON_ONCE(ret); } @@ -2115,14 +2118,17 @@ int lttng_event_enabler_ref_events(struct lttng_event_enabler *event_enabler) struct lttng_event *event; if (base_enabler->event_param.instrumentation == LTTNG_KERNEL_SYSCALL && - base_enabler->event_param.u.syscall.entryexit == LTTNG_KERNEL_SYSCALL_ENTRYEXIT && base_enabler->event_param.u.syscall.abi == LTTNG_KERNEL_SYSCALL_ABI_ALL && base_enabler->event_param.u.syscall.match == LTTNG_KERNEL_SYSCALL_MATCH_NAME && !strcmp(base_enabler->event_param.name, "*")) { - if (base_enabler->enabled) - WRITE_ONCE(chan->syscall_all, 1); - else - WRITE_ONCE(chan->syscall_all, 0); + int enabled = base_enabler->enabled; + enum lttng_kernel_syscall_entryexit entryexit = base_enabler->event_param.u.syscall.entryexit; + + if (entryexit == LTTNG_KERNEL_SYSCALL_ENTRY || entryexit == LTTNG_KERNEL_SYSCALL_ENTRYEXIT) + WRITE_ONCE(chan->syscall_all_entry, enabled); + + if (entryexit == LTTNG_KERNEL_SYSCALL_EXIT || entryexit == LTTNG_KERNEL_SYSCALL_ENTRYEXIT) + WRITE_ONCE(chan->syscall_all_exit, enabled); } /* First ensure that probe events are created for this enabler. */ @@ -4023,7 +4029,7 @@ void lttng_counter_transport_unregister(struct lttng_counter_transport *transpor } EXPORT_SYMBOL_GPL(lttng_counter_transport_unregister); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) enum cpuhp_state lttng_hp_prepare; enum cpuhp_state lttng_hp_online; @@ -4139,7 +4145,7 @@ static void __exit lttng_exit_cpu_hotplug(void) cpuhp_remove_multi_state(lttng_hp_prepare); } -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */ static int lttng_init_cpu_hotplug(void) { return 0; @@ -4147,7 +4153,7 @@ static int lttng_init_cpu_hotplug(void) static void lttng_exit_cpu_hotplug(void) { } -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */ static int __init lttng_events_init(void)