drm/ttm: Initialize debugfs from ttm_global_init()
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
This commit is contained in:
parent
7bbcb919e3
commit
69de4421bb
|
@ -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;
|
||||
|
@ -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));
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue