X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-probes.c;h=73d9482d0f1ee41d3c4621127c2c1d559942230f;hb=45fe4e1a42028b821757e0b98f9b33bf435a108a;hp=aba7ada5767faba1db997e748b5569dd304bb456;hpb=606828e401c405619a0c7249e8c7e3291cc1cb45;p=lttng-modules.git diff --git a/src/lttng-probes.c b/src/lttng-probes.c index aba7ada5..73d9482d 100644 --- a/src/lttng-probes.c +++ b/src/lttng-probes.c @@ -13,6 +13,7 @@ #include #include +#include /* * probe list is protected by sessions lock. @@ -41,24 +42,31 @@ EXPORT_PER_CPU_SYMBOL_GPL(lttng_dynamic_len_stack); static int check_event_provider(struct lttng_kernel_probe_desc *desc) { - int i; + int i, mismatch = 0; size_t provider_name_len; provider_name_len = strnlen(desc->provider_name, LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1); for (i = 0; i < desc->nr_events; i++) { - 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 + _ + + * The event name needs to start with provider name + _ + * one or more letter. */ - if (strlen(desc->event_desc[i]->event_name) <= provider_name_len + 1) - return 0; /* provider mismatch */ - if (desc->event_desc[i]->event_name[provider_name_len] != '_') - return 0; /* provider mismatch */ + if (strncmp(desc->event_desc[i]->event_name, desc->provider_name, provider_name_len)) + mismatch = 1; + else if (strlen(desc->event_desc[i]->event_name) <= provider_name_len + 1) + mismatch = 1; + else if (desc->event_desc[i]->event_name[provider_name_len] != '_') + mismatch = 1; + + if (mismatch) { + printk(KERN_WARNING "LTTng: event provider mismatch: " + "The event name needs to start with provider " + "name + _ + one or more letter, " + "provider: %s, event name: %s\n", + desc->provider_name, desc->event_desc[i]->event_name); + return 0; + } } return 1; } @@ -153,7 +161,7 @@ const struct lttng_kernel_probe_desc *find_provider(const char *provider) return NULL; } -int lttng_probe_register(struct lttng_kernel_probe_desc *desc) +int lttng_kernel_probe_register(struct lttng_kernel_probe_desc *desc) { int ret = 0; @@ -181,9 +189,9 @@ end: lttng_unlock_sessions(); return ret; } -EXPORT_SYMBOL_GPL(lttng_probe_register); +EXPORT_SYMBOL_GPL(lttng_kernel_probe_register); -void lttng_probe_unregister(struct lttng_kernel_probe_desc *desc) +void lttng_kernel_probe_unregister(struct lttng_kernel_probe_desc *desc) { lttng_lock_sessions(); if (!desc->lazy) @@ -193,7 +201,7 @@ void lttng_probe_unregister(struct lttng_kernel_probe_desc *desc) pr_debug("LTTng: just unregistered probe %s\n", desc->provider_name); lttng_unlock_sessions(); } -EXPORT_SYMBOL_GPL(lttng_probe_unregister); +EXPORT_SYMBOL_GPL(lttng_kernel_probe_unregister); /* * TODO: this is O(nr_probes * nb_events), could be faster.