linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Zimmermann <tzimmermann@suse.de>
To: boris.brezillon@collabora.com, simona@ffwll.ch,
	airlied@gmail.com, mripard@kernel.org,
	maarten.lankhorst@linux.intel.com, ogabbay@kernel.org,
	mamin506@gmail.com, lizhi.hou@amd.com,
	maciej.falkowski@linux.intel.com,
	karol.wachowski@linux.intel.com, tomeu@tomeuvizoso.net,
	frank.binns@imgtec.com, matt.coster@imgtec.com, yuq825@gmail.com,
	robh@kernel.org, steven.price@arm.com,
	adrian.larumbe@collabora.com, liviu.dudau@arm.com,
	mwen@igalia.com, kraxel@redhat.com,
	dmitry.osipenko@collabora.com, gurchetansingh@chromium.org,
	olvaffe@gmail.com, corbet@lwn.net
Cc: dri-devel@lists.freedesktop.org, lima@lists.freedesktop.org,
	virtualization@lists.linux.dev, linux-doc@vger.kernel.org,
	Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH 05/13] drm/imagination: Use GEM-UMA helpers for memory management
Date: Tue,  9 Dec 2025 14:42:02 +0100	[thread overview]
Message-ID: <20251209140141.94407-6-tzimmermann@suse.de> (raw)
In-Reply-To: <20251209140141.94407-1-tzimmermann@suse.de>

Convert imagination from GEM-SHMEM to GEM-UMA. The latter is just a
copy, so this change it merely renaming symbols. No functional changes.

GEM-SHMEM will become more self-contained for drivers without specific
memory management. GEM-UMA's interfaces will remain flexible for drivers
with UMA hardware, such as imagination.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/imagination/Kconfig         |  4 +-
 drivers/gpu/drm/imagination/pvr_drv.c       |  2 +-
 drivers/gpu/drm/imagination/pvr_free_list.c |  2 +-
 drivers/gpu/drm/imagination/pvr_gem.c       | 74 ++++++++++-----------
 drivers/gpu/drm/imagination/pvr_gem.h       | 12 ++--
 5 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/imagination/Kconfig b/drivers/gpu/drm/imagination/Kconfig
index 0482bfcefdde..ee796c9cfdf2 100644
--- a/drivers/gpu/drm/imagination/Kconfig
+++ b/drivers/gpu/drm/imagination/Kconfig
@@ -9,9 +9,9 @@ config DRM_POWERVR
 	depends on PM
 	depends on POWER_SEQUENCING || !POWER_SEQUENCING
 	select DRM_EXEC
-	select DRM_GEM_SHMEM_HELPER
-	select DRM_SCHED
+	select DRM_GEM_UMA_HELPER
 	select DRM_GPUVM
+	select DRM_SCHED
 	select FW_LOADER
 	help
 	  Choose this option if you have a system that has an Imagination
diff --git a/drivers/gpu/drm/imagination/pvr_drv.c b/drivers/gpu/drm/imagination/pvr_drv.c
index 916b40ced7eb..61bcbbef208c 100644
--- a/drivers/gpu/drm/imagination/pvr_drv.c
+++ b/drivers/gpu/drm/imagination/pvr_drv.c
@@ -1392,7 +1392,7 @@ static struct drm_driver pvr_drm_driver = {
 	.minor = PVR_DRIVER_MINOR,
 	.patchlevel = PVR_DRIVER_PATCHLEVEL,
 
-	.gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
+	.gem_prime_import_sg_table = drm_gem_uma_prime_import_sg_table,
 	.gem_create_object = pvr_gem_create_object,
 };
 
diff --git a/drivers/gpu/drm/imagination/pvr_free_list.c b/drivers/gpu/drm/imagination/pvr_free_list.c
index 5228e214491c..5b43f7ca2a6c 100644
--- a/drivers/gpu/drm/imagination/pvr_free_list.c
+++ b/drivers/gpu/drm/imagination/pvr_free_list.c
@@ -281,7 +281,7 @@ pvr_free_list_insert_node_locked(struct pvr_free_list_node *free_list_node)
 	offset = (start_page * FREE_LIST_ENTRY_SIZE) &
 		  ~((u64)ROGUE_BIF_PM_FREELIST_BASE_ADDR_ALIGNSIZE - 1);
 
