[PATCH v2 24/59] dyndbg: treat comma as a token separator

Louis Chauvet louis.chauvet at bootlin.com
Mon Mar 24 15:18:20 UTC 2025



Le 20/03/2025 à 19:52, Jim Cromie a écrit :
> Treat comma as a token terminator, just like a space.  This allows a
> user to avoid quoting hassles when spaces are otherwise needed:
> 
>   :#> modprobe drm dyndbg=class,DRM_UT_CORE,+p\;class,DRM_UT_KMS,+p
> 
> or as a boot arg:
> 
>   drm.dyndbg=class,DRM_UT_CORE,+p  # todo: support multi-query here
> 
> Given the many ways a boot-line +args can be assembled and then passed
> in/down/around shell based tools, this may allow side-stepping all
> sorts of quoting hassles thru those layers.
> 
> existing query format:
> 
>   modprobe test_dynamic_debug dyndbg="class D2_CORE +p"
> 
> new format:
> 
>   modprobe test_dynamic_debug dyndbg=class,D2_CORE,+p
> 
> Signed-off-by: Jim Cromie <jim.cromie at gmail.com>
> Co-developed-by: Łukasz Bartosik <ukaszb at chromium.org>
> Signed-off-by: Łukasz Bartosik <ukaszb at chromium.org>

This patch seems to be unrelated to the whole series, and can be applied 
on the current rc. What do you think about extracting the patches 24, 
25, 26, 27? I understand 28 depends on it, but I believe 24..27 can be 
merged before as they are simple.

> ---
>   lib/dynamic_debug.c | 17 +++++++++++++----
>   1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index cd3eec5bb81c..168663629ef2 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -293,6 +293,14 @@ static int ddebug_change(const struct ddebug_query *query, struct flag_settings
>   	return nfound;
>   }
>   
> +static char *skip_spaces_and_commas(const char *str)
> +{
> +	str = skip_spaces(str);
> +	while (*str == ',')
> +		str = skip_spaces(++str);
> +	return (char *)str;
> +}
> +

This is a bit complex to read, maybe you can simply re-write skip_space 
completely to avoid the explicit check against is_skip below

bool is_skip(char c) {
	return isspace(c) || c == ',';
}
char *skip(char *s) {
	while (is_skip(*s))
		s++;
	return s;
}

With or without this:

Reviewed-by: Louis Chauvet <louis.chauvet at booltin.com>

>   /*
>    * Split the buffer `buf' into space-separated words.
>    * Handles simple " and ' quoting, i.e. without nested,
> @@ -306,8 +314,8 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords)
>   	while (*buf) {
>   		char *end;
>   
> -		/* Skip leading whitespace */
> -		buf = skip_spaces(buf);
> +		/* Skip leading whitespace and comma */
> +		buf = skip_spaces_and_commas(buf);
>   		if (!*buf)
>   			break;	/* oh, it was trailing whitespace */
>   		if (*buf == '#')
> @@ -323,7 +331,7 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords)
>   				return -EINVAL;	/* unclosed quote */
>   			}
>   		} else {
> -			for (end = buf; *end && !isspace(*end); end++)
> +			for (end = buf; *end && !isspace(*end) && *end != ','; end++)

                                                    ^ here use is_skip

>   				;
>   			if (end == buf) {
>   				pr_err("parse err after word:%d=%s\n", nwords,
> @@ -595,7 +603,8 @@ static int ddebug_exec_queries(char *query, const char *modname)
>   		if (split)
>   			*split++ = '\0';
>   
> -		query = skip_spaces(query);
> +		query = skip_spaces_and_commas(query);
> +
>   		if (!query || !*query || *query == '#')
>   			continue;
>   

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com





More information about the Intel-gfx-trybot mailing list