Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Low] API Consistency / Build Breakage Trap: Dynamic debug wrappers evaluate to int when enabled but void when disabled --
--- Patch [23]: [PATCH v6 23/24] dyndbg: change __dynamic_func_call_cls* macros into expressions --- commit 003daac5c2950ded79f06209b5d0ab4dfeb11a5a Author: Jim Cromie <[email protected]> dyndbg: change __dynamic_func_call_cls* macros into expressions This patch modifies the __dynamic_func_call_cls* macros to use statement expressions instead of do-while loops, allowing them to return 0. It also updates the fallback dynamic_hex_dump() macro to ensure it behaves consistently by returning 0, allowing debug macros to be used inside conditional expressions. > diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h > index 355f2cb117334..8822f9a3605f6 100644 > --- a/include/linux/dynamic_debug.h > +++ b/include/linux/dynamic_debug.h > @@ -238,24 +238,26 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, > * (|_cls): adds in _DPRINT_CLASS_DFLT as needed > * (|_no_desc): former gets callsite descriptor as 1st arg (for prdbgs) > */ > -#define __dynamic_func_call_cls(id, cls, fmt, func, ...) do { \ > +#define __dynamic_func_call_cls(id, cls, fmt, func, ...) ({ \ > DEFINE_DYNAMIC_DEBUG_METADATA_CLS(id, cls, fmt); \ > if (DYNAMIC_DEBUG_BRANCH(id)) { \ > func(&id, ##__VA_ARGS__); \ > __dynamic_dump_stack(id); \ > } \ > -} while (0) > + 0; /* match no_printk return value */ \ > +}) [Severity: Low] Does this introduce a build breakage trap for configurations where CONFIG_DYNAMIC_DEBUG is disabled? While this macro now evaluates to an int (0) when enabled, the fallback macros used when dynamic debug is disabled often evaluate to void. For example, dev_dbg() falls back to dev_no_printk(), which evaluates to void: include/linux/dev_printk.h: #define dev_no_printk(level, dev, fmt, ...) \ ({ \ if (0) \ _dev_printk(level, dev, fmt, ##__VA_ARGS__); \ }) Similarly, drm_dbg() falls back to the __drm_dev_dbg() function which returns void, and print_hex_dump_debug() falls back to a void inline function. If a driver developer uses these macros in a boolean expression (such as if (cond && dev_dbg(...))), it will compile successfully during development with CONFIG_DYNAMIC_DEBUG enabled, but will break the build with an invalid operands to binary && error when compiled without dynamic debugging. Could the fallback macros be updated to consistently return 0 as well to prevent this mismatch? -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=23