-	sgt = drm_gem_shmem_get_pages_sgt(&free_list_node->mem_obj->base);
+	sgt = drm_gem_uma_get_pages_sgt(&free_list_node->mem_obj->base);
 	if (WARN_ON(IS_ERR(sgt)))
 		return PTR_ERR(sgt);
 
diff --git a/drivers/gpu/drm/imagination/pvr_gem.c b/drivers/gpu/drm/imagination/pvr_gem.c
index a66cf082af24..f29c9808f4e2 100644
--- a/drivers/gpu/drm/imagination/pvr_gem.c
+++ b/drivers/gpu/drm/imagination/pvr_gem.c
@@ -25,30 +25,30 @@
 
 static void pvr_gem_object_free(struct drm_gem_object *obj)
 {
-	drm_gem_shmem_object_free(obj);
+	drm_gem_uma_object_free(obj);
 }
 
 static int pvr_gem_mmap(struct drm_gem_object *gem_obj, struct vm_area_struct *vma)
 {
 	struct pvr_gem_object *pvr_obj = gem_to_pvr_gem(gem_obj);
-	struct drm_gem_shmem_object *shmem_obj = shmem_gem_from_pvr_gem(pvr_obj);
+	struct drm_gem_uma_object *uma_obj = uma_gem_from_pvr_gem(pvr_obj);
 
 	if (!(pvr_obj->flags & DRM_PVR_BO_ALLOW_CPU_USERSPACE_ACCESS))
 		return -EINVAL;
 
-	return drm_gem_shmem_mmap(shmem_obj, vma);
+	return drm_gem_uma_mmap(uma_obj, vma);
 }
 
 static const struct drm_gem_object_funcs pvr_gem_object_funcs = {
 	.free = pvr_gem_object_free,
-	.print_info = drm_gem_shmem_object_print_info,
-	.pin = drm_gem_shmem_object_pin,
-	.unpin = drm_gem_shmem_object_unpin,
-	.get_sg_table = drm_gem_shmem_object_get_sg_table,
-	.vmap = drm_gem_shmem_object_vmap,
-	.vunmap = drm_gem_shmem_object_vunmap,
+	.print_info = drm_gem_uma_object_print_info,
+	.pin = drm_gem_uma_object_pin,
+	.unpin = drm_gem_uma_object_unpin,
+	.get_sg_table = drm_gem_uma_object_get_sg_table,
+	.vmap = drm_gem_uma_object_vmap,
+	.vunmap = drm_gem_uma_object_vunmap,
 	.mmap = pvr_gem_mmap,
-	.vm_ops = &drm_gem_shmem_vm_ops,
+	.vm_ops = &drm_gem_uma_vm_ops,
 };
 
 /**
@@ -195,25 +195,25 @@ pvr_gem_object_from_handle(struct pvr_file *pvr_file, u32 handle)
 void *
 pvr_gem_object_vmap(struct pvr_gem_object *pvr_obj)
 {
-	struct drm_gem_shmem_object *shmem_obj = shmem_gem_from_pvr_gem(pvr_obj);
+	struct drm_gem_uma_object *uma_obj = uma_gem_from_pvr_gem(pvr_obj);
 	struct drm_gem_object *obj = gem_from_pvr_gem(pvr_obj);
 	struct iosys_map map;
 	int err;
 
 	dma_resv_lock(obj->resv, NULL);
 
-	err = drm_gem_shmem_vmap_locked(shmem_obj, &map);
+	err = drm_gem_uma_vmap_locked(uma_obj, &map);
 	if (err)
 		goto err_unlock;
 
 	if (pvr_obj->flags & PVR_BO_CPU_CACHED) {
-		struct device *dev = shmem_obj->base.dev->dev;
+		struct device *dev = uma_obj->base.dev->dev;
 
-		/* If shmem_obj->sgt is NULL, that means the buffer hasn't been mapped
+		/* If uma_obj->sgt is NULL, that means the buffer hasn't been mapped
 		 * in GPU space yet.
 		 */
