From: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
To: "Christian König" <ckoenig.leichtzumerken@gmail.com>
Cc: Jeffrey Hugo <quic_jhugo@quicinc.com>,
daniel.vetter@ffwll.ch, Oded Gabbay <ogabbay@kernel.org>,
mcanal@igalia.com, dri-devel@lists.freedesktop.org,
mwen@igalia.com, jacek.lawrynowicz@linux.intel.com,
wambui.karugax@gmail.com, maxime@cerno.tech
Subject: Re: Try to address the drm_debugfs issues
Date: Tue, 14 Feb 2023 12:46:33 +0100 [thread overview]
Message-ID: <20230214114633.GB2824715@linux.intel.com> (raw)
In-Reply-To: <c953dfe6-cdfc-92af-fabe-309e1af9f5d8@gmail.com>
On Tue, Feb 14, 2023 at 10:28:24AM +0100, Christian König wrote:
> Am 14.02.23 um 09:59 schrieb Stanislaw Gruszka:
> > On Thu, Feb 09, 2023 at 09:18:35AM +0100, Christian König wrote:
> > > Hello everyone,
> > >
> > > the drm_debugfs has a couple of well known design problems.
> > >
> > > Especially it wasn't possible to add files between initializing and registering
> > > of DRM devices since the underlying debugfs directory wasn't created yet.
> > >
> > > The resulting necessity of the driver->debugfs_init() callback function is a
> > > mid-layering which is really frowned on since it creates a horrible
> > > driver->DRM->driver design layering.
> > >
> > > The recent patch "drm/debugfs: create device-centered debugfs functions" tried
> > > to address those problem, but doesn't seem to work correctly. This looks like
> > > a misunderstanding of the call flow around drm_debugfs_init(), which is called
> > > multiple times, once for the primary and once for the render node.
> > >
> > > So what happens now is the following:
> > >
> > > 1. drm_dev_init() initially allocates the drm_minor objects.
> > > 2. ... back to the driver ...
> > > 3. drm_dev_register() is called.
> > >
> > > 4. drm_debugfs_init() is called for the primary node.
> > > 5. drm_framebuffer_debugfs_init(), drm_client_debugfs_init() and
> > > drm_atomic_debugfs_init() call drm_debugfs_add_file(s)() to add the files
> > > for the primary node.
> > > 6. The driver->debugfs_init() callback is called to add debugfs files for the
> > > primary node.
> > > 7. The added files are consumed and added to the primary node debugfs directory.
> > >
> > > 8. drm_debugfs_init() is called for the render node.
> > > 9. drm_framebuffer_debugfs_init(), drm_client_debugfs_init() and
> > > drm_atomic_debugfs_init() call drm_debugfs_add_file(s)() to add the files
> > > again for the render node.
> > > 10. The driver->debugfs_init() callback is called to add debugfs files for the
> > > render node.
> > > 11. The added files are consumed and added to the render node debugfs directory.
> > >
> > > 12. Some more files are added through drm_debugfs_add_file().
> > > 13. drm_debugfs_late_register() add the files once more to the primary node
> > > debugfs directory.
> > > 14. From this point on files added through drm_debugfs_add_file() are simply ignored.
> > > 15. ... back to the driver ...
> > >
> > > Because of this the dev->debugfs_mutex lock is also completely pointless since
> > > any concurrent use of the interface would just randomly either add the files to
> > > the primary or render node or just not at all.
> > >
> > > Even worse is that this implementation nails the coffin for removing the
> > > driver->debugfs_init() mid-layering because otherwise drivers can't control
> > > where their debugfs (primary/render node) are actually added.
> > >
> > > This patch set here now tries to clean this up a bit, but most likely isn't
> > > fully complete either since I didn't audit every driver/call path.
> > >
> > > Please comment/discuss.
> > What is end goal here regarding debugfs in DRM ? My undersigning is that
> > the direction is get rid of debugfs_init callback as described in:
> > https://cgit.freedesktop.org/drm/drm-misc/tree/Documentation/gpu/todo.rst#n511
> > and also make it driver/device-centric instead of minor-centric as
> > described here:
> > https://cgit.freedesktop.org/drm/drm-misc/commit/?id=99845faae7099cd704ebf67514c1157c26960a
>
> Well my main goal is to get rid of the debugfs_init() mid-layering in the
> mid term, everything else is just nice to have.
>
> > I'm asking from accel point of view. We can make things there as they
> > should look like at the end for DRM, since currently no drivers have
> > established their interfaces and they can be changed.
> >
> > Is drivers/device-centric mean we should use drm_dev->unique for debugfs
> > dir entry name instead of minor ?
>
> Oh, good idea! That would also finally make it a bit less problematic to
> figure out which PCI or platform device corresponds to which debugfs
> directory.
>
> Only potential problem I see is that we would need to rename the directory
> should a driver every decide to set drm_dev->unique to something else than
> the default. But a quick check shows no users of drm_dev_set_unique(), so we
> could potentially just unexport the function
>
> > Or perhaps we should have 2 separate dir entries: one (old dri/minor/)
> > for device drm debugfs files and other one for driver specific files ?
>
> How about we just create symlinks between the old and the new directory for
> now which we remove after everything has settled again?
Yes, that would make perfect sense.
However my idea was a bit different, that we have separate directories
one for drm specific debugfs files (i.e. clints, framebuffer, gem, ... )
and another one for driver specific files (registers, whatever
individual needs for debugging). I'm just considering different options.
> > Also what regarding sysfs ? Should we do something with accel_sysfs_device_minor ?
>
> I see sysfs as a different and probably even more complicated topic.
I wish to have some clear guidance how things should be done regarding
sysfs. But I guess we can stick with accel_sysfs_device_minor for accel
as it is currently. And make changes along with whole DRM.
Regards
Stanislaw
prev parent reply other threads:[~2023-02-14 11:46 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-09 8:18 Try to address the drm_debugfs issues Christian König
2023-02-09 8:18 ` [PATCH 1/3] drm/debugfs: separate debugfs creation into init and register Christian König
2023-02-14 11:56 ` Stanislaw Gruszka
2023-02-09 8:18 ` [PATCH 2/3] drm/debugfs: split registration into dev and minor Christian König
2023-02-09 11:12 ` Maíra Canal
2023-02-09 12:03 ` Christian König
2023-02-09 8:18 ` [PATCH 3/3] drm/debugfs: remove dev->debugfs_list and debugfs_mutex Christian König
2023-02-14 12:19 ` Stanislaw Gruszka
2023-02-14 12:46 ` Stanislaw Gruszka
2023-02-16 11:33 ` Daniel Vetter
2023-02-16 11:37 ` Daniel Vetter
2023-02-16 16:00 ` Christian König
2023-02-16 16:46 ` Jani Nikula
2023-02-16 16:56 ` Christian König
2023-02-16 17:08 ` Jani Nikula
2023-02-16 19:54 ` Daniel Vetter
2023-02-17 9:22 ` Christian König
2023-02-17 10:01 ` Stanislaw Gruszka
2023-02-17 19:38 ` Daniel Vetter
2023-02-17 19:55 ` Christian König
2023-02-22 13:33 ` Stanislaw Gruszka
2023-02-16 16:37 ` Stanislaw Gruszka
2023-02-16 17:06 ` Jani Nikula
2023-02-16 19:56 ` Daniel Vetter
2023-02-17 10:35 ` Stanislaw Gruszka
2023-02-17 10:49 ` Jani Nikula
2023-02-17 11:36 ` Stanislaw Gruszka
2023-02-17 11:54 ` Christian König
2023-02-17 12:37 ` Jani Nikula
2023-02-17 15:55 ` Christian König
2023-02-17 19:42 ` Daniel Vetter
2023-02-17 19:49 ` Christian König
2023-02-09 11:23 ` Try to address the drm_debugfs issues Maíra Canal
2023-02-09 12:13 ` Christian König
2023-02-09 13:06 ` Maíra Canal
2023-02-09 14:06 ` Christian König
2023-02-09 14:19 ` Maxime Ripard
2023-02-09 15:52 ` Christian König
2023-02-09 18:48 ` Maxime Ripard
2023-02-10 12:07 ` Christian König
2023-02-10 12:18 ` Maxime Ripard
2023-02-10 13:10 ` Christian König
2023-02-16 11:34 ` Daniel Vetter
2023-02-16 16:31 ` Christian König
2023-02-16 19:57 ` Daniel Vetter
2023-02-13 18:16 ` Stanislaw Gruszka
2023-02-13 19:59 ` Christian König
2023-02-14 8:59 ` Stanislaw Gruszka
2023-02-14 9:28 ` Christian König
2023-02-14 11:46 ` Stanislaw Gruszka [this message]
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=20230214114633.GB2824715@linux.intel.com \
--to=stanislaw.gruszka@linux.intel.com \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=jacek.lawrynowicz@linux.intel.com \
--cc=maxime@cerno.tech \
--cc=mcanal@igalia.com \
--cc=mwen@igalia.com \
--cc=ogabbay@kernel.org \
--cc=quic_jhugo@quicinc.com \
--cc=wambui.karugax@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.