From: Louis Chauvet <louis.chauvet@bootlin.com>
To: Jim Cromie <jim.cromie@gmail.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
amd-gfx@lists.freedesktop.org,
intel-gvt-dev@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org,
intel-gfx-trybot@lists.freedesktop.org
Cc: jbaron@akamai.com, gregkh@linuxfoundation.org,
ukaszb@chromium.org, daniel.vetter@ffwll.ch,
tvrtko.ursulin@linux.intel.com, jani.nikula@intel.com,
ville.syrjala@linux.intel.com
Subject: Re: [PATCH v2 29/59] dyndbg: change __dynamic_func_call_cls* macros into expressions
Date: Mon, 24 Mar 2025 16:19:54 +0100 [thread overview]
Message-ID: <05dff3c7-91e8-4d42-b75a-90c410d6470d@bootlin.com> (raw)
In-Reply-To: <20250320185238.447458-30-jim.cromie@gmail.com>
Le 20/03/2025 à 19:52, Jim Cromie a écrit :
> 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 for this usage by changing __dynamic_func_call_cls{,_no_desc}
> macros into expressions, by replacing the do-while-0s with a ({ })
> wrapper. In the common usage, the trailing ';' converts the
> expression into a statement.
>
> drm_dbg("statement form");
>
> Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
> ---
> ---
> include/linux/dynamic_debug.h | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
> index 8043966a0fd6..80bcaad03400 100644
> --- a/include/linux/dynamic_debug.h
> +++ b/include/linux/dynamic_debug.h
> @@ -339,20 +339,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_DEBUG_METADATA_CLS((id), cls, fmt); \
> +#define __dynamic_func_call_cls(id, cls, fmt, func, ...) ({ \
> + DEFINE_DYNAMIC_DEBUG_METADATA_CLS(id, cls, fmt); \
Is it normal to remove the parenthesis around id? Or the other way
around, why did you add parenthesis in PATCH 17?
> if (DYNAMIC_DEBUG_BRANCH(id)) \
> - func(&id, ##__VA_ARGS__); \
> -} while (0)
> + func(&(id), ##__VA_ARGS__); \
> +})
> #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); \
I expect the same constraints around id here, both with parenthesis, or
no parenthesis at all.
> 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__)
--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-03-24 15:20 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-20 18:51 [PATCH v2 00/59] Fix CONFIG_DRM_USE_DYNAMIC_DEBUG=y Jim Cromie
2025-03-20 18:51 ` [PATCH v2 01/59] vmlinux.lds.h: fixup HEADERED_SECTION{,_BY} macros Jim Cromie
2025-03-20 18:51 ` [PATCH v2 02/59] docs/dyndbg: update examples \012 to \n Jim Cromie
2025-03-20 18:51 ` [PATCH v2 03/59] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2025-03-20 18:51 ` [PATCH v2 04/59] dyndbg: reword "class unknown, " to "class:_UNKNOWN_" Jim Cromie
2025-03-20 18:51 ` [PATCH v2 05/59] dyndbg: make ddebug_class_param union members same size Jim Cromie
2025-03-20 18:51 ` [PATCH v2 06/59] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2025-03-20 18:51 ` [PATCH v2 07/59] dyndbg: reduce verbose/debug clutter Jim Cromie
2025-03-20 18:51 ` [PATCH v2 08/59] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2025-03-20 18:51 ` [PATCH v2 09/59] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2025-03-20 18:51 ` [PATCH v2 10/59] dyndbg: replace classmap list with a vector Jim Cromie
2025-03-24 15:08 ` Louis Chauvet
2025-03-24 22:33 ` jim.cromie
2025-03-20 18:51 ` [PATCH v2 11/59] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2025-03-24 15:10 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 12/59] dyndbg, module: make proper substructs in _ddebug_info Jim Cromie
2025-03-24 15:10 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 13/59] dyndbg: add 2 new _DPRINTK_FLAGS_: INCL_LOOKUP, PREFIX_CACHED Jim Cromie
2025-03-24 15:11 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 14/59] dyndbg: split _emit_lookup() out of dynamic_emit_prefix() Jim Cromie
2025-03-24 15:14 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 15/59] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2025-03-24 15:14 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 16/59] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2025-03-24 15:15 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 17/59] dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-03-24 15:16 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 18/59] selftests-dyndbg: add tools/testing/selftests/dynamic_debug/* Jim Cromie
2025-03-20 18:51 ` [PATCH v2 19/59] dyndbg: detect class_id reservation conflicts Jim Cromie
2025-03-20 18:51 ` [PATCH v2 20/59] dyndbg: check DYNDBG_CLASSMAP_DEFINE args at compile-time Jim Cromie
2025-03-24 15:16 ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 21/59] dyndbg-test: change do_prints testpoint to accept a loopct Jim Cromie
2025-03-20 18:52 ` [PATCH v2 22/59] dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API Jim Cromie
2025-03-24 15:18 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 23/59] dyndbg: move .mod_name from/to structs ddebug_table/_ddebug_info Jim Cromie
2025-03-24 15:19 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 24/59] dyndbg: treat comma as a token separator Jim Cromie
2025-03-24 15:18 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 25/59] selftests-dyndbg: add comma_terminator_tests Jim Cromie
2025-03-24 15:19 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 26/59] dyndbg: split multi-query strings with % Jim Cromie
2025-03-24 15:19 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 27/59] selftests-dyndbg: test_percent_splitting Jim Cromie
2025-03-24 15:19 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 28/59] selftests-dyndbg: add test_mod_submod Jim Cromie
2025-03-24 15:20 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 29/59] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2025-03-24 15:19 ` Louis Chauvet [this message]
2025-03-25 16:23 ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 30/59] dyndbg: drop "protection" of class'd pr_debugs from legacy queries Jim Cromie
2025-03-24 15:20 ` Louis Chauvet
2025-03-25 18:29 ` jim.cromie
2025-03-25 23:05 ` jim.cromie
2025-03-25 20:02 ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 31/59] docs/dyndbg: explain new delimiters: comma, percent Jim Cromie
2025-03-24 15:22 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 32/59] docs/dyndbg: explain flags parse 1st Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 33/59] docs/dyndbg: add classmap info to howto (TBD) Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-25 18:42 ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 34/59] checkpatch: dont warn about unused macro arg on empty body Jim Cromie
2025-03-21 3:14 ` Joe Perches
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 35/59] drm: use correct ccflags-y spelling Jim Cromie
2025-03-20 18:52 ` [PATCH v2 36/59] drm-dyndbg: adapt drm core to use dyndbg classmaps-v2 Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 37/59] drm-dyndbg: adapt DRM to invoke DYNAMIC_DEBUG_CLASSMAP_PARAM Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 38/59] drm-print: fix config-dependent unused variable Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 39/59] drm-dyndbg: DRM_CLASSMAP_USE in amdgpu driver Jim Cromie
2025-03-24 15:24 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 40/59] drm-dyndbg: DRM_CLASSMAP_USE in i915 driver Jim Cromie
2025-03-24 15:24 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 41/59] drm-dyndbg: DRM_CLASSMAP_USE in drm_crtc_helper Jim Cromie
2025-03-24 15:23 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 42/59] drm-dyndbg: DRM_CLASSMAP_USE in drm_dp_helper Jim Cromie
2025-03-24 15:24 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 43/59] drm-dyndbg: DRM_CLASSMAP_USE in nouveau Jim Cromie
2025-03-20 18:52 ` [PATCH v2 44/59] drm-dyndbg: add DRM_CLASSMAP_USE to Xe driver Jim Cromie
2025-03-24 15:24 ` Louis Chauvet
2025-03-25 18:56 ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 45/59] drm-dyndbg: add DRM_CLASSMAP_USE to virtio_gpu Jim Cromie
2025-03-20 18:52 ` [PATCH v2 46/59] drm-dyndbg: add DRM_CLASSMAP_USE to simpledrm Jim Cromie
2025-03-20 18:52 ` [PATCH v2 47/59] drm-dyndbg: add DRM_CLASSMAP_USE to bochs Jim Cromie
2025-03-24 15:03 ` Louis Chauvet
2025-03-25 19:34 ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 48/59] drm-dyndbg: add DRM_CLASSMAP_USE to etnaviv Jim Cromie
2025-03-20 18:52 ` [PATCH v2 49/59] drm-dyndbg: add DRM_CLASSMAP_USE to gma500 driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 50/59] drm-dyndbg: add DRM_CLASSMAP_USE to radeon Jim Cromie
2025-03-20 18:52 ` [PATCH v2 51/59] drm-dyndbg: add DRM_CLASSMAP_USE to vmwgfx driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 52/59] drm-dyndbg: add DRM_CLASSMAP_USE to vkms driver Jim Cromie
2025-03-24 15:00 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 53/59] drm-dyndbg: add DRM_CLASSMAP_USE to udl driver Jim Cromie
2025-03-24 15:00 ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 54/59] drm-dyndbg: add DRM_CLASSMAP_USE to mgag200 driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 55/59] drm-dyndbg: add DRM_CLASSMAP_USE to the gud driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 56/59] drm-dyndbg: add DRM_CLASSMAP_USE to the qxl driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 57/59] drm-dyndbg: add DRM_CLASSMAP_USE to the drm_gem_shmem_helper driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 58/59] drm: restore CONFIG_DRM_USE_DYNAMIC_DEBUG un-BROKEN Jim Cromie
2025-03-20 18:52 ` [PATCH v2 59/59] drm: RFC - make drm_dyndbg_user.o for drm-*_helpers, drivers Jim Cromie
2025-03-24 15:00 ` Louis Chauvet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=05dff3c7-91e8-4d42-b75a-90c410d6470d@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=intel-gfx-trybot@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=jbaron@akamai.com \
--cc=jim.cromie@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=ukaszb@chromium.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).