{
struct ltt_channel *channel = channel_file->private_data;
char *event_name = "lttng_metadata";
- const struct lttng_event_desc *event_desc;
struct ltt_event *event;
int ret;
- event_desc = ltt_event_get(event_name);
- if (!event_desc) {
- ret = -ENOENT;
- goto get_error;
- }
/*
* We tolerate no failure path after event creation. It will stay
* invariant for the rest of the session.
*/
event = ltt_event_create(channel, event_name, LTTNG_KERNEL_TRACEPOINTS,
- event_desc, NULL);
+ NULL);
if (!event) {
goto create_error;
ret = -EEXIST;
return;
create_error:
- ltt_event_put(event_desc);
-get_error:
WARN_ON(1);
return; /* not allowed to return error */
}
struct lttng_kernel_event __user *uevent_param)
{
struct ltt_channel *channel = channel_file->private_data;
- const struct lttng_event_desc *event_desc;
struct ltt_event *event;
char *event_name;
struct lttng_kernel_event event_param;
goto name_error;
}
event_name[PATH_MAX - 1] = '\0';
-
- event_desc = ltt_event_get(event_name);
- if (!event_desc) {
- ret = -ENOENT;
- goto get_error;
+ switch (event_param.instrumentation) {
+ case LTTNG_KERNEL_KPROBES:
+ event_param.u.kprobe.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ case LTTNG_KERNEL_FUNCTION_TRACER:
+ event_param.u.ftrace.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ default:
+ break;
}
event_fd = get_unused_fd();
if (event_fd < 0) {
* We tolerate no failure path after event creation. It will stay
* invariant for the rest of the session.
*/
- event = ltt_event_create(channel, event_name, event_param.instrumentation,
- event_desc, NULL);
+ event = ltt_event_create(channel, event_name, &event_param, NULL);
if (!event) {
- goto event_error;
ret = -EEXIST;
+ goto event_error;
}
event_file->private_data = event;
fd_install(event_fd, event_file);
file_error:
put_unused_fd(event_fd);
fd_error:
- ltt_event_put(event_desc);
-get_error:
name_error:
kfree(event_name);
return ret;