[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJfuBxy5E0xPFH=bxaaXy2Q8LojBrqgr+su8wGq7rsv3m7_d_g@mail.gmail.com>
Date: Mon, 12 Sep 2022 15:11:05 -0600
From: jim.cromie@...il.com
To: Jani Nikula <jani.nikula@...ux.intel.com>
Cc: Jason Baron <jbaron@...mai.com>,
Greg KH <gregkh@...uxfoundation.org>,
dri-devel <dri-devel@...ts.freedesktop.org>,
amd-gfx mailing list <amd-gfx@...ts.freedesktop.org>,
intel-gvt-dev@...ts.freedesktop.org,
Intel Graphics Development <intel-gfx@...ts.freedesktop.org>,
LKML <linux-kernel@...r.kernel.org>,
Daniel Vetter <daniel.vetter@...ll.ch>,
Rasmus Villemoes <linux@...musvillemoes.dk>,
Sean Paul <seanpaul@...omium.org>,
Joe Perches <joe@...ches.com>
Subject: Re: [PATCH v7 2/9] drm: POC drm on dyndbg - use in core, 2 helpers, 3 drivers.
On Mon, Sep 12, 2022 at 4:29 AM Jani Nikula <jani.nikula@...ux.intel.com> wrote:
>
> On Sun, 11 Sep 2022, Jim Cromie <jim.cromie@...il.com> wrote:
> > Use DECLARE_DYNDBG_CLASSMAP across DRM:
> >
> > - in .c files, since macro defines/initializes a record
> >
> > - in drivers, $mod_{drv,drm,param}.c
> > ie where param setup is done, since a classmap is param related
> >
> > - in drm/drm_print.c
> > since existing __drm_debug param is defined there,
> > and we ifdef it, and provide an elaborated alternative.
> >
> > - in drm_*_helper modules:
> > dp/drm_dp - 1st item in makefile target
> > drivers/gpu/drm/drm_crtc_helper.c - random pick iirc.
> >
> > Since these modules all use identical CLASSMAP declarations (ie: names
> > and .class_id's) they will all respond together to "class DRM_UT_*"
> > query-commands:
>
> The commit message could start off by saying each module needs to define
> DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, ...). That is, IIUC.
>
Yes, I see your point.
All the explanations missing here are in preceding commits,
now in GregKHs driver-core/driver-core-next tree,
so I didnt resend them.
> Where's DECLARE_DYNDBG_CLASSMAP defined? linux-next? What's it do? What
> if multiple modules with that are actually builtin?
The commit that adds the macro is at
https://lore.kernel.org/lkml/20220904214134.408619-15-jim.cromie@gmail.com/
there are many combos of builtin, Ive done at least several:
with caveat that >98% of testing is on virtme (thanks for that tool)
- test_dynamic_debug as module, and builtin.
it has multiple macro uses, showing 1 kind of sharing
- drm as builtin, drivers as modules
that surely pulled in other drm-helpers as builtins
- all loadable modules mostly.
>
> The duplication and requirement that they're identical seems like an
> error prone combo.
I freely acknowledge(d) this is sub-optimal.
There might be a best place for a single declaration that is in-scope
across multiple modules, but I dont know the drm core/driver lifetime
well enough to just drop this into that place.
I may have complicated things by starting with a static struct holding
the classmap, that choice was driven by:
- static declaration into a section solved a problem where the class
definitions
were "registered" (term used in patchset, -v2-3?) too late to be available for
modprobe i915 dyndbg='class DRM_UT_CORE +p'
but worked afterwards
(also true for builtins and boot-time $mod.dyndbg='class notworking +p')
Another subtlety - the "sharing" is due more to: drm_dbg(DRM_UT_*, "")
Im not sure precisely how this might matter.
I also had an "incompleteness" argument circling in my head - something like;
you cant simultaneously allow a drm-wanna-be module to declare "DRM_UT_CORE"
but disallow "DRM_UT_ILL_CONSIDERED". I kind-of stopped there.
Theres also an issue where multiple declarations in a module must
avoid range overlap.
I had no idea how to put that into a BUILD_BUG_ON.
Its done manually, with commentary, in test-dynamic-debug.
Maybe both issues can be improved somewhat by changing the macro
to expect real ENUM symbols, (and stringify _VA_ARGS_ to init the classnames),
not the quoted "DRM_UT_*"s it gets now. That would also obsolete the _base,
since its the value of DRM_UT_CORE (the 1st enum val).
But that still leaves the enum vals enumerated, with possibility of
omission or mixup,
which unlike a spelling error wouldnt get caught, and would be wrong.
I fiddled with the 1st part of that for a while, I lack the macro-fu,
and punted.
Im happy to try an alternative approach, particularly with elaborated
suggestions.
>
> Finally, the choice of placement in e.g. i915_params.c seems completely
> arbitrary, and makes you wonder "what here requires this, nothing?".
acknowledged - I put it there because the access to it is via a parameter,
namely one that already affects it from a distance:
/sys/module/drm/parameters/debug - ie drm.dbg
And its not even i915's parameter.
>
> BR,
> Jani.
>
thanks,
>
> >
> > Signed-off-by: Jim Cromie <jim.cromie@...il.com>
Powered by blists - more mailing lists