X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttng-abi.c;h=8073e9880ff109b1efdc27dd835b82b19b8f3c47;hb=59fecd6c4447460c6834d1da42c76c7016e5fbc3;hp=02918114252d76071d9c51786f9aa955ad9fdeab;hpb=80f87dd2321bb99f5b8cdab7ea6ff33f6ba99b9e;p=lttng-modules.git diff --git a/lttng-abi.c b/lttng-abi.c index 02918114..8073e988 100644 --- a/lttng-abi.c +++ b/lttng-abi.c @@ -118,7 +118,7 @@ int lttng_abi_tracepoint_list(void) goto fd_error; } - tracepoint_list_file = anon_inode_getfile("[lttng_session]", + tracepoint_list_file = anon_inode_getfile("[lttng_tracepoint_list]", <tng_tracepoint_list_fops, NULL, O_RDWR); if (IS_ERR(tracepoint_list_file)) { @@ -143,6 +143,43 @@ fd_error: return ret; } +static +int lttng_abi_syscall_list(void) +{ + struct file *syscall_list_file; + int file_fd, ret; + + file_fd = get_unused_fd(); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + + syscall_list_file = anon_inode_getfile("[lttng_syscall_list]", + <tng_syscall_list_fops, + NULL, O_RDWR); + if (IS_ERR(syscall_list_file)) { + ret = PTR_ERR(syscall_list_file); + goto file_error; + } + ret = lttng_syscall_list_fops.open(NULL, syscall_list_file); + if (ret < 0) + goto open_error; + fd_install(file_fd, syscall_list_file); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + return file_fd; + +open_error: + fput(syscall_list_file); +file_error: + put_unused_fd(file_fd); +fd_error: + return ret; +} + static void lttng_abi_tracer_version(struct lttng_kernel_tracer_version *v) { @@ -249,6 +286,8 @@ long lttng_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case LTTNG_KERNEL_OLD_TRACEPOINT_LIST: case LTTNG_KERNEL_TRACEPOINT_LIST: return lttng_abi_tracepoint_list(); + case LTTNG_KERNEL_SYSCALL_LIST: + return lttng_abi_syscall_list(); case LTTNG_KERNEL_OLD_WAIT_QUIESCENT: case LTTNG_KERNEL_WAIT_QUIESCENT: synchronize_trace(); @@ -929,14 +968,15 @@ int lttng_abi_create_event(struct file *channel_file, if (ret) goto fd_error; event_fd = 0; - if (event_param->u.syscall.disable) { - ret = lttng_syscall_filter_disable(channel, + if (event_param->u.syscall.enable) { + ret = lttng_syscall_filter_enable(channel, event_param->name[0] == '\0' ? NULL : event_param->name); if (ret) goto fd_error; + } else { - ret = lttng_syscall_filter_enable(channel, + ret = lttng_syscall_filter_disable(channel, event_param->name[0] == '\0' ? NULL : event_param->name); if (ret) @@ -1130,6 +1170,9 @@ old_ctx_end: case LTTNG_KERNEL_OLD_DISABLE: case LTTNG_KERNEL_DISABLE: return lttng_channel_disable(channel); + case LTTNG_KERNEL_SYSCALL_MASK: + return lttng_channel_syscall_mask(channel, + (struct lttng_kernel_syscall_mask __user *) arg); default: return -ENOIOCTLCMD; }