summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-10 18:42:38 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-10 18:42:38 +0200
commit7f6e1f3072b6842b2491b2cce28360e8cfea12ad (patch)
tree42491807bffc8a7f9d08a374dd288ba992c4ca57
parent162343a876f14f7604881dd2bc53ca140c82c230 (diff)
Revert "dyndbg: fix problem parsing format="foo bar""
This reverts commit 42f07816ac0cc797928119cc039c414ae2b95d34 as it still causes problems. It will be resolved later, let's revert it so we can also revert the original patch this was supposed to be helping with. Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org> Fixes: 42f07816ac0c ("dyndbg: fix problem parsing format="foo bar"") Cc: Jim Cromie <jim.cromie@gmail.com> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--lib/dynamic_debug.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 04f4c80b0d16..08e4b057514c 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -237,7 +237,6 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords)
{
int nwords = 0;
- vpr_info("entry, buf:'%s'\n", buf);
while (*buf) {
char *end;
@@ -248,8 +247,6 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords)
if (*buf == '#')
break; /* token starts comment, skip rest of line */
- vpr_info("start-of-word:%d '%s'\n", nwords, buf);
-
/* find `end' of word, whitespace separated or quoted */
if (*buf == '"' || *buf == '\'') {
int quote = *buf++;
@@ -260,9 +257,7 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords)
return -EINVAL; /* unclosed quote */
}
} else {
- for (end = buf;
- *end && *end != '=' && !isspace(*end);
- end++)
+ for (end = buf; *end && !isspace(*end); end++)
;
BUG_ON(end == buf);
}
@@ -378,21 +373,30 @@ static int ddebug_parse_query(char *words[], int nwords,
unsigned int i;
int rc = 0;
char *fline;
+ char *keyword, *arg;
- if (nwords % 2 != 0) {
- pr_err("expecting pairs of match-spec <value>\n");
- return -EINVAL;
- }
- if (modname) {
+ if (modname)
/* support $modname.dyndbg=<multiple queries> */
- vpr_info("module:%s queries:'%s'\n", modname);
query->module = modname;
- }
- for (i = 0; i < nwords; i += 2) {
- char *keyword = words[i];
- char *arg = words[i+1];
- vpr_info("keyword:'%s' value:'%s'\n", keyword, arg);
+ for (i = 0; i < nwords; i++) {
+ /* accept keyword=arg */
+ vpr_info("%d w:%s\n", i, words[i]);
+
+ keyword = words[i];
+ arg = strchr(keyword, '=');
+ if (arg) {
+ *arg++ = '\0';
+ } else {
+ i++; /* next word is arg */
+ if (!(i < nwords)) {
+ pr_err("missing arg to keyword: %s\n", keyword);
+ return -EINVAL;
+ }
+ arg = words[i];
+ }
+ vpr_info("%d key:%s arg:%s\n", i, keyword, arg);
+
if (!strcmp(keyword, "func")) {
rc = check_set(&query->function, arg, "func");
} else if (!strcmp(keyword, "file")) {