Skip to content

Commit

Permalink
drm/ttm: Initialize debugfs from ttm_global_init()
Browse files Browse the repository at this point in the history
We create a bunch of debugfs entries as a side-effect of
ttm_global_init() and then never clean them up.  This isn't usually a
problem because we free the whole debugfs directory on module unload.
However, if the global reference count ever goes to zero and then
ttm_global_init() is called again, we'll re-create those debugfs entries
and debugfs will complain in dmesg that we're creating entries that
already exist.  This patch fixes this problem by changing the lifetime
of the whole TTM debugfs directory to match that of the TTM global
state.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20210721152358.2893314-6-jason@jlekstrand.net
  • Loading branch information
Jason Ekstrand authored and Daniel Vetter committed Jul 22, 2021
1 parent 7bbcb91 commit 69de442
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 16 deletions.
12 changes: 12 additions & 0 deletions drivers/gpu/drm/ttm/ttm_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ static unsigned ttm_glob_use_count;
struct ttm_global ttm_glob;
EXPORT_SYMBOL(ttm_glob);

struct dentry *ttm_debugfs_root;

static void ttm_global_release(void)
{
struct ttm_global *glob = &ttm_glob;
Expand All @@ -53,6 +55,7 @@ static void ttm_global_release(void)
goto out;

ttm_pool_mgr_fini();
debugfs_remove(ttm_debugfs_root);

__free_page(glob->dummy_read_page);
memset(glob, 0, sizeof(*glob));
Expand All @@ -73,6 +76,13 @@ static int ttm_global_init(void)

si_meminfo(&si);

ttm_debugfs_root = debugfs_create_dir("ttm", NULL);
if (IS_ERR(ttm_debugfs_root)) {
ret = PTR_ERR(ttm_debugfs_root);
ttm_debugfs_root = NULL;
goto out;
}

/* Limit the number of pages in the pool to about 50% of the total
* system memory.
*/
Expand Down Expand Up @@ -100,6 +110,8 @@ static int ttm_global_init(void)
debugfs_create_atomic_t("buffer_objects", 0444, ttm_debugfs_root,
&glob->bo_count);
out:
if (ret && ttm_debugfs_root)
debugfs_remove(ttm_debugfs_root);
if (ret)
--ttm_glob_use_count;
mutex_unlock(&ttm_global_mutex);
Expand Down
16 changes: 0 additions & 16 deletions drivers/gpu/drm/ttm/ttm_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,22 +72,6 @@ pgprot_t ttm_prot_from_caching(enum ttm_caching caching, pgprot_t tmp)
return tmp;
}

struct dentry *ttm_debugfs_root;

static int __init ttm_init(void)
{
ttm_debugfs_root = debugfs_create_dir("ttm", NULL);
return 0;
}

static void __exit ttm_exit(void)
{
debugfs_remove(ttm_debugfs_root);
}

module_init(ttm_init);
module_exit(ttm_exit);

MODULE_AUTHOR("Thomas Hellstrom, Jerome Glisse");
MODULE_DESCRIPTION("TTM memory manager subsystem (for DRM device)");
MODULE_LICENSE("GPL and additional rights");

0 comments on commit 69de442

Please sign in to comment.