diff mbox series

[3/5] drm/vram: add vram-mm debugfs file

Message ID 20190902124126.7700-4-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show
Series drm: add some ttm/vram info to debugfs | expand

Commit Message

Gerd Hoffmann Sept. 2, 2019, 12:41 p.m. UTC
Wire up drm_mm_print() for vram helpers, using a new
debugfs file, so one can see how vram is used:

   # cat /sys/kernel/debug/dri/0/vram-mm
   0x0000000000000000-0x0000000000000300: 768: used
   0x0000000000000300-0x0000000000000600: 768: used
   0x0000000000000600-0x0000000000000900: 768: used
   0x0000000000000900-0x0000000000000c00: 768: used
   0x0000000000000c00-0x0000000000004000: 13312: free
   total: 16384, used 3072 free 13312

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/drm/drm_gem_vram_helper.h    |  1 +
 include/drm/drm_vram_mm_helper.h     |  1 +
 drivers/gpu/drm/drm_vram_mm_helper.c | 33 ++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+)

Comments

Thomas Zimmermann Sept. 2, 2019, 2:34 p.m. UTC | #1
Hi

Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> Wire up drm_mm_print() for vram helpers, using a new
> debugfs file, so one can see how vram is used:
> 
>    # cat /sys/kernel/debug/dri/0/vram-mm
>    0x0000000000000000-0x0000000000000300: 768: used
>    0x0000000000000300-0x0000000000000600: 768: used
>    0x0000000000000600-0x0000000000000900: 768: used
>    0x0000000000000900-0x0000000000000c00: 768: used
>    0x0000000000000c00-0x0000000000004000: 13312: free
>    total: 16384, used 3072 free 13312
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/drm/drm_gem_vram_helper.h    |  1 +
>  include/drm/drm_vram_mm_helper.h     |  1 +
>  drivers/gpu/drm/drm_vram_mm_helper.c | 33 ++++++++++++++++++++++++++++
>  3 files changed, 35 insertions(+)
> 
> diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
> index 17f160dd6e7d..d48fdf90b254 100644
> --- a/include/drm/drm_gem_vram_helper.h
> +++ b/include/drm/drm_gem_vram_helper.h
> @@ -123,6 +123,7 @@ int drm_gem_vram_driver_dumb_mmap_offset(struct drm_file *file,
>   * &struct drm_driver with default functions.
>   */
>  #define DRM_GEM_VRAM_DRIVER \
> +	.debugfs_init             = drm_vram_mm_debugfs_init, \

This line seems to be the reason for putting the include statement into
the header in patch [2/5]. I suggest to merge both patches into one.

>  	.dumb_create		  = drm_gem_vram_driver_dumb_create, \
>  	.dumb_map_offset	  = drm_gem_vram_driver_dumb_mmap_offset, \
>  	.gem_prime_mmap		  = drm_gem_prime_mmap
> diff --git a/include/drm/drm_vram_mm_helper.h b/include/drm/drm_vram_mm_helper.h
> index 2aacfb1ccfae..9e0ac9aaac7d 100644
> --- a/include/drm/drm_vram_mm_helper.h
> +++ b/include/drm/drm_vram_mm_helper.h
> @@ -60,6 +60,7 @@ static inline struct drm_vram_mm *drm_vram_mm_of_bdev(
>  	return container_of(bdev, struct drm_vram_mm, bdev);
>  }
>  
> +int drm_vram_mm_debugfs_init(struct drm_minor *minor);

I cannot find a caller of this function. Will this be called form
drm_debugfs_init()?

>  int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
>  		     uint64_t vram_base, size_t vram_size,
>  		     const struct drm_vram_mm_funcs *funcs);
> diff --git a/drivers/gpu/drm/drm_vram_mm_helper.c b/drivers/gpu/drm/drm_vram_mm_helper.c
> index c911781d6728..486061b83a73 100644
> --- a/drivers/gpu/drm/drm_vram_mm_helper.c
> +++ b/drivers/gpu/drm/drm_vram_mm_helper.c
> @@ -1,7 +1,9 @@
>  // SPDX-License-Identifier: GPL-2.0-or-later
>  
> +#include <drm/drm_debugfs.h>
>  #include <drm/drm_device.h>
>  #include <drm/drm_file.h>
> +#include <drm/drm_gem_ttm_helper.h>
>  #include <drm/drm_vram_mm_helper.h>
>  
>  #include <drm/ttm/ttm_page_alloc.h>
> @@ -148,6 +150,37 @@ static struct ttm_bo_driver bo_driver = {
>   * struct drm_vram_mm
>   */
>  
> +#if defined(CONFIG_DEBUG_FS)
> +static int drm_vram_mm_debugfs(struct seq_file *m, void *data)
> +{
> +	struct drm_info_node *node = (struct drm_info_node *) m->private;
> +	struct drm_vram_mm *vmm = node->minor->dev->vram_mm;
> +	struct drm_mm *mm = vmm->bdev.man[TTM_PL_VRAM].priv;
> +	struct ttm_bo_global *glob = vmm->bdev.glob;
> +	struct drm_printer p = drm_seq_file_printer(m);
> +
> +	spin_lock(&glob->lru_lock);
> +	drm_mm_print(mm, &p);
> +	spin_unlock(&glob->lru_lock);
> +	return 0;
> +}
> +
> +static struct drm_info_list drm_vram_mm_debugfs_list[] = {

Can this be made 'static const'?

> +	{ "vram-mm", drm_vram_mm_debugfs, 0, NULL },
> +};
> +#endif
> +
> +int drm_vram_mm_debugfs_init(struct drm_minor *minor)

Documentation is missing.

With these points addressed

 Acked-by: Thomas Zimmermann <tzimmermann@suse.de>

Best regards
Thomas

> +{
> +#if defined(CONFIG_DEBUG_FS)
> +	drm_debugfs_create_files(drm_vram_mm_debugfs_list,
> +				 ARRAY_SIZE(drm_vram_mm_debugfs_list),
> +				 minor->debugfs_root, minor);
> +#endif
> +	return 0;
> +}
> +EXPORT_SYMBOL(drm_vram_mm_debugfs_init);
> +
>  /**
>   * drm_vram_mm_init() - Initialize an instance of VRAM MM.
>   * @vmm:	the VRAM MM instance to initialize
>
Gerd Hoffmann Sept. 3, 2019, 6:20 a.m. UTC | #2
Hi,

> > +++ b/include/drm/drm_gem_vram_helper.h
> > @@ -123,6 +123,7 @@ int drm_gem_vram_driver_dumb_mmap_offset(struct drm_file *file,
> >   * &struct drm_driver with default functions.
> >   */
> >  #define DRM_GEM_VRAM_DRIVER \
> > +	.debugfs_init             = drm_vram_mm_debugfs_init, \
> 
> > +int drm_vram_mm_debugfs_init(struct drm_minor *minor);
> 
> I cannot find a caller of this function. Will this be called form
> drm_debugfs_init()?

Yes, via drm_driver->debugfs_init which is set above.

cheers,
  Gerd
diff mbox series

Patch

diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
index 17f160dd6e7d..d48fdf90b254 100644
--- a/include/drm/drm_gem_vram_helper.h
+++ b/include/drm/drm_gem_vram_helper.h
@@ -123,6 +123,7 @@  int drm_gem_vram_driver_dumb_mmap_offset(struct drm_file *file,
  * &struct drm_driver with default functions.
  */
 #define DRM_GEM_VRAM_DRIVER \
+	.debugfs_init             = drm_vram_mm_debugfs_init, \
 	.dumb_create		  = drm_gem_vram_driver_dumb_create, \
 	.dumb_map_offset	  = drm_gem_vram_driver_dumb_mmap_offset, \
 	.gem_prime_mmap		  = drm_gem_prime_mmap
diff --git a/include/drm/drm_vram_mm_helper.h b/include/drm/drm_vram_mm_helper.h
index 2aacfb1ccfae..9e0ac9aaac7d 100644
--- a/include/drm/drm_vram_mm_helper.h
+++ b/include/drm/drm_vram_mm_helper.h
@@ -60,6 +60,7 @@  static inline struct drm_vram_mm *drm_vram_mm_of_bdev(
 	return container_of(bdev, struct drm_vram_mm, bdev);
 }
 
+int drm_vram_mm_debugfs_init(struct drm_minor *minor);
 int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
 		     uint64_t vram_base, size_t vram_size,
 		     const struct drm_vram_mm_funcs *funcs);
diff --git a/drivers/gpu/drm/drm_vram_mm_helper.c b/drivers/gpu/drm/drm_vram_mm_helper.c
index c911781d6728..486061b83a73 100644
--- a/drivers/gpu/drm/drm_vram_mm_helper.c
+++ b/drivers/gpu/drm/drm_vram_mm_helper.c
@@ -1,7 +1,9 @@ 
 // SPDX-License-Identifier: GPL-2.0-or-later
 
+#include <drm/drm_debugfs.h>
 #include <drm/drm_device.h>
 #include <drm/drm_file.h>
+#include <drm/drm_gem_ttm_helper.h>
 #include <drm/drm_vram_mm_helper.h>
 
 #include <drm/ttm/ttm_page_alloc.h>
@@ -148,6 +150,37 @@  static struct ttm_bo_driver bo_driver = {
  * struct drm_vram_mm
  */
 
+#if defined(CONFIG_DEBUG_FS)
+static int drm_vram_mm_debugfs(struct seq_file *m, void *data)
+{
+	struct drm_info_node *node = (struct drm_info_node *) m->private;
+	struct drm_vram_mm *vmm = node->minor->dev->vram_mm;
+	struct drm_mm *mm = vmm->bdev.man[TTM_PL_VRAM].priv;
+	struct ttm_bo_global *glob = vmm->bdev.glob;
+	struct drm_printer p = drm_seq_file_printer(m);
+
+	spin_lock(&glob->lru_lock);
+	drm_mm_print(mm, &p);
+	spin_unlock(&glob->lru_lock);
+	return 0;
+}
+
+static struct drm_info_list drm_vram_mm_debugfs_list[] = {
+	{ "vram-mm", drm_vram_mm_debugfs, 0, NULL },
+};
+#endif
+
+int drm_vram_mm_debugfs_init(struct drm_minor *minor)
+{
+#if defined(CONFIG_DEBUG_FS)
+	drm_debugfs_create_files(drm_vram_mm_debugfs_list,
+				 ARRAY_SIZE(drm_vram_mm_debugfs_list),
+				 minor->debugfs_root, minor);
+#endif
+	return 0;
+}
+EXPORT_SYMBOL(drm_vram_mm_debugfs_init);
+
 /**
  * drm_vram_mm_init() - Initialize an instance of VRAM MM.
  * @vmm:	the VRAM MM instance to initialize