[PATCH 1/4] drm/ttm: add debugfs directory v2

Daniel Vetter daniel at ffwll.ch
Tue Dec 22 13:31:56 UTC 2020


On Fri, Dec 18, 2020 at 06:55:35PM +0100, Christian König wrote:
> As far as I can tell the buffer_count was never used by an
> userspace application.
> 
> The number of BOs in the system is far better suited in
> debugfs than sysfs and we now should be able to add other
> information here as well.
> 
> v2: add that additionally to sysfs
> 
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Not sure where I acked this, but looks reasonable.
-Daniel

> ---
>  drivers/gpu/drm/ttm/ttm_bo.c     | 48 ++------------------------------
>  drivers/gpu/drm/ttm/ttm_module.c |  4 +++
>  drivers/gpu/drm/ttm/ttm_module.h |  6 ++--
>  3 files changed, 11 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 31e8b3da5563..cd55e3104e50 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -44,8 +44,6 @@
>  
>  #include "ttm_module.h"
>  
> -static void ttm_bo_global_kobj_release(struct kobject *kobj);
> -
>  /*
>   * ttm_global_mutex - protecting the global BO state
>   */
> @@ -54,11 +52,6 @@ unsigned ttm_bo_glob_use_count;
>  struct ttm_bo_global ttm_bo_glob;
>  EXPORT_SYMBOL(ttm_bo_glob);
>  
> -static struct attribute ttm_bo_count = {
> -	.name = "bo_count",
> -	.mode = S_IRUGO
> -};
> -
>  /* default destructor */
>  static void ttm_bo_default_destroy(struct ttm_buffer_object *bo)
>  {
> @@ -84,32 +77,6 @@ static void ttm_bo_mem_space_debug(struct ttm_buffer_object *bo,
>  	}
>  }
>  
> -static ssize_t ttm_bo_global_show(struct kobject *kobj,
> -				  struct attribute *attr,
> -				  char *buffer)
> -{
> -	struct ttm_bo_global *glob =
> -		container_of(kobj, struct ttm_bo_global, kobj);
> -
> -	return snprintf(buffer, PAGE_SIZE, "%d\n",
> -				atomic_read(&glob->bo_count));
> -}
> -
> -static struct attribute *ttm_bo_global_attrs[] = {
> -	&ttm_bo_count,
> -	NULL
> -};
> -
> -static const struct sysfs_ops ttm_bo_global_ops = {
> -	.show = &ttm_bo_global_show
> -};
> -
> -static struct kobj_type ttm_bo_glob_kobj_type  = {
> -	.release = &ttm_bo_global_kobj_release,
> -	.sysfs_ops = &ttm_bo_global_ops,
> -	.default_attrs = ttm_bo_global_attrs
> -};
> -
>  static void ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
>  {
>  	struct ttm_bo_device *bdev = bo->bdev;
> @@ -1226,14 +1193,6 @@ size_t ttm_bo_dma_acc_size(struct ttm_bo_device *bdev,
>  }
>  EXPORT_SYMBOL(ttm_bo_dma_acc_size);
>  
> -static void ttm_bo_global_kobj_release(struct kobject *kobj)
> -{
> -	struct ttm_bo_global *glob =
> -		container_of(kobj, struct ttm_bo_global, kobj);
> -
> -	__free_page(glob->dummy_read_page);
> -}
> -
>  static void ttm_bo_global_release(void)
>  {
>  	struct ttm_bo_global *glob = &ttm_bo_glob;
> @@ -1245,6 +1204,7 @@ static void ttm_bo_global_release(void)
>  	kobject_del(&glob->kobj);
>  	kobject_put(&glob->kobj);
>  	ttm_mem_global_release(&ttm_mem_glob);
> +	__free_page(glob->dummy_read_page);
>  	memset(glob, 0, sizeof(*glob));
>  out:
>  	mutex_unlock(&ttm_global_mutex);
> @@ -1277,10 +1237,8 @@ static int ttm_bo_global_init(void)
>  	INIT_LIST_HEAD(&glob->device_list);
>  	atomic_set(&glob->bo_count, 0);
>  
> -	ret = kobject_init_and_add(
> -		&glob->kobj, &ttm_bo_glob_kobj_type, ttm_get_kobj(), "buffer_objects");
> -	if (unlikely(ret != 0))
> -		kobject_put(&glob->kobj);
> +	debugfs_create_atomic_t("buffer_objects", 0444, ttm_debugfs_root,
> +				&glob->bo_count);
>  out:
>  	mutex_unlock(&ttm_global_mutex);
>  	return ret;
> diff --git a/drivers/gpu/drm/ttm/ttm_module.c b/drivers/gpu/drm/ttm/ttm_module.c
> index c0906437cb1c..f6566603a60f 100644
> --- a/drivers/gpu/drm/ttm/ttm_module.c
> +++ b/drivers/gpu/drm/ttm/ttm_module.c
> @@ -32,12 +32,14 @@
>  #include <linux/module.h>
>  #include <linux/device.h>
>  #include <linux/sched.h>
> +#include <linux/debugfs.h>
>  #include <drm/drm_sysfs.h>
>  
>  #include "ttm_module.h"
>  
>  static DECLARE_WAIT_QUEUE_HEAD(exit_q);
>  static atomic_t device_released;
> +struct dentry *ttm_debugfs_root;
>  
>  static struct device_type ttm_drm_class_type = {
>  	.name = "ttm",
> @@ -77,6 +79,7 @@ static int __init ttm_init(void)
>  	if (unlikely(ret != 0))
>  		goto out_no_dev_reg;
>  
> +	ttm_debugfs_root = debugfs_create_dir("ttm", NULL);
>  	return 0;
>  out_no_dev_reg:
>  	atomic_set(&device_released, 1);
> @@ -94,6 +97,7 @@ static void __exit ttm_exit(void)
>  	 */
>  
>  	wait_event(exit_q, atomic_read(&device_released) == 1);
> +	debugfs_remove(ttm_debugfs_root);
>  }
>  
>  module_init(ttm_init);
> diff --git a/drivers/gpu/drm/ttm/ttm_module.h b/drivers/gpu/drm/ttm/ttm_module.h
> index 45fa318c1585..2f03c2fcf570 100644
> --- a/drivers/gpu/drm/ttm/ttm_module.h
> +++ b/drivers/gpu/drm/ttm/ttm_module.h
> @@ -31,10 +31,12 @@
>  #ifndef _TTM_MODULE_H_
>  #define _TTM_MODULE_H_
>  
> -#include <linux/kernel.h>
> +#define TTM_PFX "[TTM] "
> +
>  struct kobject;
> +struct dentry;
>  
> -#define TTM_PFX "[TTM] "
>  extern struct kobject *ttm_get_kobj(void);
> +extern struct dentry *ttm_debugfs_root;
>  
>  #endif /* _TTM_MODULE_H_ */
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list