From: Maxime Ripard <maxime@cerno.tech>
To: "Christian König" <ckoenig.leichtzumerken@gmail.com>
Cc: daniel.vetter@ffwll.ch, "Maíra Canal" <mcanal@igalia.com>,
dri-devel@lists.freedesktop.org, mwen@igalia.com,
mairacanal@riseup.net, wambui.karugax@gmail.com
Subject: Re: Try to address the drm_debugfs issues
Date: Thu, 9 Feb 2023 15:19:23 +0100 [thread overview]
Message-ID: <20230209141923.4n4ffsqchdrx5vnp@houat> (raw)
In-Reply-To: <cbe1ac86-1d41-bcf7-679b-ad4e2a810361@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5882 bytes --]
On Thu, Feb 09, 2023 at 03:06:10PM +0100, Christian König wrote:
> Am 09.02.23 um 14:06 schrieb Maíra Canal:
> > On 2/9/23 09:13, Christian König wrote:
> > > Am 09.02.23 um 12:23 schrieb Maíra Canal:
> > > > On 2/9/23 05:18, 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.
> > > >
> > > > I tested the patchset on the v3d, vc4 and vkms and all the files
> > > > are generated
> > > > as expected, but I'm getting the following errors on dmesg:
> > > >
> > > > [ 3.872026] debugfs: File 'v3d_ident' in directory '0'
> > > > already present!
> > > > [ 3.872064] debugfs: File 'v3d_ident' in directory '128'
> > > > already present!
> > > > [ 3.872078] debugfs: File 'v3d_regs' in directory '0' already
> > > > present!
> > > > [ 3.872087] debugfs: File 'v3d_regs' in directory '128'
> > > > already present!
> > > > [ 3.872097] debugfs: File 'measure_clock' in directory '0'
> > > > already present!
> > > > [ 3.872105] debugfs: File 'measure_clock' in directory '128'
> > > > already present!
> > > > [ 3.872116] debugfs: File 'bo_stats' in directory '0' already
> > > > present!
> > > > [ 3.872124] debugfs: File 'bo_stats' in directory '128'
> > > > already present!
> > > >
> > > > It looks like the render node is being added twice, since this
> > > > doesn't happen
> > > > for vc4 and vkms.
> > >
> > > Thanks for the feedback and yes that's exactly what I meant with
> > > that I haven't looked into all code paths.
> > >
> > > Could it be that v3d registers it's debugfs files from the
> > > debugfs_init callback?
> >
> > Although this is true, I'm not sure if this is the reason why the files
> > are
> > being registered twice, as this doesn't happen to vc4, and it also uses
> > the
> > debugfs_init callback. I believe it is somewhat related to the fact that
> > v3d is the primary node and the render node.
>
> I see. Thanks for the hint.
>
> >
> > Best Regards,
> > - Maíra Canal
> >
> > >
> > > One alternative would be to just completely nuke support for
> > > separate render node debugfs files and only add a symlink to the
> > > primary node. Opinions?
>
> What do you think of this approach? I can't come up with any reason why we
> should have separate debugfs files for render nodes and I think it is pretty
> much the same reason you came up with the patch for per device debugfs files
> instead of per minor.
They are two entirely separate devices and drivers, it doesn't make much
sense to move their debugfs files to one or the other.
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2023-02-09 14:19 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 [this message]
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
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=20230209141923.4n4ffsqchdrx5vnp@houat \
--to=maxime@cerno.tech \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=mairacanal@riseup.net \
--cc=mcanal@igalia.com \
--cc=mwen@igalia.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 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).