From: Tom Zanussi <tom.zanussi@linux.intel.com>
To: rostedt@goodmis.org
Cc: tglx@linutronix.de, mhiramat@kernel.org, namhyung@kernel.org,
vedang.patel@intel.com, bigeasy@linutronix.de,
joel.opensrc@gmail.com, joelaf@google.com,
mathieu.desnoyers@efficios.com, baohong.liu@intel.com,
rajvi.jingar@intel.com, julia@ni.com,
linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org,
Tom Zanussi <tom.zanussi@linux.intel.com>
Subject: [PATCH v4 10/37] tracing: Break out hist trigger assignment parsing
Date: Mon, 30 Oct 2017 15:51:52 -0500 [thread overview]
Message-ID: <ac5a7cb10536ff1d082b8461e55851b7d3f2badb.1509395595.git.tom.zanussi@linux.intel.com> (raw)
In-Reply-To: <cover.1509395595.git.tom.zanussi@linux.intel.com>
In-Reply-To: <cover.1509395595.git.tom.zanussi@linux.intel.com>
This will make it easier to add variables, and makes the parsing code
cleaner regardless.
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Rajvi Jingar <rajvi.jingar@intel.com>
---
kernel/trace/trace_events_hist.c | 72 ++++++++++++++++++++++++++++------------
1 file changed, 51 insertions(+), 21 deletions(-)
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 37f5ace..e4368bb 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -251,6 +251,51 @@ static void destroy_hist_trigger_attrs(struct hist_trigger_attrs *attrs)
kfree(attrs);
}
+static int parse_assignment(char *str, struct hist_trigger_attrs *attrs)
+{
+ int ret = 0;
+
+ if ((strncmp(str, "key=", strlen("key=")) == 0) ||
+ (strncmp(str, "keys=", strlen("keys=")) == 0)) {
+ attrs->keys_str = kstrdup(str, GFP_KERNEL);
+ if (!attrs->keys_str) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ } else if ((strncmp(str, "val=", strlen("val=")) == 0) ||
+ (strncmp(str, "vals=", strlen("vals=")) == 0) ||
+ (strncmp(str, "values=", strlen("values=")) == 0)) {
+ attrs->vals_str = kstrdup(str, GFP_KERNEL);
+ if (!attrs->vals_str) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ } else if (strncmp(str, "sort=", strlen("sort=")) == 0) {
+ attrs->sort_key_str = kstrdup(str, GFP_KERNEL);
+ if (!attrs->sort_key_str) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ } else if (strncmp(str, "name=", strlen("name=")) == 0) {
+ attrs->name = kstrdup(str, GFP_KERNEL);
+ if (!attrs->name) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ } else if (strncmp(str, "size=", strlen("size=")) == 0) {
+ int map_bits = parse_map_size(str);
+
+ if (map_bits < 0) {
+ ret = map_bits;
+ goto out;
+ }
+ attrs->map_bits = map_bits;
+ } else
+ ret = -EINVAL;
+ out:
+ return ret;
+}
+
static struct hist_trigger_attrs *parse_hist_trigger_attrs(char *trigger_str)
{
struct hist_trigger_attrs *attrs;
@@ -263,33 +308,18 @@ static struct hist_trigger_attrs *parse_hist_trigger_attrs(char *trigger_str)
while (trigger_str) {
char *str = strsep(&trigger_str, ":");
- if ((strncmp(str, "key=", strlen("key=")) == 0) ||
- (strncmp(str, "keys=", strlen("keys=")) == 0))
- attrs->keys_str = kstrdup(str, GFP_KERNEL);
- else if ((strncmp(str, "val=", strlen("val=")) == 0) ||
- (strncmp(str, "vals=", strlen("vals=")) == 0) ||
- (strncmp(str, "values=", strlen("values=")) == 0))
- attrs->vals_str = kstrdup(str, GFP_KERNEL);
- else if (strncmp(str, "sort=", strlen("sort=")) == 0)
- attrs->sort_key_str = kstrdup(str, GFP_KERNEL);
- else if (strncmp(str, "name=", strlen("name=")) == 0)
- attrs->name = kstrdup(str, GFP_KERNEL);
- else if (strcmp(str, "pause") == 0)
+ if (strchr(str, '=')) {
+ ret = parse_assignment(str, attrs);
+ if (ret)
+ goto free;
+ } else if (strcmp(str, "pause") == 0)
attrs->pause = true;
else if ((strcmp(str, "cont") == 0) ||
(strcmp(str, "continue") == 0))
attrs->cont = true;
else if (strcmp(str, "clear") == 0)
attrs->clear = true;
- else if (strncmp(str, "size=", strlen("size=")) == 0) {
- int map_bits = parse_map_size(str);
-
- if (map_bits < 0) {
- ret = map_bits;
- goto free;
- }
- attrs->map_bits = map_bits;
- } else {
+ else {
ret = -EINVAL;
goto free;
}
--
1.9.3
next prev parent reply other threads:[~2017-10-30 21:02 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-30 20:51 [PATCH v4 00/37] tracing: Inter-event (e.g. latency) support Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 01/37] tracing: Move hist trigger Documentation to histogram.txt Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 02/37] tracing: Add Documentation for log2 modifier Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 03/37] tracing: Add support to detect and avoid duplicates Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 04/37] tracing: Remove code which merges duplicates Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 05/37] ring-buffer: Add interface for setting absolute time stamps Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 06/37] ring-buffer: Redefine the unimplemented RINGBUF_TYPE_TIME_STAMP Tom Zanussi
2017-11-06 5:09 ` Namhyung Kim
2017-11-06 15:52 ` Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 07/37] tracing: Add timestamp_mode trace file Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 08/37] tracing: Give event triggers access to ring_buffer_event Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 09/37] tracing: Add ring buffer event param to hist field functions Tom Zanussi
2017-10-30 20:51 ` Tom Zanussi [this message]
2017-10-30 20:51 ` [PATCH v4 11/37] tracing: Add hist trigger timestamp support Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 12/37] tracing: Add per-element variable support to tracing_map Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 13/37] tracing: Add hist_data member to hist_field Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 14/37] tracing: Add usecs modifier for hist trigger timestamps Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 15/37] tracing: Add variable support to hist triggers Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 16/37] tracing: Account for variables in named trigger compatibility Tom Zanussi
2017-10-30 20:51 ` [PATCH v4 17/37] tracing: Move get_hist_field_flags() Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 18/37] tracing: Add simple expression support to hist triggers Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 19/37] tracing: Generalize per-element hist trigger data Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 20/37] tracing: Pass tracing_map_elt to hist_field accessor functions Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 21/37] tracing: Add hist_field 'type' field Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 22/37] tracing: Add variable reference handling to hist triggers Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 23/37] tracing: Add hist trigger action hook Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 24/37] tracing: Add support for 'synthetic' events Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 25/37] tracing: Add support for 'field variables' Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 26/37] tracing: Add 'onmatch' hist trigger action support Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 27/37] tracing: Add 'onmax' " Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 28/37] tracing: Allow whitespace to surround hist trigger filter Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 29/37] tracing: Add cpu field for hist triggers Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 30/37] tracing: Add hist trigger support for variable reference aliases Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 31/37] tracing: Add 'last error' error facility for hist triggers Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 32/37] tracing: Add inter-event hist trigger Documentation Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 33/37] tracing: Make tracing_set_clock() non-static Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 34/37] tracing: Add a clock attribute for hist triggers Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 35/37] tracing: Increase trace_recursive_lock() limit for synthetic events Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 36/37] tracing: Add inter-event blurb to HIST_TRIGGERS config option Tom Zanussi
2017-10-30 20:52 ` [PATCH v4 37/37] selftests: ftrace: Add inter-event hist triggers testcases Tom Zanussi
2017-10-31 14:29 ` Masami Hiramatsu
2017-10-31 20:40 ` Jingar, Rajvi
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=ac5a7cb10536ff1d082b8461e55851b7d3f2badb.1509395595.git.tom.zanussi@linux.intel.com \
--to=tom.zanussi@linux.intel.com \
--cc=baohong.liu@intel.com \
--cc=bigeasy@linutronix.de \
--cc=joel.opensrc@gmail.com \
--cc=joelaf@google.com \
--cc=julia@ni.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=namhyung@kernel.org \
--cc=rajvi.jingar@intel.com \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=vedang.patel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).