From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>,
Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>,
Tom Zanussi <tom.zanussi@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@kernel.org>, Jiri Olsa <jolsa@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: [RFC PATCH 10/11] tracing: of: Add kprobe event support
Date: Sat, 22 Jun 2019 01:19:40 +0900 [thread overview]
Message-ID: <156113398039.28344.4353616217444927643.stgit@devnote2> (raw)
In-Reply-To: <156113387975.28344.16009584175308192243.stgit@devnote2>
Add kprobe event support in event node. User can add probe definitions
by "probes" property as a string array.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
kernel/trace/trace_kprobe.c | 5 +++
kernel/trace/trace_of.c | 65 ++++++++++++++++++++++++++++++++++++-------
2 files changed, 60 insertions(+), 10 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 5166a12a9d49..cc5ba13028cd 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -765,6 +765,11 @@ static int create_or_delete_trace_kprobe(int argc, char **argv)
return ret == -ECANCELED ? -EINVAL : ret;
}
+int trace_kprobe_run_command(const char *command)
+{
+ return trace_run_command(command, create_or_delete_trace_kprobe);
+}
+
static int trace_kprobe_release(struct dyn_event *ev)
{
struct trace_kprobe *tk = to_trace_kprobe(ev);
diff --git a/kernel/trace/trace_of.c b/kernel/trace/trace_of.c
index 696f59234e62..43d87e5065a3 100644
--- a/kernel/trace/trace_of.c
+++ b/kernel/trace/trace_of.c
@@ -23,6 +23,7 @@ extern void __init trace_init_tracepoint_printk(void);
extern ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
unsigned long size, int cpu_id);
extern int trigger_process_regex(struct trace_event_file *file, char *buff);
+extern int trace_kprobe_run_command(const char *command);
static void __init
trace_of_set_ftrace_options(struct trace_array *tr, struct device_node *node)
@@ -99,14 +100,47 @@ trace_of_enable_events(struct trace_array *tr, struct device_node *node)
}
}
+static int __init
+trace_of_add_kprobe_event(struct device_node *node,
+ const char *group, const char *event)
+{
+ struct property *prop;
+ char buf[MAX_BUF_LEN];
+ const char *p;
+ char *q;
+ int len, ret;
+
+ len = snprintf(buf, ARRAY_SIZE(buf) - 1, "p:%s/%s ", group, event);
+ if (len >= ARRAY_SIZE(buf)) {
+ pr_err("Event name is too long: %s\n", event);
+ return -E2BIG;
+ }
+ q = buf + len;
+ len = ARRAY_SIZE(buf) - len;
+
+ of_property_for_each_string(node, "probes", prop, p) {
+ if (strlcpy(q, p, len) >= len) {
+ pr_err("Probe definition is too long: %s\n", p);
+ return -E2BIG;
+ }
+ ret = trace_kprobe_run_command(buf);
+ if (ret < 0) {
+ pr_err("Failed to add probe: %s\n", buf);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
static void __init
trace_of_init_one_event(struct trace_array *tr, struct device_node *node)
{
struct trace_event_file *file;
struct property *prop;
char buf[MAX_BUF_LEN];
- char *bufp;
- const char *p;
+ const char *p, *group;
+ char *event;
int err;
if (!of_node_name_prefix(node, "event"))
@@ -123,18 +157,29 @@ trace_of_init_one_event(struct trace_array *tr, struct device_node *node)
pr_err("Event name is too long: %s\n", p);
return;
}
- bufp = buf;
-
- p = strsep(&bufp, ":");
- if (!bufp) {
- pr_err("%s has no group name\n", buf);
- return;
+ event = buf;
+
+ group = strsep(&event, ":");
+ /* For a kprobe event, we have to generates an event at first */
+ if (of_find_property(node, "probes", NULL)) {
+ if (!event) {
+ event = buf;
+ group = "kprobes";
+ }
+ err = trace_of_add_kprobe_event(node, group, event);
+ if (err < 0)
+ return;
+ } else {
+ if (!event) {
+ pr_err("%s has no group name\n", buf);
+ return;
+ }
}
mutex_lock(&event_mutex);
- file = find_event_file(tr, buf, bufp);
+ file = find_event_file(tr, group, event);
if (!file) {
- pr_err("Failed to find event: %s\n", buf);
+ pr_err("Failed to find event: %s:%s\n", group, event);
return;
}
next prev parent reply other threads:[~2019-06-21 16:19 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-21 16:18 [RFC PATCH 00/11] tracing: of: Boot time tracing using devicetree Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 01/11] tracing: Apply soft-disabled and filter to tracepoints printk Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 02/11] tracing: kprobes: Output kprobe event to printk buffer Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 03/11] tracing: Expose EXPORT_SYMBOL_GPL symbol Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 04/11] tracing: kprobes: Register to dynevent earlier stage Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 05/11] tracing: Accept different type for synthetic event fields Masami Hiramatsu
2019-06-21 16:18 ` [RFC PATCH 06/11] tracing: Add NULL trace-array check in print_synth_event() Masami Hiramatsu
2019-06-21 16:19 ` [RFC PATCH 07/11] dt-bindings: tracing: Add ftrace binding document Masami Hiramatsu
2019-06-21 16:19 ` [RFC PATCH 08/11] tracing: of: Add setup tracing by devicetree support Masami Hiramatsu
2019-06-21 16:19 ` [RFC PATCH 09/11] tracing: of: Add trace event settings Masami Hiramatsu
2019-06-21 16:19 ` Masami Hiramatsu [this message]
2019-06-21 16:19 ` [RFC PATCH 11/11] tracing: of: Add synthetic event support Masami Hiramatsu
2019-06-23 19:58 ` [RFC PATCH 00/11] tracing: of: Boot time tracing using devicetree Frank Rowand
2019-06-24 2:52 ` Masami Hiramatsu
2019-06-24 22:31 ` Frank Rowand
2019-06-25 5:00 ` Masami Hiramatsu
2019-07-15 13:55 ` Frank Rowand
2019-07-17 0:57 ` Masami Hiramatsu
2019-06-26 21:58 ` Rob Herring
2019-06-27 2:55 ` Frank Rowand
2019-06-27 10:58 ` Masami Hiramatsu
2019-07-02 9:47 ` Masami Hiramatsu
2019-07-02 13:30 ` Rob Herring
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=156113398039.28344.4353616217444927643.stgit@devnote2 \
--to=mhiramat@kernel.org \
--cc=acme@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=frowand.list@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=robh+dt@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tom.zanussi@linux.intel.com \
/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.