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