X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt-debugfs-abi.c;h=86a1720068c49eb96d306f86711f6bb54bd22b65;hb=6d20e0ae80b64714a2e768d9ef110e13c0b43c4a;hp=31465d83ef6d759edb6462453fe484bd09bf0279;hpb=57105fc258cabb75b3a579aaba53b2024fd340e0;p=lttng-modules.git diff --git a/ltt-debugfs-abi.c b/ltt-debugfs-abi.c index 31465d83..86a17200 100644 --- a/ltt-debugfs-abi.c +++ b/ltt-debugfs-abi.c @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -43,6 +44,7 @@ */ static struct dentry *lttng_dentry; +static struct proc_dir_entry *lttng_proc_dentry; static const struct file_operations lttng_fops; static const struct file_operations lttng_session_fops; static const struct file_operations lttng_channel_fops; @@ -222,9 +224,9 @@ long lttng_ioctl(struct file *file, unsigned int cmd, unsigned long arg) return 0; case LTTNG_KERNEL_CALIBRATE: { - struct lttng_calibrate __user *ucalibrate = - (struct lttng_calibrate __user *) arg; - struct lttng_calibrate calibrate; + struct lttng_kernel_calibrate __user *ucalibrate = + (struct lttng_kernel_calibrate __user *) arg; + struct lttng_kernel_calibrate calibrate; int ret; if (copy_from_user(&calibrate, ucalibrate, sizeof(calibrate))) @@ -266,7 +268,7 @@ void lttng_metadata_create_events(struct file *channel_file) * We tolerate no failure path after event creation. It will stay * invariant for the rest of the session. */ - event = ltt_event_create(channel, &metadata_params, NULL); + event = ltt_event_create(channel, &metadata_params, NULL, NULL); if (!event) { goto create_error; } @@ -514,31 +516,41 @@ int lttng_abi_create_event(struct file *channel_file, default: break; } - event_fd = get_unused_fd(); - if (event_fd < 0) { - ret = event_fd; - goto fd_error; - } - event_file = anon_inode_getfile("[lttng_event]", - <tng_event_fops, - NULL, O_RDWR); - if (IS_ERR(event_file)) { - ret = PTR_ERR(event_file); - goto file_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_param, NULL); - if (!event) { - ret = -EINVAL; - goto event_error; + switch (event_param.instrumentation) { + default: + event_fd = get_unused_fd(); + if (event_fd < 0) { + ret = event_fd; + goto fd_error; + } + event_file = anon_inode_getfile("[lttng_event]", + <tng_event_fops, + NULL, O_RDWR); + if (IS_ERR(event_file)) { + ret = PTR_ERR(event_file); + goto file_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_param, NULL, NULL); + if (!event) { + ret = -EINVAL; + goto event_error; + } + event_file->private_data = event; + fd_install(event_fd, event_file); + /* The event holds a reference on the channel */ + atomic_long_inc(&channel_file->f_count); + break; + case LTTNG_KERNEL_SYSCALLS: + ret = lttng_syscalls_register(channel, NULL); + if (ret) + goto fd_error; + event_fd = 0; + break; } - event_file->private_data = event; - fd_install(event_fd, event_file); - /* The event holds a reference on the channel */ - atomic_long_inc(&channel_file->f_count); return event_fd; event_error: @@ -735,8 +747,14 @@ int __init ltt_debugfs_abi_init(void) wrapper_vmalloc_sync_all(); lttng_dentry = debugfs_create_file("lttng", S_IWUSR, NULL, NULL, - <tng_fops); - if (IS_ERR(lttng_dentry) || !lttng_dentry) { + <tng_fops); + if (IS_ERR(lttng_dentry)) + lttng_dentry = NULL; + + lttng_proc_dentry = proc_create_data("lttng", S_IWUSR, NULL, + <tng_fops, NULL); + + if (!lttng_dentry && !lttng_proc_dentry) { printk(KERN_ERR "Error creating LTTng control file\n"); ret = -ENOMEM; goto error; @@ -747,5 +765,8 @@ error: void __exit ltt_debugfs_abi_exit(void) { - debugfs_remove(lttng_dentry); + if (lttng_dentry) + debugfs_remove(lttng_dentry); + if (lttng_proc_dentry) + remove_proc_entry("lttng", NULL); }