|
@@ -409,6 +409,11 @@ static void put_system(struct ftrace_subsystem_dir *dir)
|
|
|
mutex_unlock(&event_mutex);
|
|
|
}
|
|
|
|
|
|
+static void *event_file_data(struct file *filp)
|
|
|
+{
|
|
|
+ return ACCESS_ONCE(file_inode(filp)->i_private);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Open and update trace_array ref count.
|
|
|
* Must have the current trace_array passed to it.
|
|
@@ -946,14 +951,18 @@ static int trace_format_open(struct inode *inode, struct file *file)
|
|
|
static ssize_t
|
|
|
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
|
|
|
{
|
|
|
- struct ftrace_event_call *call = filp->private_data;
|
|
|
+ int id = (long)event_file_data(filp);
|
|
|
char buf[32];
|
|
|
int len;
|
|
|
|
|
|
if (*ppos)
|
|
|
return 0;
|
|
|
|
|
|
- len = sprintf(buf, "%d\n", call->event.type);
|
|
|
+ if (unlikely(!id))
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ len = sprintf(buf, "%d\n", id);
|
|
|
+
|
|
|
return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
|
|
|
}
|
|
|
|
|
@@ -1240,7 +1249,6 @@ static const struct file_operations ftrace_event_format_fops = {
|
|
|
};
|
|
|
|
|
|
static const struct file_operations ftrace_event_id_fops = {
|
|
|
- .open = tracing_open_generic,
|
|
|
.read = event_id_read,
|
|
|
.llseek = default_llseek,
|
|
|
};
|
|
@@ -1488,8 +1496,8 @@ event_create_dir(struct dentry *parent,
|
|
|
|
|
|
#ifdef CONFIG_PERF_EVENTS
|
|
|
if (call->event.type && call->class->reg)
|
|
|
- trace_create_file("id", 0444, file->dir, call,
|
|
|
- id);
|
|
|
+ trace_create_file("id", 0444, file->dir,
|
|
|
+ (void *)(long)call->event.type, id);
|
|
|
#endif
|
|
|
|
|
|
/*
|