From: Borislav Petkov <bp@amd64.org>
To: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Frederic Weisbecker <fweisbec@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Borislav Petkov <borislav.petkov@amd.com>
Subject: [RFC PATCH -v2 1/4] trace events: Interface to add files to debugfs
Date: Thu, 16 Aug 2012 19:45:20 +0200 [thread overview]
Message-ID: <1345139123-15212-2-git-send-email-bp@amd64.org> (raw)
In-Reply-To: <1345139123-15212-1-git-send-email-bp@amd64.org>
From: Borislav Petkov <borislav.petkov@amd.com>
This generic interface is supposed to be used to add files to
(debugfs)/tracing/events/<subsys>/<event_name>/ which are supposed to
export additional events functionality to users.
For example, the file descriptor of a persistent event can be exported
like this in the 'pers' node:
/mnt/dbg/tracing/events/mce/mce_record/
|-- enable
|-- filter
|-- format
|-- id
`-- persistent
So that userspace tools can read it out and map it directly.
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
---
include/linux/ftrace_event.h | 3 +++
kernel/trace/trace.c | 4 ++++
kernel/trace/trace.h | 1 +
kernel/trace/trace_events.c | 35 +++++++++++++++++++++++++++++++++++
4 files changed, 43 insertions(+)
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 642928cf57b4..f4f283954cbf 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -265,6 +265,9 @@ extern int trace_define_field(struct ftrace_event_call *call, const char *type,
int is_signed, int filter_type);
extern int trace_add_event_call(struct ftrace_event_call *call);
extern void trace_remove_event_call(struct ftrace_event_call *call);
+extern struct dentry *
+trace_add_file(const char *dir_name, const char *fname, umode_t mode,
+ void *data, const struct file_operations *fops);
#define is_signed_type(type) (((type)(-1)) < 0)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 5c38c81496ce..e45479572328 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4641,6 +4641,10 @@ struct dentry *trace_create_file(const char *name,
return ret;
}
+void trace_remove_file(struct dentry *d)
+{
+ return debugfs_remove(d);
+}
static struct dentry *trace_options_init_dentry(void)
{
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 55e1f7f0db12..fd639f45c425 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -338,6 +338,7 @@ struct dentry *trace_create_file(const char *name,
struct dentry *parent,
void *data,
const struct file_operations *fops);
+void trace_remove_file(struct dentry *d);
struct dentry *tracing_init_dentry(void);
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 29111da1d100..5eda4f584380 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1199,6 +1199,41 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
return 0;
}
+static struct dentry *__trace_add_file(struct ftrace_event_call *call,
+ const char *fname, umode_t mode,
+ void *data,
+ const struct file_operations *fops)
+{
+ struct dentry *ret;
+
+ mutex_lock(&event_mutex);
+ ret = trace_create_file(fname, mode, call->dir, data, fops);
+ mutex_unlock(&event_mutex);
+
+ return ret;
+}
+
+/*
+ * Assumptions:
+ * - event debugfs dir is already initialized
+ * - trace event is not declared in a module
+ */
+struct dentry *trace_add_file(const char *dir_name, const char *fname,
+ umode_t mode, void *data,
+ const struct file_operations *fops)
+{
+ struct ftrace_event_call *call;
+
+ if (!strlen(fname))
+ return NULL;
+
+ list_for_each_entry(call, &ftrace_events, list) {
+ if (!strncmp(call->name, dir_name, strlen(dir_name)))
+ return __trace_add_file(call, fname, mode, data, fops);
+ }
+ return NULL;
+}
+
static int
__trace_add_event_call(struct ftrace_event_call *call, struct module *mod,
const struct file_operations *id,
--
1.7.11.rc1
next prev parent reply other threads:[~2012-08-16 17:46 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-16 17:45 [RFC PATCH -v2 0/4] Persistent events Borislav Petkov
2012-08-16 17:45 ` Borislav Petkov [this message]
2012-08-16 22:06 ` [RFC PATCH -v2 1/4] trace events: Interface to add files to debugfs Steven Rostedt
2012-08-17 7:26 ` Borislav Petkov
2012-08-16 17:45 ` [RFC PATCH -v2 2/4] perf: Add persistent events Borislav Petkov
2012-08-16 17:45 ` [RFC PATCH -v2 3/4] perf: Add persistent event facilities Borislav Petkov
2012-08-16 22:12 ` Steven Rostedt
2012-08-17 7:27 ` Borislav Petkov
2012-12-09 12:06 ` Borislav Petkov
2012-08-21 10:08 ` Peter Zijlstra
2012-08-21 10:21 ` Peter Zijlstra
2012-08-16 17:45 ` [RFC PATCH -v2 4/4] persistent test Borislav Petkov
2012-08-16 20:12 ` [RFC PATCH -v2 0/4] Persistent events Jonathan Corbet
2012-08-16 20:55 ` Borislav Petkov
2012-08-16 21:13 ` Steven Rostedt
2012-08-16 21:41 ` Borislav Petkov
2012-08-16 22:00 ` Steven Rostedt
2012-08-17 7:38 ` Borislav Petkov
2012-08-17 15:20 ` Steven Rostedt
2012-08-17 17:06 ` Peter Zijlstra
2012-08-21 10:30 ` Peter Zijlstra
2012-08-21 13:11 ` Borislav Petkov
2012-08-21 13:41 ` Steven Rostedt
2012-08-21 13:50 ` Borislav Petkov
2012-08-21 14:03 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345139123-15212-2-git-send-email-bp@amd64.org \
--to=bp@amd64.org \
--cc=borislav.petkov@amd.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.