This will make it easier to add variables, and makes the parsing code
cleaner regardless.

Signed-off-by: Tom Zanussi <tom.zanu...@linux.intel.com>
---
 kernel/trace/trace_events_hist.c | 56 +++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 21 deletions(-)

diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 613ff05..fccbffe 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -251,6 +251,35 @@ 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);
+       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 (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 +292,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

Reply via email to