The Xe driver's XE_IOCTL_DBG macro calls drm_dbg() from inside an if
(expression).  This breaks when CONFIG_DRM_USE_DYNAMIC_DEBUG=y because
the invoked macro has a do-while-0 wrapper.

   if (cond && (drm_dbg("expr-form"),1)) {
      ... do some more stuff
   }

Fix it by changing __dynamic_func_call_cls{,_no_desc} macros into
expressions, by replacing the do-while-0s with a ({ }) wrapper.

In C, all legal expressions are also legal statements, as converted by
the trailing semi-colon in a statement-style macro invocation:

   drm_dbg("statement form");

Signed-off-by: Jim Cromie <jim.cro...@gmail.com>
---
 include/linux/dynamic_debug.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 4a9b9cd53eb7..c958085e0df4 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -287,20 +287,20 @@ 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__);                       \
-} while (0)
+})
 #define __dynamic_func_call(id, fmt, func, ...)                                
\
        __dynamic_func_call_cls(id, _DPRINTK_CLASS_DFLT, fmt,           \
                                func, ##__VA_ARGS__)
 
-#define __dynamic_func_call_cls_no_desc(id, cls, fmt, func, ...) do {  \
+#define __dynamic_func_call_cls_no_desc(id, cls, fmt, func, ...) ({    \
        DEFINE_DYNAMIC_DEBUG_METADATA_CLS(id, cls, fmt);                \
        if (DYNAMIC_DEBUG_BRANCH(id))                                   \
                func(__VA_ARGS__);                                      \
-} while (0)
+})
 #define __dynamic_func_call_no_desc(id, fmt, func, ...)                        
\
        __dynamic_func_call_cls_no_desc(id, _DPRINTK_CLASS_DFLT,        \
                                        fmt, func, ##__VA_ARGS__)
-- 
2.45.2


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to