X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-kernel.c;h=86cbb5e251063611acbffc709572b4498fbc1b76;hb=0efb2ad7fc448283184e43d6fb0915febae45384;hp=11548884d143174241afa67adfebe359f2c89e19;hpb=f2d09181d82a6b19908e15c3264be52c0c08c3b8;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/trace-kernel.c b/src/bin/lttng-sessiond/trace-kernel.c index 11548884d..86cbb5e25 100644 --- a/src/bin/lttng-sessiond/trace-kernel.c +++ b/src/bin/lttng-sessiond/trace-kernel.c @@ -485,6 +485,7 @@ error: enum lttng_error_code trace_kernel_create_event_notifier_rule( struct lttng_trigger *trigger, uint64_t token, + uint64_t error_counter_index, struct ltt_kernel_event_notifier_rule **event_notifier_rule) { enum lttng_error_code ret = LTTNG_OK; @@ -497,13 +498,13 @@ enum lttng_error_code trace_kernel_create_event_notifier_rule( assert(event_notifier_rule); - condition = lttng_trigger_get_condition(trigger); + condition = lttng_trigger_get_const_condition(trigger); assert(condition); condition_type = lttng_condition_get_type(condition); - assert(condition_type == LTTNG_CONDITION_TYPE_ON_EVENT); + assert(condition_type == LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); - condition_status = lttng_condition_on_event_get_rule( + condition_status = lttng_condition_event_rule_matches_get_rule( condition, &event_rule); assert(condition_status == LTTNG_CONDITION_STATUS_OK); assert(event_rule); @@ -522,6 +523,7 @@ enum lttng_error_code trace_kernel_create_event_notifier_rule( local_kernel_token_event_rule->fd = -1; local_kernel_token_event_rule->enabled = 1; local_kernel_token_event_rule->token = token; + local_kernel_token_event_rule->error_counter_index = error_counter_index; /* Get the reference of the event rule. */ lttng_trigger_get(trigger); @@ -674,15 +676,35 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( const enum lttng_event_rule_status status = lttng_event_rule_syscall_get_pattern( rule, &name); + const enum lttng_event_rule_syscall_emission_site_type + emission_site_type = + lttng_event_rule_syscall_get_emission_site_type(rule); + enum lttng_kernel_syscall_entryexit entryexit; assert(status == LTTNG_EVENT_RULE_STATUS_OK); + assert(emission_site_type != LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_UNKNOWN); + + switch(emission_site_type) { + case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY: + entryexit = LTTNG_KERNEL_SYSCALL_ENTRY; + break; + case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_EXIT: + entryexit = LTTNG_KERNEL_SYSCALL_EXIT; + break; + case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY_EXIT: + entryexit = LTTNG_KERNEL_SYSCALL_ENTRYEXIT; + break; + default: + abort(); + break; + } kernel_event_notifier->event.instrumentation = LTTNG_KERNEL_SYSCALL; kernel_event_notifier->event.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_ALL; kernel_event_notifier->event.u.syscall.entryexit = - LTTNG_KERNEL_SYSCALL_ENTRY; + entryexit; kernel_event_notifier->event.u.syscall.match = LTTNG_KERNEL_SYSCALL_MATCH_NAME; ret_code = LTTNG_OK; @@ -944,11 +966,11 @@ void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel) /* Remove from channel list */ cds_list_del(&channel->list); - if (notification_thread_handle - && channel->published_to_notification_thread) { + if (the_notification_thread_handle && + channel->published_to_notification_thread) { status = notification_thread_command_remove_channel( - notification_thread_handle, - channel->key, LTTNG_DOMAIN_KERNEL); + the_notification_thread_handle, channel->key, + LTTNG_DOMAIN_KERNEL); assert(status == LTTNG_OK); } free(channel->channel->attr.extended.ptr);