-		if (shmem_obj->sgt)
-			dma_sync_sgtable_for_cpu(dev, shmem_obj->sgt, DMA_BIDIRECTIONAL);
+		if (uma_obj->sgt)
+			dma_sync_sgtable_for_cpu(dev, uma_obj->sgt, DMA_BIDIRECTIONAL);
 	}
 
 	dma_resv_unlock(obj->resv);
@@ -237,8 +237,8 @@ pvr_gem_object_vmap(struct pvr_gem_object *pvr_obj)
 void
 pvr_gem_object_vunmap(struct pvr_gem_object *pvr_obj)
 {
-	struct drm_gem_shmem_object *shmem_obj = shmem_gem_from_pvr_gem(pvr_obj);
-	struct iosys_map map = IOSYS_MAP_INIT_VADDR(shmem_obj->vaddr);
+	struct drm_gem_uma_object *uma_obj = uma_gem_from_pvr_gem(pvr_obj);
+	struct iosys_map map = IOSYS_MAP_INIT_VADDR(uma_obj->vaddr);
 	struct drm_gem_object *obj = gem_from_pvr_gem(pvr_obj);
 
 	if (WARN_ON(!map.vaddr))
@@ -247,16 +247,16 @@ pvr_gem_object_vunmap(struct pvr_gem_object *pvr_obj)
 	dma_resv_lock(obj->resv, NULL);
 
 	if (pvr_obj->flags & PVR_BO_CPU_CACHED) {
-		struct device *dev = shmem_obj->base.dev->dev;
+		struct device *dev = uma_obj->base.dev->dev;
 
-		/* If shmem_obj->sgt is NULL, that means the buffer hasn't been mapped
+		/* If uma_obj->sgt is NULL, that means the buffer hasn't been mapped
 		 * in GPU space yet.
 		 */
-		if (shmem_obj->sgt)
-			dma_sync_sgtable_for_device(dev, shmem_obj->sgt, DMA_BIDIRECTIONAL);
+		if (uma_obj->sgt)
+			dma_sync_sgtable_for_device(dev, uma_obj->sgt, DMA_BIDIRECTIONAL);
 	}
 
-	drm_gem_shmem_vunmap_locked(shmem_obj, &map);
+	drm_gem_uma_vunmap_locked(uma_obj, &map);
 
 	dma_resv_unlock(obj->resv);
 }
@@ -336,7 +336,7 @@ struct pvr_gem_object *
 pvr_gem_object_create(struct pvr_device *pvr_dev, size_t size, u64 flags)
 {
 	struct drm_device *drm_dev = from_pvr_device(pvr_dev);
-	struct drm_gem_shmem_object *shmem_obj;
+	struct drm_gem_uma_object *uma_obj;
 	struct pvr_gem_object *pvr_obj;
 	struct sg_table *sgt;
 	int err;
@@ -348,19 +348,19 @@ pvr_gem_object_create(struct pvr_device *pvr_dev, size_t size, u64 flags)
 	if (device_get_dma_attr(drm_dev->dev) == DEV_DMA_COHERENT)
 		flags |= PVR_BO_CPU_CACHED;
 
-	shmem_obj = drm_gem_shmem_create(drm_dev, size);
-	if (IS_ERR(shmem_obj))
-		return ERR_CAST(shmem_obj);
+	uma_obj = drm_gem_uma_create(drm_dev, size);
+	if (IS_ERR(uma_obj))
+		return ERR_CAST(uma_obj);
 
-	shmem_obj->pages_mark_dirty_on_put = true;
-	shmem_obj->map_wc = !(flags & PVR_BO_CPU_CACHED);
-	pvr_obj = shmem_gem_to_pvr_gem(shmem_obj);
+	uma_obj->pages_mark_dirty_on_put = true;
+	uma_obj->map_wc = !(flags & PVR_BO_CPU_CACHED);
+	pvr_obj = uma_gem_to_pvr_gem(uma_obj);
 	pvr_obj->flags = flags;
 
-	sgt = drm_gem_shmem_get_pages_sgt(shmem_obj);
+	sgt = drm_gem_uma_get_pages_sgt(uma_obj);
 	if (IS_ERR(sgt)) {
 		err = PTR_ERR(sgt);
-		goto err_shmem_object_free;
+		goto err_uma_object_free;
 	}
 
 	dma_sync_sgtable_for_device(drm_dev->dev, sgt, DMA_BIDIRECTIONAL);
@@ -373,8 +373,8 @@ pvr_gem_object_create(struct pvr_device *pvr_dev, size_t size, u64 flags)
 
 	return pvr_obj;
 
-err_shmem_object_free:
-	drm_gem_shmem_free(shmem_obj);
+err_uma_object_free:
+	drm_gem_uma_free(uma_obj);
 
 	return ERR_PTR(err);
 }
