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

Reply via email to