dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* Try to address the drm_debugfs issues
@ 2023-02-09  8:18 Christian König
  2023-02-09  8:18 ` [PATCH 1/3] drm/debugfs: separate debugfs creation into init and register Christian König
                   ` (4 more replies)
  0 siblings, 5 replies; 50+ messages in thread
From: Christian König @ 2023-02-09  8:18 UTC (permalink / raw)
  To: daniel.vetter, wambui.karugax, mcanal, maxime, mwen, mairacanal; +Cc: dri-devel

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.

Cheers,
Christian.



^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2023-02-22 13:33 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 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).