Now that the synthetic event command passes in ';' as an additional
separator to trace_parse_run_command(), all of the parsing related to
semicolon can be removed.

Additionally, the since create_or_delete_synth_event() now receives
the raw command string, it doesn't need save_cmdstr(), which can also
be removed.

Signed-off-by: Tom Zanussi <zanu...@kernel.org>
---
 kernel/trace/trace_events_synth.c | 65 ++++---------------------------
 1 file changed, 8 insertions(+), 57 deletions(-)

diff --git a/kernel/trace/trace_events_synth.c 
b/kernel/trace/trace_events_synth.c
index e6659bb9a500..2333025ef31e 100644
--- a/kernel/trace/trace_events_synth.c
+++ b/kernel/trace/trace_events_synth.c
@@ -48,7 +48,7 @@ static int errpos(const char *str)
        return err_pos(last_cmd, str);
 }
 
-static void last_cmd_set(char *str)
+static void last_cmd_set(const char *str)
 {
        if (!str)
                return;
@@ -587,9 +587,6 @@ static struct synth_field *parse_synth_field(int argc, 
const char **argv,
        int len, ret = 0;
        ssize_t size;
 
-       if (field_type[0] == ';')
-               field_type++;
-
        if (!strcmp(field_type, "unsigned")) {
                if (argc < 3) {
                        synth_err(SYNTH_ERR_INCOMPLETE_TYPE, 
errpos(field_type));
@@ -612,8 +609,6 @@ static struct synth_field *parse_synth_field(int argc, 
const char **argv,
        array = strchr(field_name, '[');
        if (array)
                len -= strlen(array);
-       else if (field_name[len - 1] == ';')
-               len--;
 
        field->name = kmemdup_nul(field_name, len, GFP_KERNEL);
        if (!field->name) {
@@ -626,17 +621,11 @@ static struct synth_field *parse_synth_field(int argc, 
const char **argv,
                goto free;
        }
 
-       if (field_type[0] == ';')
-               field_type++;
        len = strlen(field_type) + 1;
 
-        if (array) {
-                int l = strlen(array);
+        if (array)
+                len += strlen(array);
 
-                if (l && array[l - 1] == ';')
-                        l--;
-                len += l;
-        }
        if (prefix)
                len += strlen(prefix);
 
@@ -648,11 +637,8 @@ static struct synth_field *parse_synth_field(int argc, 
const char **argv,
        if (prefix)
                strcat(field->type, prefix);
        strcat(field->type, field_type);
-       if (array) {
+       if (array)
                strcat(field->type, array);
-               if (field->type[len - 1] == ';')
-                       field->type[len - 1] = '\0';
-       }
 
        size = synth_field_size(field->type);
        if (size < 0) {
@@ -1155,47 +1141,12 @@ int synth_event_gen_cmd_array_start(struct dynevent_cmd 
*cmd, const char *name,
 }
 EXPORT_SYMBOL_GPL(synth_event_gen_cmd_array_start);
 
-static int save_cmdstr(int argc, const char *name, const char **argv)
-{
-       struct seq_buf s;
-       char *buf;
-       int i;
-
-       buf = kzalloc(MAX_DYNEVENT_CMD_LEN, GFP_KERNEL);
-       if (!buf)
-               return -ENOMEM;
-
-       seq_buf_init(&s, buf, MAX_DYNEVENT_CMD_LEN);
-
-       seq_buf_puts(&s, name);
-
-       for (i = 0; i < argc; i++) {
-               seq_buf_putc(&s, ' ');
-               seq_buf_puts(&s, argv[i]);
-       }
-
-       if (!seq_buf_buffer_left(&s)) {
-               synth_err(SYNTH_ERR_CMD_TOO_LONG, 0);
-               kfree(buf);
-               return -EINVAL;
-       }
-       buf[s.len] = 0;
-       last_cmd_set(buf);
-
-       kfree(buf);
-       return 0;
-}
-
 static int __create_synth_event(int argc, const char *name, const char **argv)
 {
        struct synth_field *field, *fields[SYNTH_FIELDS_MAX];
        struct synth_event *event = NULL;
        int i, consumed = 0, n_fields = 0, ret = 0;
 
-       ret = save_cmdstr(argc, name, argv);
-       if (ret)
-               return ret;
-
        /*
         * Argument syntax:
         *  - Add synthetic event: <event_name> field[;field] ...
@@ -1224,8 +1175,6 @@ static int __create_synth_event(int argc, const char 
*name, const char **argv)
        }
 
        for (i = 0; i < argc - 1; i++) {
-               if (strcmp(argv[i], ";") == 0)
-                       continue;
                if (n_fields == SYNTH_FIELDS_MAX) {
                        synth_err(SYNTH_ERR_TOO_MANY_FIELDS, 0);
                        ret = -EINVAL;
@@ -1241,7 +1190,7 @@ static int __create_synth_event(int argc, const char 
*name, const char **argv)
                i += consumed - 1;
        }
 
-       if (i < argc && strcmp(argv[i], ";") != 0) {
+       if (i < argc) {
                synth_err(SYNTH_ERR_INVALID_FIELD, errpos(argv[i]));
                ret = -EINVAL;
                goto err;
@@ -1384,6 +1333,8 @@ static int create_or_delete_synth_event(int argc, char 
**argv,
        const char *name = argv[0];
        int ret;
 
+       last_cmd_set(raw_cmd);
+
        /* trace_run_command() ensures argc != 0 */
        if (name[0] == '!') {
                ret = synth_event_delete(name + 1);
@@ -1399,7 +1350,7 @@ static int synth_event_run_command(struct dynevent_cmd 
*cmd)
        struct synth_event *se;
        int ret;
 
-       ret = trace_run_command(cmd->seq.buffer, create_or_delete_synth_event);
+       ret = trace_run_command_add_sep(cmd->seq.buffer, 
create_or_delete_synth_event, ';');
        if (ret)
                return ret;
 
-- 
2.17.1

Reply via email to