X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-probes.c;h=a320b6287948ab3225cdaa69622f0348f48f05d8;hb=437d5aa59380583ce1cd14d394a53b398be1275d;hp=4a2bb630e8503412c3524ddc468aef749c7f2280;hpb=cfa6cc1d0f01c2cfcc1a679abf3a6572d411c309;p=lttng-modules.git diff --git a/src/lttng-probes.c b/src/lttng-probes.c index 4a2bb630..a320b628 100644 --- a/src/lttng-probes.c +++ b/src/lttng-probes.c @@ -25,7 +25,7 @@ static LIST_HEAD(_probe_list); static LIST_HEAD(lazy_probe_init); /* - * lazy_nesting counter ensures we don't trigger lazy probe registration + * lazy_nesting counter ensures we don't notify lazy probe registration * fixup while we are performing the fixup. It is protected by the * sessions lock. */ @@ -39,25 +39,25 @@ EXPORT_PER_CPU_SYMBOL_GPL(lttng_dynamic_len_stack); * Called under sessions lock. */ static -int check_event_provider(struct lttng_probe_desc *desc) +int check_event_provider(struct lttng_kernel_probe_desc *desc) { int i; size_t provider_name_len; - provider_name_len = strnlen(desc->provider, + provider_name_len = strnlen(desc->provider_name, LTTNG_KERNEL_SYM_NAME_LEN - 1); for (i = 0; i < desc->nr_events; i++) { - if (strncmp(desc->event_desc[i]->name, - desc->provider, + if (strncmp(desc->event_desc[i]->event_name, + desc->provider_name, provider_name_len)) return 0; /* provider mismatch */ /* * The event needs to contain at least provider name + _ + * one or more letter. */ - if (strlen(desc->event_desc[i]->name) <= provider_name_len + 1) + if (strlen(desc->event_desc[i]->event_name) <= provider_name_len + 1) return 0; /* provider mismatch */ - if (desc->event_desc[i]->name[provider_name_len] != '_') + if (desc->event_desc[i]->event_name[provider_name_len] != '_') return 0; /* provider mismatch */ } return 1; @@ -67,9 +67,9 @@ int check_event_provider(struct lttng_probe_desc *desc) * Called under sessions lock. */ static -void lttng_lazy_probe_register(struct lttng_probe_desc *desc) +void lttng_lazy_probe_register(struct lttng_kernel_probe_desc *desc) { - struct lttng_probe_desc *iter; + struct lttng_kernel_probe_desc *iter; struct list_head *probe_list; /* @@ -87,7 +87,7 @@ void lttng_lazy_probe_register(struct lttng_probe_desc *desc) */ /* - * We sort the providers by struct lttng_probe_desc pointer + * We sort the providers by struct lttng_kernel_probe_desc pointer * address. */ probe_list = &_probe_list; @@ -103,7 +103,7 @@ void lttng_lazy_probe_register(struct lttng_probe_desc *desc) list_add(&desc->head, probe_list); desc_added: pr_debug("LTTng: just registered probe %s containing %u events\n", - desc->provider, desc->nr_events); + desc->provider_name, desc->nr_events); } /* @@ -112,7 +112,7 @@ desc_added: static void fixup_lazy_probes(void) { - struct lttng_probe_desc *iter, *tmp; + struct lttng_kernel_probe_desc *iter, *tmp; int ret; lazy_nesting++; @@ -124,6 +124,8 @@ void fixup_lazy_probes(void) } ret = lttng_fix_pending_events(); WARN_ON_ONCE(ret); + ret = lttng_fix_pending_event_notifiers(); + WARN_ON_ONCE(ret); lazy_nesting--; } @@ -138,20 +140,20 @@ struct list_head *lttng_get_probe_list_head(void) } static -const struct lttng_probe_desc *find_provider(const char *provider) +const struct lttng_kernel_probe_desc *find_provider(const char *provider) { - struct lttng_probe_desc *iter; + struct lttng_kernel_probe_desc *iter; struct list_head *probe_list; probe_list = lttng_get_probe_list_head(); list_for_each_entry(iter, probe_list, head) { - if (!strcmp(iter->provider, provider)) + if (!strcmp(iter->provider_name, provider)) return iter; } return NULL; } -int lttng_probe_register(struct lttng_probe_desc *desc) +int lttng_probe_register(struct lttng_kernel_probe_desc *desc) { int ret = 0; @@ -160,20 +162,20 @@ int lttng_probe_register(struct lttng_probe_desc *desc) /* * Check if the provider has already been registered. */ - if (find_provider(desc->provider)) { + if (find_provider(desc->provider_name)) { ret = -EEXIST; goto end; } list_add(&desc->lazy_init_head, &lazy_probe_init); desc->lazy = 1; pr_debug("LTTng: adding probe %s containing %u events to lazy registration list\n", - desc->provider, desc->nr_events); + desc->provider_name, desc->nr_events); /* * If there is at least one active session, we need to register * the probe immediately, since we cannot delay event * registration because they are needed ASAP. */ - if (lttng_session_active()) + if (lttng_session_active() || lttng_event_notifier_active()) fixup_lazy_probes(); end: lttng_unlock_sessions(); @@ -181,14 +183,14 @@ end: } EXPORT_SYMBOL_GPL(lttng_probe_register); -void lttng_probe_unregister(struct lttng_probe_desc *desc) +void lttng_probe_unregister(struct lttng_kernel_probe_desc *desc) { lttng_lock_sessions(); if (!desc->lazy) list_del(&desc->head); else list_del(&desc->lazy_init_head); - pr_debug("LTTng: just unregistered probe %s\n", desc->provider); + pr_debug("LTTng: just unregistered probe %s\n", desc->provider_name); lttng_unlock_sessions(); } EXPORT_SYMBOL_GPL(lttng_probe_unregister); @@ -198,14 +200,14 @@ EXPORT_SYMBOL_GPL(lttng_probe_unregister); * Called with sessions lock held. */ static -const struct lttng_event_desc *find_event(const char *name) +const struct lttng_kernel_event_desc *find_event_desc(const char *name) { - struct lttng_probe_desc *probe_desc; + struct lttng_kernel_probe_desc *probe_desc; int i; list_for_each_entry(probe_desc, &_probe_list, head) { for (i = 0; i < probe_desc->nr_events; i++) { - if (!strcmp(probe_desc->event_desc[i]->name, name)) + if (!strcmp(probe_desc->event_desc[i]->event_name, name)) return probe_desc->event_desc[i]; } } @@ -215,33 +217,33 @@ const struct lttng_event_desc *find_event(const char *name) /* * Called with sessions lock held. */ -const struct lttng_event_desc *lttng_event_get(const char *name) +const struct lttng_kernel_event_desc *lttng_event_desc_get(const char *name) { - const struct lttng_event_desc *event; + const struct lttng_kernel_event_desc *event_desc; int ret; - event = find_event(name); - if (!event) + event_desc = find_event_desc(name); + if (!event_desc) return NULL; - ret = try_module_get(event->owner); + ret = try_module_get(event_desc->owner); WARN_ON_ONCE(!ret); - return event; + return event_desc; } -EXPORT_SYMBOL_GPL(lttng_event_get); +EXPORT_SYMBOL_GPL(lttng_event_desc_get); /* * Called with sessions lock held. */ -void lttng_event_put(const struct lttng_event_desc *event) +void lttng_event_desc_put(const struct lttng_kernel_event_desc *event_desc) { - module_put(event->owner); + module_put(event_desc->owner); } -EXPORT_SYMBOL_GPL(lttng_event_put); +EXPORT_SYMBOL_GPL(lttng_event_desc_put); static void *tp_list_start(struct seq_file *m, loff_t *pos) { - struct lttng_probe_desc *probe_desc; + struct lttng_kernel_probe_desc *probe_desc; struct list_head *probe_list; int iter = 0, i; @@ -260,7 +262,7 @@ void *tp_list_start(struct seq_file *m, loff_t *pos) static void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos) { - struct lttng_probe_desc *probe_desc; + struct lttng_kernel_probe_desc *probe_desc; struct list_head *probe_list; int iter = 0, i; @@ -285,10 +287,10 @@ void tp_list_stop(struct seq_file *m, void *p) static int tp_list_show(struct seq_file *m, void *p) { - const struct lttng_event_desc *probe_desc = p; + const struct lttng_kernel_event_desc *probe_desc = p; seq_printf(m, "event { name = %s; };\n", - probe_desc->name); + probe_desc->event_name); return 0; }