linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info()
       [not found] <20190902124126.7700-1-kraxel@redhat.com>
@ 2019-09-02 12:41 ` Gerd Hoffmann
  2019-09-02 14:19   ` Thomas Zimmermann
  2019-09-02 12:41 ` [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info Gerd Hoffmann
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-02 12:41 UTC (permalink / raw)
  To: dri-devel
  Cc: Gerd Hoffmann, David Airlie, Daniel Vetter, Maarten Lankhorst,
	Maxime Ripard, Sean Paul, Jonathan Corbet,
	open list:DOCUMENTATION, open list

Now with ttm_buffer_object being a subclass of drm_gem_object we can
easily lookup ttm_buffer_object for a given drm_gem_object, which in
turm allows to create common helper functions.

This patch starts off with a drm_gem_ttm_print_info() helper function
which prints adds some ttm specific lines to the debug output.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/drm/drm_gem_ttm_helper.h     | 19 ++++++++
 drivers/gpu/drm/drm_gem_ttm_helper.c | 67 ++++++++++++++++++++++++++++
 Documentation/gpu/drm-mm.rst         | 12 +++++
 drivers/gpu/drm/Kconfig              |  7 +++
 drivers/gpu/drm/Makefile             |  3 ++
 5 files changed, 108 insertions(+)
 create mode 100644 include/drm/drm_gem_ttm_helper.h
 create mode 100644 drivers/gpu/drm/drm_gem_ttm_helper.c

diff --git a/include/drm/drm_gem_ttm_helper.h b/include/drm/drm_gem_ttm_helper.h
new file mode 100644
index 000000000000..6268f89c5a48
--- /dev/null
+++ b/include/drm/drm_gem_ttm_helper.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef DRM_GEM_TTM_HELPER_H
+#define DRM_GEM_TTM_HELPER_H
+
+#include <linux/kernel.h>
+
+#include <drm/drm_gem.h>
+#include <drm/drm_device.h>
+#include <drm/ttm/ttm_bo_api.h>
+#include <drm/ttm/ttm_bo_driver.h>
+
+#define drm_gem_ttm_of_gem(gem_obj) \
+	container_of(gem_obj, struct ttm_buffer_object, base)
+
+void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
+			    const struct drm_gem_object *gem);
+
+#endif
diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c b/drivers/gpu/drm/drm_gem_ttm_helper.c
new file mode 100644
index 000000000000..cd6ac2cc8fdd
--- /dev/null
+++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <linux/module.h>
+
+#include <drm/drm_gem_ttm_helper.h>
+
+/**
+ * DOC: overview
+ *
+ * This library provides helper functions for gem objects backed by
+ * ttm.
+ */
+
+/**
+ * drm_gem_ttm_print_info() - Print &ttm_buffer_object info for debugfs
+ * @p: DRM printer
+ * @indent: Tab indentation level
+ * @gem: GEM object
+ *
+ * This function can be used as the &drm_driver->gem_print_info callback.
+ */
+void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
+			    const struct drm_gem_object *gem)
+{
+	static const char *plname[] = {
+		[ TTM_PL_SYSTEM ] = "system",
+		[ TTM_PL_TT     ] = "tt",
+		[ TTM_PL_VRAM   ] = "vram",
+		[ TTM_PL_PRIV   ] = "priv",
+
+		[ 16 ]            = "cached",
+		[ 17 ]            = "uncached",
+		[ 18 ]            = "wc",
+		[ 19 ]            = "contig",
+
+		[ 21 ]            = "pinned", /* NO_EVICT */
+		[ 22 ]            = "topdown",
+	};
+	const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
+	bool first = true;
+	unsigned int i;
+
+	for (i = 0; i < ARRAY_SIZE(plname); i++) {
+		if (!(bo->mem.placement & (1 << i)))
+			continue;
+		if (!plname[i])
+			continue;
+		if (first) {
+			first = false;
+			drm_printf_indent(p, indent, "placement=%s", plname[i]);
+		} else
+			drm_printf(p, ",%s", plname[i]);
+	}
+	if (!first)
+		drm_printf(p, "\n");
+
+	if (bo->mem.bus.is_iomem) {
+		drm_printf_indent(p, indent, "bus.base=%lx\n",
+				  (unsigned long)bo->mem.bus.base);
+		drm_printf_indent(p, indent, "bus.offset=%lx\n",
+				  (unsigned long)bo->mem.bus.offset);
+	}
+}
+EXPORT_SYMBOL(drm_gem_ttm_print_info);
+
+MODULE_DESCRIPTION("DRM gem ttm helpers");
+MODULE_LICENSE("GPL");
diff --git a/Documentation/gpu/drm-mm.rst b/Documentation/gpu/drm-mm.rst
index b664f054c259..a70a1d9f30ec 100644
--- a/Documentation/gpu/drm-mm.rst
+++ b/Documentation/gpu/drm-mm.rst
@@ -412,6 +412,18 @@ VRAM MM Helper Functions Reference
 .. kernel-doc:: drivers/gpu/drm/drm_vram_mm_helper.c
    :export:
 
+GEM TTM Helper Functions Reference
+-----------------------------------
+
+.. kernel-doc:: drivers/gpu/drm/drm_gem_ttm_helper.c
+   :doc: overview
+
+.. kernel-doc:: include/drm/drm_gem_ttm_helper.h
+   :internal:
+
+.. kernel-doc:: drivers/gpu/drm/drm_gem_ttm_helper.c
+   :export:
+
 VMA Offset Manager
 ==================
 
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index e6f40fb54c9a..f7b25519f95c 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -172,6 +172,13 @@ config DRM_VRAM_HELPER
 	help
 	  Helpers for VRAM memory management
 
+config DRM_TTM_HELPER
+	tristate
+	depends on DRM
+	select DRM_TTM
+	help
+	  Helpers for ttm-based gem objects
+
 config DRM_GEM_CMA_HELPER
 	bool
 	depends on DRM
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 10f8329a8b71..545c61d6528b 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -37,6 +37,9 @@ drm_vram_helper-y := drm_gem_vram_helper.o \
 		     drm_vram_mm_helper.o
 obj-$(CONFIG_DRM_VRAM_HELPER) += drm_vram_helper.o
 
+drm_ttm_helper-y := drm_gem_ttm_helper.o
+obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o
+
 drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_dsc.o drm_probe_helper.o \
 		drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \
 		drm_kms_helper_common.o drm_dp_dual_mode_helper.o \
-- 
2.18.1


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

* [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info
       [not found] <20190902124126.7700-1-kraxel@redhat.com>
  2019-09-02 12:41 ` [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info() Gerd Hoffmann
@ 2019-09-02 12:41 ` Gerd Hoffmann
  2019-09-02 14:24   ` Thomas Zimmermann
  2019-09-02 12:41 ` [PATCH 3/5] drm/vram: add vram-mm debugfs file Gerd Hoffmann
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-02 12:41 UTC (permalink / raw)
  To: dri-devel
  Cc: Gerd Hoffmann, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	David Airlie, Daniel Vetter, open list

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

diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
index ac217d768456..17f160dd6e7d 100644
--- a/include/drm/drm_gem_vram_helper.h
+++ b/include/drm/drm_gem_vram_helper.h
@@ -4,6 +4,7 @@
 #define DRM_GEM_VRAM_HELPER_H
 
 #include <drm/drm_gem.h>
+#include <drm/drm_gem_ttm_helper.h>
 #include <drm/ttm/ttm_bo_api.h>
 #include <drm/ttm/ttm_placement.h>
 #include <linux/kernel.h> /* for container_of() */
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index fd751078bae1..b4929e1fb190 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -633,5 +633,6 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs = {
 	.pin	= drm_gem_vram_object_pin,
 	.unpin	= drm_gem_vram_object_unpin,
 	.vmap	= drm_gem_vram_object_vmap,
-	.vunmap	= drm_gem_vram_object_vunmap
+	.vunmap	= drm_gem_vram_object_vunmap,
+	.print_info = drm_gem_ttm_print_info,
 };
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index f7b25519f95c..1be8ad30d8fe 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -169,6 +169,7 @@ config DRM_VRAM_HELPER
 	tristate
 	depends on DRM
 	select DRM_TTM
+	select DRM_TTM_HELPER
 	help
 	  Helpers for VRAM memory management
 
-- 
2.18.1


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

* [PATCH 3/5] drm/vram: add vram-mm debugfs file
       [not found] <20190902124126.7700-1-kraxel@redhat.com>
  2019-09-02 12:41 ` [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info() Gerd Hoffmann
  2019-09-02 12:41 ` [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info Gerd Hoffmann
@ 2019-09-02 12:41 ` Gerd Hoffmann
  2019-09-02 14:34   ` Thomas Zimmermann
  2019-09-02 12:41 ` [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks Gerd Hoffmann
  2019-09-02 12:41 ` [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info Gerd Hoffmann
  4 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-02 12:41 UTC (permalink / raw)
  To: dri-devel
  Cc: Gerd Hoffmann, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	David Airlie, Daniel Vetter, open list

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, \
 	.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
-- 
2.18.1


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

* [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks
       [not found] <20190902124126.7700-1-kraxel@redhat.com>
                   ` (2 preceding siblings ...)
  2019-09-02 12:41 ` [PATCH 3/5] drm/vram: add vram-mm debugfs file Gerd Hoffmann
@ 2019-09-02 12:41 ` Gerd Hoffmann
  2019-09-02 14:34   ` Thomas Zimmermann
  2019-09-02 12:41 ` [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info Gerd Hoffmann
  4 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-02 12:41 UTC (permalink / raw)
  To: dri-devel
  Cc: Gerd Hoffmann, Dave Airlie, David Airlie, Daniel Vetter,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list

Switch qxl to use drm_gem_object_funcs callbacks
instead of drm_driver callbacks.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/qxl/qxl_drv.c    |  8 --------
 drivers/gpu/drm/qxl/qxl_object.c | 12 ++++++++++++
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index 2b726a51a302..996d428fa7e6 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -258,16 +258,8 @@ static struct drm_driver qxl_driver = {
 #endif
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_pin = qxl_gem_prime_pin,
-	.gem_prime_unpin = qxl_gem_prime_unpin,
-	.gem_prime_get_sg_table = qxl_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = qxl_gem_prime_import_sg_table,
-	.gem_prime_vmap = qxl_gem_prime_vmap,
-	.gem_prime_vunmap = qxl_gem_prime_vunmap,
 	.gem_prime_mmap = qxl_gem_prime_mmap,
-	.gem_free_object_unlocked = qxl_gem_object_free,
-	.gem_open_object = qxl_gem_object_open,
-	.gem_close_object = qxl_gem_object_close,
 	.fops = &qxl_fops,
 	.ioctls = qxl_ioctls,
 	.irq_handler = qxl_irq_handler,
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 548dfe6f3b26..29aab7b14513 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -77,6 +77,17 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned)
 	}
 }
 
+static const struct drm_gem_object_funcs qxl_object_funcs = {
+	.free = qxl_gem_object_free,
+	.open = qxl_gem_object_open,
+	.close = qxl_gem_object_close,
+	.pin = qxl_gem_prime_pin,
+	.unpin = qxl_gem_prime_unpin,
+	.get_sg_table = qxl_gem_prime_get_sg_table,
+	.vmap = qxl_gem_prime_vmap,
+	.vunmap = qxl_gem_prime_vunmap,
+};
+
 int qxl_bo_create(struct qxl_device *qdev,
 		  unsigned long size, bool kernel, bool pinned, u32 domain,
 		  struct qxl_surface *surf,
@@ -100,6 +111,7 @@ int qxl_bo_create(struct qxl_device *qdev,
 		kfree(bo);
 		return r;
 	}
+	bo->tbo.base.funcs = &qxl_object_funcs;
 	bo->type = domain;
 	bo->pin_count = pinned ? 1 : 0;
 	bo->surface_id = 0;
-- 
2.18.1


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

* [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info
       [not found] <20190902124126.7700-1-kraxel@redhat.com>
                   ` (3 preceding siblings ...)
  2019-09-02 12:41 ` [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks Gerd Hoffmann
@ 2019-09-02 12:41 ` Gerd Hoffmann
  2019-09-02 14:42   ` Thomas Zimmermann
  4 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-02 12:41 UTC (permalink / raw)
  To: dri-devel
  Cc: Gerd Hoffmann, Dave Airlie, David Airlie, Daniel Vetter,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/qxl/qxl_drv.h    | 1 +
 drivers/gpu/drm/qxl/qxl_object.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
index 9e034c5fa87d..d4051409ce64 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -38,6 +38,7 @@
 #include <drm/drm_crtc.h>
 #include <drm/drm_encoder.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_gem_ttm_helper.h>
 #include <drm/drm_ioctl.h>
 #include <drm/drm_gem.h>
 #include <drm/qxl_drm.h>
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 29aab7b14513..c013c516f561 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -86,6 +86,7 @@ static const struct drm_gem_object_funcs qxl_object_funcs = {
 	.get_sg_table = qxl_gem_prime_get_sg_table,
 	.vmap = qxl_gem_prime_vmap,
 	.vunmap = qxl_gem_prime_vunmap,
+	.print_info = drm_gem_ttm_print_info,
 };
 
 int qxl_bo_create(struct qxl_device *qdev,
-- 
2.18.1


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

* Re: [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info()
  2019-09-02 12:41 ` [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info() Gerd Hoffmann
@ 2019-09-02 14:19   ` Thomas Zimmermann
  2019-09-03  6:15     ` Gerd Hoffmann
  0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-02 14:19 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel
  Cc: Jonathan Corbet, David Airlie, open list:DOCUMENTATION,
	open list, Maxime Ripard, Sean Paul


[-- Attachment #1.1: Type: text/plain, Size: 6274 bytes --]

Hi

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

But please see below.

Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> Now with ttm_buffer_object being a subclass of drm_gem_object we can
> easily lookup ttm_buffer_object for a given drm_gem_object, which in
> turm allows to create common helper functions.

s/trum/trun

> 
> This patch starts off with a drm_gem_ttm_print_info() helper function
> which prints adds some ttm specific lines to the debug output.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/drm/drm_gem_ttm_helper.h     | 19 ++++++++
>  drivers/gpu/drm/drm_gem_ttm_helper.c | 67 ++++++++++++++++++++++++++++
>  Documentation/gpu/drm-mm.rst         | 12 +++++
>  drivers/gpu/drm/Kconfig              |  7 +++
>  drivers/gpu/drm/Makefile             |  3 ++
>  5 files changed, 108 insertions(+)
>  create mode 100644 include/drm/drm_gem_ttm_helper.h
>  create mode 100644 drivers/gpu/drm/drm_gem_ttm_helper.c
> 
> diff --git a/include/drm/drm_gem_ttm_helper.h b/include/drm/drm_gem_ttm_helper.h
> new file mode 100644
> index 000000000000..6268f89c5a48
> --- /dev/null
> +++ b/include/drm/drm_gem_ttm_helper.h
> @@ -0,0 +1,19 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +
> +#ifndef DRM_GEM_TTM_HELPER_H
> +#define DRM_GEM_TTM_HELPER_H
> +
> +#include <linux/kernel.h>
> +
> +#include <drm/drm_gem.h>
> +#include <drm/drm_device.h>
> +#include <drm/ttm/ttm_bo_api.h>
> +#include <drm/ttm/ttm_bo_driver.h>
> +
> +#define drm_gem_ttm_of_gem(gem_obj) \
> +	container_of(gem_obj, struct ttm_buffer_object, base)
> +
> +void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
> +			    const struct drm_gem_object *gem);
> +
> +#endif
> diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c b/drivers/gpu/drm/drm_gem_ttm_helper.c
> new file mode 100644
> index 000000000000..cd6ac2cc8fdd
> --- /dev/null
> +++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
> @@ -0,0 +1,67 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +
> +#include <linux/module.h>
> +
> +#include <drm/drm_gem_ttm_helper.h>
> +
> +/**
> + * DOC: overview
> + *
> + * This library provides helper functions for gem objects backed by
> + * ttm.
> + */
> +
> +/**
> + * drm_gem_ttm_print_info() - Print &ttm_buffer_object info for debugfs
> + * @p: DRM printer
> + * @indent: Tab indentation level
> + * @gem: GEM object
> + *
> + * This function can be used as the &drm_driver->gem_print_info callback.
> + */
> +void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
> +			    const struct drm_gem_object *gem)
> +{
> +	static const char *plname[] = {

The array and the strings should be declared const. IIRC something like

  static const char * const plname[] = {

> +		[ TTM_PL_SYSTEM ] = "system",
> +		[ TTM_PL_TT     ] = "tt",
> +		[ TTM_PL_VRAM   ] = "vram",
> +		[ TTM_PL_PRIV   ] = "priv",
> +

This 'gap' in the array seems to be a problem for drivers that use these
bits. Could the print logic be moved into s separate function that also
takes the array as an argument?

Best regards
Thomas

> +		[ 16 ]            = "cached",
> +		[ 17 ]            = "uncached",
> +		[ 18 ]            = "wc",
> +		[ 19 ]            = "contig",
> +
> +		[ 21 ]            = "pinned", /* NO_EVICT */
> +		[ 22 ]            = "topdown",
> +	};
> +	const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
> +	bool first = true;
> +	unsigned int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(plname); i++) {
> +		if (!(bo->mem.placement & (1 << i)))
> +			continue;
> +		if (!plname[i])
> +			continue;
> +		if (first) {
> +			first = false;
> +			drm_printf_indent(p, indent, "placement=%s", plname[i]);
> +		} else
> +			drm_printf(p, ",%s", plname[i]);
> +	}
> +	if (!first)
> +		drm_printf(p, "\n");
> +
> +	if (bo->mem.bus.is_iomem) {
> +		drm_printf_indent(p, indent, "bus.base=%lx\n",
> +				  (unsigned long)bo->mem.bus.base);
> +		drm_printf_indent(p, indent, "bus.offset=%lx\n",
> +				  (unsigned long)bo->mem.bus.offset);
> +	}
> +}
> +EXPORT_SYMBOL(drm_gem_ttm_print_info);
> +
> +MODULE_DESCRIPTION("DRM gem ttm helpers");
> +MODULE_LICENSE("GPL");
> diff --git a/Documentation/gpu/drm-mm.rst b/Documentation/gpu/drm-mm.rst
> index b664f054c259..a70a1d9f30ec 100644
> --- a/Documentation/gpu/drm-mm.rst
> +++ b/Documentation/gpu/drm-mm.rst
> @@ -412,6 +412,18 @@ VRAM MM Helper Functions Reference
>  .. kernel-doc:: drivers/gpu/drm/drm_vram_mm_helper.c
>     :export:
>  
> +GEM TTM Helper Functions Reference
> +-----------------------------------
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_gem_ttm_helper.c
> +   :doc: overview
> +
> +.. kernel-doc:: include/drm/drm_gem_ttm_helper.h
> +   :internal:
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_gem_ttm_helper.c
> +   :export:
> +
>  VMA Offset Manager
>  ==================
>  
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index e6f40fb54c9a..f7b25519f95c 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -172,6 +172,13 @@ config DRM_VRAM_HELPER
>  	help
>  	  Helpers for VRAM memory management
>  
> +config DRM_TTM_HELPER
> +	tristate
> +	depends on DRM
> +	select DRM_TTM
> +	help
> +	  Helpers for ttm-based gem objects
> +
>  config DRM_GEM_CMA_HELPER
>  	bool
>  	depends on DRM
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 10f8329a8b71..545c61d6528b 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -37,6 +37,9 @@ drm_vram_helper-y := drm_gem_vram_helper.o \
>  		     drm_vram_mm_helper.o
>  obj-$(CONFIG_DRM_VRAM_HELPER) += drm_vram_helper.o
>  
> +drm_ttm_helper-y := drm_gem_ttm_helper.o
> +obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o
> +
>  drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_dsc.o drm_probe_helper.o \
>  		drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \
>  		drm_kms_helper_common.o drm_dp_dual_mode_helper.o \
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 484 bytes --]

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

* Re: [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info
  2019-09-02 12:41 ` [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info Gerd Hoffmann
@ 2019-09-02 14:24   ` Thomas Zimmermann
  2019-09-03  6:17     ` Gerd Hoffmann
  0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-02 14:24 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel
  Cc: Maxime Ripard, open list, David Airlie, Sean Paul


[-- Attachment #1.1: Type: text/plain, Size: 2288 bytes --]

Hi

Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/drm/drm_gem_vram_helper.h     | 1 +
>  drivers/gpu/drm/drm_gem_vram_helper.c | 3 ++-
>  drivers/gpu/drm/Kconfig               | 1 +
>  3 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
> index ac217d768456..17f160dd6e7d 100644
> --- a/include/drm/drm_gem_vram_helper.h
> +++ b/include/drm/drm_gem_vram_helper.h
> @@ -4,6 +4,7 @@
>  #define DRM_GEM_VRAM_HELPER_H
>  
>  #include <drm/drm_gem.h>
> +#include <drm/drm_gem_ttm_helper.h>

Why is this include statement in the header file instead of the source file?

>  #include <drm/ttm/ttm_bo_api.h>
>  #include <drm/ttm/ttm_placement.h>
>  #include <linux/kernel.h> /* for container_of() */
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index fd751078bae1..b4929e1fb190 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -633,5 +633,6 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs = {
>  	.pin	= drm_gem_vram_object_pin,
>  	.unpin	= drm_gem_vram_object_unpin,
>  	.vmap	= drm_gem_vram_object_vmap,
> -	.vunmap	= drm_gem_vram_object_vunmap
> +	.vunmap	= drm_gem_vram_object_vunmap,
> +	.print_info = drm_gem_ttm_print_info,
>  };
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index f7b25519f95c..1be8ad30d8fe 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -169,6 +169,7 @@ config DRM_VRAM_HELPER
>  	tristate
>  	depends on DRM
>  	select DRM_TTM
> +	select DRM_TTM_HELPER

I thought that VRAM helpers already depend on TTM helpers. If so, this
line should rather be a separate patch with a Fixes tag to the patch
that introduced the dependency.

With these points addressed:

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

Best regards
Thomas

>  	help
>  	  Helpers for VRAM memory management
>  
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 3/5] drm/vram: add vram-mm debugfs file
  2019-09-02 12:41 ` [PATCH 3/5] drm/vram: add vram-mm debugfs file Gerd Hoffmann
@ 2019-09-02 14:34   ` Thomas Zimmermann
  2019-09-03  6:20     ` Gerd Hoffmann
  0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-02 14:34 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel
  Cc: Maxime Ripard, open list, David Airlie, Sean Paul


[-- Attachment #1.1: Type: text/plain, Size: 4347 bytes --]

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
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks
  2019-09-02 12:41 ` [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks Gerd Hoffmann
@ 2019-09-02 14:34   ` Thomas Zimmermann
  2019-09-03  6:24     ` Gerd Hoffmann
  0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-02 14:34 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel
  Cc: David Airlie, open list,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, Dave Airlie


[-- Attachment #1.1: Type: text/plain, Size: 2630 bytes --]

This patch seems unrelated.

Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> Switch qxl to use drm_gem_object_funcs callbacks
> instead of drm_driver callbacks.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  drivers/gpu/drm/qxl/qxl_drv.c    |  8 --------
>  drivers/gpu/drm/qxl/qxl_object.c | 12 ++++++++++++
>  2 files changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 2b726a51a302..996d428fa7e6 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -258,16 +258,8 @@ static struct drm_driver qxl_driver = {
>  #endif
>  	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>  	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_pin = qxl_gem_prime_pin,
> -	.gem_prime_unpin = qxl_gem_prime_unpin,
> -	.gem_prime_get_sg_table = qxl_gem_prime_get_sg_table,
>  	.gem_prime_import_sg_table = qxl_gem_prime_import_sg_table,
> -	.gem_prime_vmap = qxl_gem_prime_vmap,
> -	.gem_prime_vunmap = qxl_gem_prime_vunmap,
>  	.gem_prime_mmap = qxl_gem_prime_mmap,
> -	.gem_free_object_unlocked = qxl_gem_object_free,
> -	.gem_open_object = qxl_gem_object_open,
> -	.gem_close_object = qxl_gem_object_close,
>  	.fops = &qxl_fops,
>  	.ioctls = qxl_ioctls,
>  	.irq_handler = qxl_irq_handler,
> diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
> index 548dfe6f3b26..29aab7b14513 100644
> --- a/drivers/gpu/drm/qxl/qxl_object.c
> +++ b/drivers/gpu/drm/qxl/qxl_object.c
> @@ -77,6 +77,17 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned)
>  	}
>  }
>  
> +static const struct drm_gem_object_funcs qxl_object_funcs = {
> +	.free = qxl_gem_object_free,
> +	.open = qxl_gem_object_open,
> +	.close = qxl_gem_object_close,
> +	.pin = qxl_gem_prime_pin,
> +	.unpin = qxl_gem_prime_unpin,
> +	.get_sg_table = qxl_gem_prime_get_sg_table,
> +	.vmap = qxl_gem_prime_vmap,
> +	.vunmap = qxl_gem_prime_vunmap,
> +};
> +
>  int qxl_bo_create(struct qxl_device *qdev,
>  		  unsigned long size, bool kernel, bool pinned, u32 domain,
>  		  struct qxl_surface *surf,
> @@ -100,6 +111,7 @@ int qxl_bo_create(struct qxl_device *qdev,
>  		kfree(bo);
>  		return r;
>  	}
> +	bo->tbo.base.funcs = &qxl_object_funcs;
>  	bo->type = domain;
>  	bo->pin_count = pinned ? 1 : 0;
>  	bo->surface_id = 0;
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info
  2019-09-02 12:41 ` [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info Gerd Hoffmann
@ 2019-09-02 14:42   ` Thomas Zimmermann
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-02 14:42 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel
  Cc: David Airlie, open list,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, Dave Airlie


[-- Attachment #1.1: Type: text/plain, Size: 1442 bytes --]

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

Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  drivers/gpu/drm/qxl/qxl_drv.h    | 1 +
>  drivers/gpu/drm/qxl/qxl_object.c | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index 9e034c5fa87d..d4051409ce64 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -38,6 +38,7 @@
>  #include <drm/drm_crtc.h>
>  #include <drm/drm_encoder.h>
>  #include <drm/drm_fb_helper.h>
> +#include <drm/drm_gem_ttm_helper.h>
>  #include <drm/drm_ioctl.h>
>  #include <drm/drm_gem.h>
>  #include <drm/qxl_drm.h>
> diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
> index 29aab7b14513..c013c516f561 100644
> --- a/drivers/gpu/drm/qxl/qxl_object.c
> +++ b/drivers/gpu/drm/qxl/qxl_object.c
> @@ -86,6 +86,7 @@ static const struct drm_gem_object_funcs qxl_object_funcs = {
>  	.get_sg_table = qxl_gem_prime_get_sg_table,
>  	.vmap = qxl_gem_prime_vmap,
>  	.vunmap = qxl_gem_prime_vunmap,
> +	.print_info = drm_gem_ttm_print_info,
>  };
>  
>  int qxl_bo_create(struct qxl_device *qdev,
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info()
  2019-09-02 14:19   ` Thomas Zimmermann
@ 2019-09-03  6:15     ` Gerd Hoffmann
  0 siblings, 0 replies; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-03  6:15 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: dri-devel, Jonathan Corbet, David Airlie,
	open list:DOCUMENTATION, open list, Maxime Ripard, Sean Paul

  Hi,

> > +		[ TTM_PL_SYSTEM ] = "system",
> > +		[ TTM_PL_TT     ] = "tt",
> > +		[ TTM_PL_VRAM   ] = "vram",
> > +		[ TTM_PL_PRIV   ] = "priv",
> > +
> 
> This 'gap' in the array seems to be a problem for drivers that use these
> bits. Could the print logic be moved into s separate function that also
> takes the array as an argument?

Are there any drivers which actually use these bits and which therefore
might want to use a different array?

Also note they should not cause any problems (other than not being
printed).  There is an explicit check here ...

> > +		if (!plname[i])
> > +			continue;

.. to skip unknown bits.

cheers,
  Gerd


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

* Re: [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info
  2019-09-02 14:24   ` Thomas Zimmermann
@ 2019-09-03  6:17     ` Gerd Hoffmann
  0 siblings, 0 replies; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-03  6:17 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: dri-devel, Maxime Ripard, open list, David Airlie, Sean Paul

  Hi,

> > @@ -169,6 +169,7 @@ config DRM_VRAM_HELPER
> >  	tristate
> >  	depends on DRM
> >  	select DRM_TTM
> > +	select DRM_TTM_HELPER
> 
> I thought that VRAM helpers already depend on TTM helpers.

No, they don't.  Patch #1 adds them ;)

cheers,
  Gerd


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

* Re: [PATCH 3/5] drm/vram: add vram-mm debugfs file
  2019-09-02 14:34   ` Thomas Zimmermann
@ 2019-09-03  6:20     ` Gerd Hoffmann
  0 siblings, 0 replies; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-03  6:20 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: dri-devel, Maxime Ripard, open list, David Airlie, Sean Paul

  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


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

* Re: [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks
  2019-09-02 14:34   ` Thomas Zimmermann
@ 2019-09-03  6:24     ` Gerd Hoffmann
  2019-09-03  6:52       ` Thomas Zimmermann
  0 siblings, 1 reply; 15+ messages in thread
From: Gerd Hoffmann @ 2019-09-03  6:24 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: dri-devel, David Airlie, open list,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, Dave Airlie

On Mon, Sep 02, 2019 at 04:34:49PM +0200, Thomas Zimmermann wrote:
> This patch seems unrelated.

Well, patch 5/5 depends on it because it hooks the
drm_gem_ttm_print_info helper into the new
qxl_object_funcs added by this patch.

> Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
> > Switch qxl to use drm_gem_object_funcs callbacks
> > instead of drm_driver callbacks.
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> >  drivers/gpu/drm/qxl/qxl_drv.c    |  8 --------
> >  drivers/gpu/drm/qxl/qxl_object.c | 12 ++++++++++++
> >  2 files changed, 12 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> > index 2b726a51a302..996d428fa7e6 100644
> > --- a/drivers/gpu/drm/qxl/qxl_drv.c
> > +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> > @@ -258,16 +258,8 @@ static struct drm_driver qxl_driver = {
> >  #endif
> >  	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> >  	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> > -	.gem_prime_pin = qxl_gem_prime_pin,
> > -	.gem_prime_unpin = qxl_gem_prime_unpin,
> > -	.gem_prime_get_sg_table = qxl_gem_prime_get_sg_table,
> >  	.gem_prime_import_sg_table = qxl_gem_prime_import_sg_table,
> > -	.gem_prime_vmap = qxl_gem_prime_vmap,
> > -	.gem_prime_vunmap = qxl_gem_prime_vunmap,
> >  	.gem_prime_mmap = qxl_gem_prime_mmap,
> > -	.gem_free_object_unlocked = qxl_gem_object_free,
> > -	.gem_open_object = qxl_gem_object_open,
> > -	.gem_close_object = qxl_gem_object_close,
> >  	.fops = &qxl_fops,
> >  	.ioctls = qxl_ioctls,
> >  	.irq_handler = qxl_irq_handler,
> > diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
> > index 548dfe6f3b26..29aab7b14513 100644
> > --- a/drivers/gpu/drm/qxl/qxl_object.c
> > +++ b/drivers/gpu/drm/qxl/qxl_object.c
> > @@ -77,6 +77,17 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned)
> >  	}
> >  }
> >  
> > +static const struct drm_gem_object_funcs qxl_object_funcs = {
> > +	.free = qxl_gem_object_free,
> > +	.open = qxl_gem_object_open,
> > +	.close = qxl_gem_object_close,
> > +	.pin = qxl_gem_prime_pin,
> > +	.unpin = qxl_gem_prime_unpin,
> > +	.get_sg_table = qxl_gem_prime_get_sg_table,
> > +	.vmap = qxl_gem_prime_vmap,
> > +	.vunmap = qxl_gem_prime_vunmap,
> > +};
> > +
> >  int qxl_bo_create(struct qxl_device *qdev,
> >  		  unsigned long size, bool kernel, bool pinned, u32 domain,
> >  		  struct qxl_surface *surf,
> > @@ -100,6 +111,7 @@ int qxl_bo_create(struct qxl_device *qdev,
> >  		kfree(bo);
> >  		return r;
> >  	}
> > +	bo->tbo.base.funcs = &qxl_object_funcs;
> >  	bo->type = domain;
> >  	bo->pin_count = pinned ? 1 : 0;
> >  	bo->surface_id = 0;
> > 
> 
> -- 
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
> HRB 21284 (AG Nürnberg)
> 




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

* Re: [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks
  2019-09-03  6:24     ` Gerd Hoffmann
@ 2019-09-03  6:52       ` Thomas Zimmermann
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Zimmermann @ 2019-09-03  6:52 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: David Airlie, open list, dri-devel,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU, Dave Airlie,
	open list:DRM DRIVER FOR QXL VIRTUAL GPU


[-- Attachment #1.1: Type: text/plain, Size: 3482 bytes --]

Hi

Am 03.09.19 um 08:24 schrieb Gerd Hoffmann:
> On Mon, Sep 02, 2019 at 04:34:49PM +0200, Thomas Zimmermann wrote:
>> This patch seems unrelated.
> 
> Well, patch 5/5 depends on it because it hooks the
> drm_gem_ttm_print_info helper into the new
> qxl_object_funcs added by this patch.

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


> 
>> Am 02.09.19 um 14:41 schrieb Gerd Hoffmann:
>>> Switch qxl to use drm_gem_object_funcs callbacks
>>> instead of drm_driver callbacks.
>>>
>>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>>> ---
>>>  drivers/gpu/drm/qxl/qxl_drv.c    |  8 --------
>>>  drivers/gpu/drm/qxl/qxl_object.c | 12 ++++++++++++
>>>  2 files changed, 12 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
>>> index 2b726a51a302..996d428fa7e6 100644
>>> --- a/drivers/gpu/drm/qxl/qxl_drv.c
>>> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
>>> @@ -258,16 +258,8 @@ static struct drm_driver qxl_driver = {
>>>  #endif
>>>  	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>  	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> -	.gem_prime_pin = qxl_gem_prime_pin,
>>> -	.gem_prime_unpin = qxl_gem_prime_unpin,
>>> -	.gem_prime_get_sg_table = qxl_gem_prime_get_sg_table,
>>>  	.gem_prime_import_sg_table = qxl_gem_prime_import_sg_table,
>>> -	.gem_prime_vmap = qxl_gem_prime_vmap,
>>> -	.gem_prime_vunmap = qxl_gem_prime_vunmap,
>>>  	.gem_prime_mmap = qxl_gem_prime_mmap,
>>> -	.gem_free_object_unlocked = qxl_gem_object_free,
>>> -	.gem_open_object = qxl_gem_object_open,
>>> -	.gem_close_object = qxl_gem_object_close,
>>>  	.fops = &qxl_fops,
>>>  	.ioctls = qxl_ioctls,
>>>  	.irq_handler = qxl_irq_handler,
>>> diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
>>> index 548dfe6f3b26..29aab7b14513 100644
>>> --- a/drivers/gpu/drm/qxl/qxl_object.c
>>> +++ b/drivers/gpu/drm/qxl/qxl_object.c
>>> @@ -77,6 +77,17 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned)
>>>  	}
>>>  }
>>>  
>>> +static const struct drm_gem_object_funcs qxl_object_funcs = {
>>> +	.free = qxl_gem_object_free,
>>> +	.open = qxl_gem_object_open,
>>> +	.close = qxl_gem_object_close,
>>> +	.pin = qxl_gem_prime_pin,
>>> +	.unpin = qxl_gem_prime_unpin,
>>> +	.get_sg_table = qxl_gem_prime_get_sg_table,
>>> +	.vmap = qxl_gem_prime_vmap,
>>> +	.vunmap = qxl_gem_prime_vunmap,
>>> +};
>>> +
>>>  int qxl_bo_create(struct qxl_device *qdev,
>>>  		  unsigned long size, bool kernel, bool pinned, u32 domain,
>>>  		  struct qxl_surface *surf,
>>> @@ -100,6 +111,7 @@ int qxl_bo_create(struct qxl_device *qdev,
>>>  		kfree(bo);
>>>  		return r;
>>>  	}
>>> +	bo->tbo.base.funcs = &qxl_object_funcs;
>>>  	bo->type = domain;
>>>  	bo->pin_count = pinned ? 1 : 0;
>>>  	bo->surface_id = 0;
>>>
>>
>> -- 
>> Thomas Zimmermann
>> Graphics Driver Developer
>> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
>> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
>> HRB 21284 (AG Nürnberg)
>>
> 
> 
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2019-09-03  6:52 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20190902124126.7700-1-kraxel@redhat.com>
2019-09-02 12:41 ` [PATCH 1/5] drm/ttm: add drm_gem_ttm_print_info() Gerd Hoffmann
2019-09-02 14:19   ` Thomas Zimmermann
2019-09-03  6:15     ` Gerd Hoffmann
2019-09-02 12:41 ` [PATCH 2/5] drm/vram: use drm_gem_ttm_print_info Gerd Hoffmann
2019-09-02 14:24   ` Thomas Zimmermann
2019-09-03  6:17     ` Gerd Hoffmann
2019-09-02 12:41 ` [PATCH 3/5] drm/vram: add vram-mm debugfs file Gerd Hoffmann
2019-09-02 14:34   ` Thomas Zimmermann
2019-09-03  6:20     ` Gerd Hoffmann
2019-09-02 12:41 ` [PATCH 4/5] drm/qxl: use drm_gem_object_funcs callbacks Gerd Hoffmann
2019-09-02 14:34   ` Thomas Zimmermann
2019-09-03  6:24     ` Gerd Hoffmann
2019-09-03  6:52       ` Thomas Zimmermann
2019-09-02 12:41 ` [PATCH 5/5] drm/qxl: use drm_gem_ttm_print_info Gerd Hoffmann
2019-09-02 14:42   ` Thomas Zimmermann

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).