Skip to content

Commit c165764

Browse files
pmladekrostedt
authored andcommitted
tracing: gfp: vsprintf: Do not print "none" when using %pGg printf format
The commit ca29a0b ("tracing: gfp: Remove duplication of recording GFP flags") caused the following regression in printf_test selftest: [ 46.208199] test_printf: kvasprintf(..., "%pGg", ...) returned 'none|0xfc000000', expected '0xfc000000' [ 46.208209] test_printf: kvasprintf(..., "%pGg", ...) returned '__GFP_HIGH|none|0xfc000000', expected '__GFP_HIGH|0xfc000000' The problem is the new '{ 0, "none" }' entry in __def_gfpflag_names macro and the following code: char *format_flags(char *buf, char *end, unsigned long flags, const struct trace_print_flags *names) { [...] if ((flags & mask) != mask) continue; [...] } The purpose of the code is to print the name of a mask instead of bits, for example, printk "GFP_ZONEMASK", instead of "__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE". Unfortunately, the mask "0" pass this check and "none" is always printed. A solution would be to move TRACE_GFP_FLAGS up so that it is not the last entry. But it breaks the rule that named masks must be defined before names of single bytes. Otherwise, it would print the names of the bytes instead of the mask. Instead, replace '{ 0, "none" }' with '{ 0, NULL }'. It works because __def_gfpflag_names defines a standalone array and this is the standard trailing entry. The code processing these arrays always ends the cycle when flag->name == NULL. Cc: Masami Hiramatsu <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Michael Petlan <[email protected]> Cc: Veronika Molnarova <[email protected]> Cc: Suren Baghdasaryan <[email protected]> Cc: Rasmus Villemoes <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Tamir Duberstein <[email protected]> Cc: Linus Torvalds <[email protected]> Link: https://lore.kernel.org/[email protected] Fixes: ca29a0b ("tracing: gfp: Remove duplication of recording GFP flags") Signed-off-by: Petr Mladek <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 30c94bb commit c165764

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

include/trace/events/mmflags.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ TRACE_DEFINE_ENUM(___GFP_LAST_BIT);
101101
gfpflag_string(GFP_DMA32), \
102102
gfpflag_string(__GFP_RECLAIM), \
103103
TRACE_GFP_FLAGS \
104-
{ 0, "none" }
104+
{ 0, NULL }
105105

106106
#define show_gfp_flags(flags) \
107107
(flags) ? __print_flags(flags, "|", __def_gfpflag_names \

0 commit comments

Comments
 (0)