X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-abi.c;h=381a73904dfe60e6e6d0a8bc66a0cecf5fd65bf8;hb=1816623505f9a0111fa5041da63f8e1099b6ffcc;hp=ab0a11286c7ba75f423e430085b616c0df4e76b0;hpb=2d2464bd8910c4c8a090675338159f6642c83f41;p=lttng-modules.git diff --git a/lttng-abi.c b/lttng-abi.c index ab0a1128..381a7390 100644 --- a/lttng-abi.c +++ b/lttng-abi.c @@ -143,43 +143,6 @@ 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) { @@ -188,6 +151,13 @@ void lttng_abi_tracer_version(struct lttng_kernel_tracer_version *v) v->patchlevel = LTTNG_MODULES_PATCHLEVEL_VERSION; } +static +void lttng_abi_tracer_abi_version(struct lttng_kernel_tracer_abi_version *v) +{ + v->major = LTTNG_MODULES_ABI_MAJOR_VERSION; + v->minor = LTTNG_MODULES_ABI_MINOR_VERSION; +} + static long lttng_abi_add_context(struct file *file, struct lttng_kernel_context *context_param, @@ -245,6 +215,8 @@ long lttng_abi_add_context(struct file *file, * Returns a file descriptor listing available tracepoints * LTTNG_KERNEL_WAIT_QUIESCENT * Returns after all previously running probes have completed + * LTTNG_KERNEL_TRACER_ABI_VERSION + * Returns the LTTng kernel tracer ABI version * * The returned session will be deleted when its file descriptor is closed. */ @@ -278,7 +250,19 @@ long lttng_ioctl(struct file *file, unsigned int cmd, unsigned long arg) (struct lttng_kernel_tracer_version __user *) arg; lttng_abi_tracer_version(&version); - + + if (copy_to_user(uversion, &version, sizeof(version))) + return -EFAULT; + return 0; + } + case LTTNG_KERNEL_TRACER_ABI_VERSION: + { + struct lttng_kernel_tracer_abi_version version; + struct lttng_kernel_tracer_abi_version *uversion = + (struct lttng_kernel_tracer_abi_version __user *) arg; + + lttng_abi_tracer_abi_version(&version); + if (copy_to_user(uversion, &version, sizeof(version))) return -EFAULT; return 0; @@ -968,14 +952,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) @@ -1169,6 +1154,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; }