summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-10 19:42:38 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-10 19:42:38 +0300
commit7f6e1f3072b6842b2491b2cce28360e8cfea12ad (patch)
tree42491807bffc8a7f9d08a374dd288ba992c4ca57 /lib
parent162343a876f14f7604881dd2bc53ca140c82c230 (diff)
downloadlinux-7f6e1f3072b6842b2491b2cce28360e8cfea12ad.tar.xz
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>
Diffstat (limited to 'lib')
-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")) {