projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add lttng irq probe support
[lttng-modules.git]
/
ltt-debugfs-abi.c
diff --git
a/ltt-debugfs-abi.c
b/ltt-debugfs-abi.c
index a10236134a287a47207825fbb3bd49d831168600..9043759f960102c443196f4e9567680cd8371f05 100644
(file)
--- a/
ltt-debugfs-abi.c
+++ b/
ltt-debugfs-abi.c
@@
-53,7
+53,7
@@
int lttng_abi_create_session(void)
session = ltt_session_create();
if (!session)
return -ENOMEM;
session = ltt_session_create();
if (!session)
return -ENOMEM;
- session_fd = get_unused_fd
_flags(O_RDWR
);
+ session_fd = get_unused_fd
(
);
if (session_fd < 0) {
ret = session_fd;
goto fd_error;
if (session_fd < 0) {
ret = session_fd;
goto fd_error;
@@
-119,7
+119,7
@@
int lttng_abi_create_channel(struct file *session_file,
if (copy_from_user(&chan_param, uchan_param, sizeof(chan_param)))
return -EFAULT;
if (copy_from_user(&chan_param, uchan_param, sizeof(chan_param)))
return -EFAULT;
- chan_fd = get_unused_fd
_flags(O_RDWR
);
+ chan_fd = get_unused_fd
(
);
if (chan_fd < 0) {
ret = chan_fd;
goto fd_error;
if (chan_fd < 0) {
ret = chan_fd;
goto fd_error;
@@
-141,14
+141,14
@@
int lttng_abi_create_channel(struct file *session_file,
chan_param.switch_timer_interval,
chan_param.read_timer_interval);
if (!chan) {
chan_param.switch_timer_interval,
chan_param.read_timer_interval);
if (!chan) {
- ret = -E
NOMEM
;
+ ret = -E
INVAL
;
goto chan_error;
}
chan->file = chan_file;
chan_file->private_data = chan;
fd_install(chan_fd, chan_file);
/* The channel created holds a reference on the session */
goto chan_error;
}
chan->file = chan_file;
chan_file->private_data = chan;
fd_install(chan_fd, chan_file);
/* The channel created holds a reference on the session */
- atomic_inc(&session_file->f_count);
+ atomic_
long_
inc(&session_file->f_count);
return chan_fd;
return chan_fd;
@@
-202,7
+202,9
@@
static
int lttng_session_release(struct inode *inode, struct file *file)
{
struct ltt_session *session = file->private_data;
int lttng_session_release(struct inode *inode, struct file *file)
{
struct ltt_session *session = file->private_data;
- ltt_session_destroy(session);
+
+ if (session)
+ ltt_session_destroy(session);
return 0;
}
return 0;
}
@@
-226,7
+228,7
@@
int lttng_abi_open_stream(struct file *channel_file)
if (!buf)
return -ENOENT;
if (!buf)
return -ENOENT;
- stream_fd = get_unused_fd
_flags(O_RDWR
);
+ stream_fd = get_unused_fd
(
);
if (stream_fd < 0) {
ret = stream_fd;
goto fd_error;
if (stream_fd < 0) {
ret = stream_fd;
goto fd_error;
@@
-240,7
+242,7
@@
int lttng_abi_open_stream(struct file *channel_file)
}
fd_install(stream_fd, stream_file);
/* The stream holds a reference on the channel */
}
fd_install(stream_fd, stream_file);
/* The stream holds a reference on the channel */
- atomic_inc(&channel_file->f_count);
+ atomic_
long_
inc(&channel_file->f_count);
return stream_fd;
file_error:
return stream_fd;
file_error:
@@
-266,12
+268,12
@@
int lttng_abi_create_event(struct file *channel_file,
event_name = kmalloc(PATH_MAX, GFP_KERNEL);
if (!event_name)
return -ENOMEM;
event_name = kmalloc(PATH_MAX, GFP_KERNEL);
if (!event_name)
return -ENOMEM;
- if (strncpy_from_user(event_name, uevent_param->name, PATH_MAX)) {
+ if (strncpy_from_user(event_name, uevent_param->name, PATH_MAX)
< 0
) {
ret = -EFAULT;
goto name_error;
}
event_name[PATH_MAX - 1] = '\0';
ret = -EFAULT;
goto name_error;
}
event_name[PATH_MAX - 1] = '\0';
- event_fd = get_unused_fd
_flags(O_RDWR
);
+ event_fd = get_unused_fd
(
);
if (event_fd < 0) {
ret = event_fd;
goto fd_error;
if (event_fd < 0) {
ret = event_fd;
goto fd_error;
@@
-288,7
+290,7
@@
int lttng_abi_create_event(struct file *channel_file,
* invariant for the rest of the session.
*/
event = ltt_event_create(channel, event_name, event_param.itype,
* invariant for the rest of the session.
*/
event = ltt_event_create(channel, event_name, event_param.itype,
-
NULL, NULL); /* TODO non-nul
l probe */
+
(void *) 0x1, NULL); /* TODO connect rea
l probe */
if (!event) {
goto event_error;
ret = -EEXIST;
if (!event) {
goto event_error;
ret = -EEXIST;
@@
-296,7
+298,7
@@
int lttng_abi_create_event(struct file *channel_file,
event_file->private_data = event;
fd_install(event_fd, event_file);
/* The event holds a reference on the channel */
event_file->private_data = event;
fd_install(event_fd, event_file);
/* The event holds a reference on the channel */
- atomic_inc(&channel_file->f_count);
+ atomic_
long_
inc(&channel_file->f_count);
kfree(event_name);
return event_fd;
kfree(event_name);
return event_fd;
@@
-372,7
+374,9
@@
static
int lttng_channel_release(struct inode *inode, struct file *file)
{
struct ltt_channel *channel = file->private_data;
int lttng_channel_release(struct inode *inode, struct file *file)
{
struct ltt_channel *channel = file->private_data;
- fput(channel->session->file);
+
+ if (channel)
+ fput(channel->session->file);
return 0;
}
return 0;
}
@@
-392,7
+396,9
@@
static
int lttng_event_release(struct inode *inode, struct file *file)
{
struct ltt_event *event = file->private_data;
int lttng_event_release(struct inode *inode, struct file *file)
{
struct ltt_event *event = file->private_data;
- fput(event->chan->file);
+
+ if (event)
+ fput(event->chan->file);
return 0;
}
return 0;
}
@@
-401,12
+407,12
@@
static const struct file_operations lttng_event_fops = {
.release = lttng_event_release,
};
.release = lttng_event_release,
};
-
static
int __init ltt_debugfs_abi_init(void)
+int __init ltt_debugfs_abi_init(void)
{
int ret = 0;
lttng_dentry = debugfs_create_file("lttng", S_IWUSR, NULL, NULL,
{
int ret = 0;
lttng_dentry = debugfs_create_file("lttng", S_IWUSR, NULL, NULL,
- <tng_
session_
fops);
+ <tng_fops);
if (IS_ERR(lttng_dentry) || !lttng_dentry) {
printk(KERN_ERR "Error creating LTTng control file\n");
ret = -ENOMEM;
if (IS_ERR(lttng_dentry) || !lttng_dentry) {
printk(KERN_ERR "Error creating LTTng control file\n");
ret = -ENOMEM;
@@
-416,15
+422,7
@@
error:
return ret;
}
return ret;
}
-module_init(ltt_debugfs_abi_init);
-
-static void __exit ltt_debugfs_abi_exit(void)
+void __exit ltt_debugfs_abi_exit(void)
{
debugfs_remove(lttng_dentry);
}
{
debugfs_remove(lttng_dentry);
}
-
-module_exit(ltt_debugfs_abi_exit);
-
-MODULE_LICENSE("GPL and additional rights");
-MODULE_AUTHOR("Mathieu Desnoyers");
-MODULE_DESCRIPTION("Linux Trace Toolkit Next Generation DebugFS ABI");
This page took
0.024895 seconds
and
4
git commands to generate.