X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=a5b4774ca623443788712138eb5a1dac89479bd2;hb=948f8adbad6b29e761c2f1d581a44525399e8530;hp=564cbb784f463f2f48e4539bba70759c28e96381;hpb=29c62722c4e1146fe6e7585308f3e4497e39e908;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 564cbb784..a5b4774ca 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -61,7 +61,7 @@ static void add_unique_ust_event(struct lttng_ht *ht, /* * Disable kernel tracepoint event for a channel from the kernel session. */ -int event_kernel_disable_tracepoint(struct ltt_kernel_channel *kchan, +int event_kernel_disable_event(struct ltt_kernel_channel *kchan, char *event_name) { int ret; @@ -69,7 +69,8 @@ int event_kernel_disable_tracepoint(struct ltt_kernel_channel *kchan, assert(kchan); - kevent = trace_kernel_get_event_by_name(event_name, kchan); + kevent = trace_kernel_get_event_by_name(event_name, kchan, + LTTNG_EVENT_ALL); if (kevent == NULL) { ret = LTTNG_ERR_NO_EVENT; goto error; @@ -90,61 +91,11 @@ error: return ret; } -/* - * Enable kernel system call for a channel from the kernel session. - */ -int event_kernel_enable_syscall(struct ltt_kernel_channel *kchan, - char *syscall_name) -{ - int ret; - - assert(kchan); - - ret = kernel_enable_syscall(syscall_name, kchan); - if (ret < 0) { - ret = LTTNG_ERR_KERN_ENABLE_FAIL; - goto error; - } - - DBG("Kernel syscall %s enable for channel %s.", - syscall_name, kchan->channel->name); - - ret = LTTNG_OK; - -error: - return ret; -} - -/* - * Disable kernel system call for a channel from the kernel session. - */ -int event_kernel_disable_syscall(struct ltt_kernel_channel *kchan, - char *syscall_name) -{ - int ret; - - assert(kchan); - - ret = kernel_disable_syscall(syscall_name, kchan); - if (ret < 0) { - ret = LTTNG_ERR_KERN_DISABLE_FAIL; - goto error; - } - - DBG("Kernel syscall %s disable for channel %s.", - !strcmp(syscall_name, "*") ? "" : syscall_name, - kchan->channel->name); - - ret = LTTNG_OK; - -error: - return ret; -} - /* * Disable kernel tracepoint events for a channel from the kernel session. */ -int event_kernel_disable_all_tracepoints(struct ltt_kernel_channel *kchan) +int event_kernel_disable_event_type(struct ltt_kernel_channel *kchan, + enum lttng_event_type type) { int ret; struct ltt_kernel_event *kevent; @@ -153,6 +104,8 @@ int event_kernel_disable_all_tracepoints(struct ltt_kernel_channel *kchan) /* For each event in the kernel session */ cds_list_for_each_entry(kevent, &kchan->events_list.head, list) { + if (type != LTTNG_EVENT_ALL && kevent->type != type) + continue; ret = kernel_disable_event(kevent); if (ret < 0) { /* We continue disabling the rest */ @@ -166,25 +119,18 @@ int event_kernel_disable_all_tracepoints(struct ltt_kernel_channel *kchan) /* * Disable all kernel event for a channel from the kernel session. */ -int event_kernel_disable_all(struct ltt_kernel_channel *kchan) +int event_kernel_disable_event_all(struct ltt_kernel_channel *kchan) { - int ret; - - assert(kchan); - - ret = event_kernel_disable_all_tracepoints(kchan); - if (ret != LTTNG_OK) - return ret; - ret = event_kernel_disable_syscall(kchan, "*"); - return ret; + return event_kernel_disable_event_type(kchan, LTTNG_EVENT_ALL); } /* * Enable kernel tracepoint event for a channel from the kernel session. * We own filter_expression and filter. */ -int event_kernel_enable_tracepoint(struct ltt_kernel_channel *kchan, - struct lttng_event *event) +int event_kernel_enable_event(struct ltt_kernel_channel *kchan, + struct lttng_event *event, char *filter_expression, + struct lttng_filter_bytecode *filter) { int ret; struct ltt_kernel_event *kevent; @@ -192,9 +138,14 @@ int event_kernel_enable_tracepoint(struct ltt_kernel_channel *kchan, assert(kchan); assert(event); - kevent = trace_kernel_get_event_by_name(event->name, kchan); + kevent = trace_kernel_find_event(event->name, kchan, + event->type, filter); if (kevent == NULL) { - ret = kernel_create_event(event, kchan); + ret = kernel_create_event(event, kchan, + filter_expression, filter); + /* We have passed ownership */ + filter_expression = NULL; + filter = NULL; if (ret < 0) { switch (-ret) { case EEXIST: @@ -223,6 +174,8 @@ int event_kernel_enable_tracepoint(struct ltt_kernel_channel *kchan, ret = LTTNG_OK; end: + free(filter_expression); + free(filter); return ret; } @@ -290,7 +243,7 @@ int event_ust_enable_all_tracepoints(struct ltt_ust_session *usess, /* Create ust event */ uevent = trace_ust_create_event(&events[i], filter_expression, - filter, NULL); + filter, NULL, false); if (uevent == NULL) { ret = LTTNG_ERR_FATAL; goto error_destroy; @@ -337,7 +290,8 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct lttng_event *event, char *filter_expression, struct lttng_filter_bytecode *filter, - struct lttng_event_exclusion *exclusion) + struct lttng_event_exclusion *exclusion, + bool internal_event) { int ret = LTTNG_OK, to_create = 0; struct ltt_ust_event *uevent; @@ -352,7 +306,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, event->loglevel, exclusion); if (uevent == NULL) { uevent = trace_ust_create_event(event, filter_expression, - filter, exclusion); + filter, exclusion, internal_event); /* We have passed ownership */ filter_expression = NULL; filter = NULL; @@ -555,7 +509,8 @@ error: */ int event_agent_enable_all(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter, + char *filter_expression) { int ret; struct agent_event *aevent; @@ -566,7 +521,7 @@ int event_agent_enable_all(struct ltt_ust_session *usess, DBG("Event agent enabling ALL events for session %" PRIu64, usess->id); /* Enable event on agent application through TCP socket. */ - ret = event_agent_enable(usess, agt, event, filter); + ret = event_agent_enable(usess, agt, event, filter, filter_expression); if (ret != LTTNG_OK) { goto error; } @@ -592,7 +547,8 @@ error: */ int event_agent_enable(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter, + char *filter_expression) { int ret, created = 0; struct agent_event *aevent; @@ -666,7 +622,7 @@ const char *event_get_default_agent_ust_name(enum lttng_domain_type domain) } break; case LTTNG_DOMAIN_PYTHON: - default_event_name = DEFAULT_USER_PYTHON_EVENT_NAME; + default_event_name = DEFAULT_PYTHON_EVENT_NAME; break; default: assert(0);