@@ -394,13 +394,13 @@ int
 pvr_gem_get_dma_addr(struct pvr_gem_object *pvr_obj, u32 offset,
 		     dma_addr_t *dma_addr_out)
 {
-	struct drm_gem_shmem_object *shmem_obj = shmem_gem_from_pvr_gem(pvr_obj);
+	struct drm_gem_uma_object *uma_obj = uma_gem_from_pvr_gem(pvr_obj);
 	u32 accumulated_offset = 0;
 	struct scatterlist *sgl;
 	unsigned int sgt_idx;
 
-	WARN_ON(!shmem_obj->sgt);
-	for_each_sgtable_dma_sg(shmem_obj->sgt, sgl, sgt_idx) {
+	WARN_ON(!uma_obj->sgt);
+	for_each_sgtable_dma_sg(uma_obj->sgt, sgl, sgt_idx) {
 		u32 new_offset = accumulated_offset + sg_dma_len(sgl);
 
 		if (offset >= accumulated_offset && offset < new_offset) {
diff --git a/drivers/gpu/drm/imagination/pvr_gem.h b/drivers/gpu/drm/imagination/pvr_gem.h
index c99f30cc6208..59223876b3f7 100644
--- a/drivers/gpu/drm/imagination/pvr_gem.h
+++ b/drivers/gpu/drm/imagination/pvr_gem.h
@@ -10,7 +10,7 @@
 #include <uapi/drm/pvr_drm.h>
 
 #include <drm/drm_gem.h>
-#include <drm/drm_gem_shmem_helper.h>
+#include <drm/drm_gem_uma_helper.h>
 #include <drm/drm_mm.h>
 
 #include <linux/bitfield.h>
@@ -82,12 +82,12 @@ struct pvr_file;
  */
 struct pvr_gem_object {
 	/**
-	 * @base: The underlying &struct drm_gem_shmem_object.
+	 * @base: The underlying &struct drm_gem_uma_object.
 	 *
 	 * Do not access this member directly, instead call
 	 * shem_gem_from_pvr_gem().
 	 */
-	struct drm_gem_shmem_object base;
+	struct drm_gem_uma_object base;
 
 	/**
 	 * @flags: Options set at creation-time. Some of these options apply to
@@ -111,9 +111,9 @@ struct pvr_gem_object {
 static_assert(offsetof(struct pvr_gem_object, base) == 0,
 	      "offsetof(struct pvr_gem_object, base) not zero");
 
-#define shmem_gem_from_pvr_gem(pvr_obj) (&(pvr_obj)->base)
+#define uma_gem_from_pvr_gem(pvr_obj) (&(pvr_obj)->base)
 
-#define shmem_gem_to_pvr_gem(shmem_obj) container_of_const(shmem_obj, struct pvr_gem_object, base)
+#define uma_gem_to_pvr_gem(uma_obj) container_of_const(uma_obj, struct pvr_gem_object, base)
 
 #define gem_from_pvr_gem(pvr_obj) (&(pvr_obj)->base.base)
 
@@ -134,7 +134,7 @@ struct pvr_gem_object *pvr_gem_object_from_handle(struct pvr_file *pvr_file,
 static __always_inline struct sg_table *
 pvr_gem_object_get_pages_sgt(struct pvr_gem_object *pvr_obj)
 {
-	return drm_gem_shmem_get_pages_sgt(shmem_gem_from_pvr_gem(pvr_obj));
+	return drm_gem_uma_get_pages_sgt(uma_gem_from_pvr_gem(pvr_obj));
 }
 
 void *pvr_gem_object_vmap(struct pvr_gem_object *pvr_obj);
-- 
2.52.0


  parent reply	other threads:[~2025-12-09 14:02 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-09 13:41 [RFC][PATCH 00/13] drm: Introduce GEM-UMA memory management Thomas Zimmermann
2025-12-09 13:41 ` [PATCH 01/13] drm/gem-shmem: Fix typos in documentation Thomas Zimmermann
2025-12-11 10:00   ` Boris Brezillon
2025-12-11 12:03   ` Thomas Zimmermann
2025-12-09 13:41 ` [PATCH 02/13] drm/gem-shmem: Fix the MODULE_LICENSE() string Thomas Zimmermann
2025-12-11 10:01   ` Boris Brezillon
2025-12-11 12:04   ` Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 03/13] drm: Add GEM-UMA helpers for memory management Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 04/13] drm/gem-uma: Remove unused interfaces Thomas Zimmermann
2025-12-09 13:42 ` Thomas Zimmermann [this message]
2025-12-09 13:42 ` [PATCH 06/13] drm/lima: Use GEM-UMA helpers for memory management Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 07/13] drm/panfrost: " Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 08/13] drm/panthor: " Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 09/13] drm/v3d: " Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 10/13] drm/virtgpu: " Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 11/13] accel/amdxdna: " Thomas Zimmermann
2025-12-09 13:42 ` [PATCH 12/13] accel/ivpu: " Thomas Zimmermann
2025-12-09 14:24   ` Karol Wachowski
2025-12-09 14:25   ` Karol Wachowski
2025-12-09 13:42 ` [PATCH 13/13] accel/rocket: " Thomas Zimmermann
2025-12-09 14:27 ` [RFC][PATCH 00/13] drm: Introduce GEM-UMA " Boris Brezillon
2025-12-09 14:51   ` Thomas Zimmermann
2025-12-09 15:30     ` Boris Brezillon
2025-12-10  7:34       ` Thomas Zimmermann
2025-12-10  9:21         ` Boris Brezillon
2025-12-10  9:57           ` Thomas Zimmermann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251209140141.94407-6-tzimmermann@suse.de \
    --to=tzimmermann@suse.de \
    --cc=adrian.larumbe@collabora.com \
    --cc=airlied@gmail.com \
    --cc=boris.brezillon@collabora.com \
    --cc=corbet@lwn.net \
    --cc=dmitry.osipenko@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=frank.binns@imgtec.com \
    --cc=gurchetansingh@chromium.org \
    --cc=karol.wachowski@linux.intel.com \
    --cc=kraxel@redhat.com \
    --cc=lima@lists.freedesktop.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=liviu.dudau@arm.com \
    --cc=lizhi.hou@amd.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=maciej.falkowski@linux.intel.com \
    --cc=mamin506@gmail.com \
    --cc=matt.coster@imgtec.com \
    --cc=mripard@kernel.org \
    --cc=mwen@igalia.com \
    --cc=ogabbay@kernel.org \
    --cc=olvaffe@gmail.com \
    --cc=robh@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=steven.price@arm.com \
    --cc=tomeu@tomeuvizoso.net \
    --cc=virtualization@lists.linux.dev \
    --cc=yuq825@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).