[PATCH 5/9] drm/qxl: avoid accessing iosys_map internals.

Lucas De Marchi lucas.demarchi at intel.com
Thu May 22 13:39:26 UTC 2025


On Thu, May 22, 2025 at 04:52:14PM +1000, Dave Airlie wrote:
>From: Dave Airlie <airlied at redhat.com>
>
>This uses the new accessors to avoid touching the iosys_map internals.
>
>Signed-off-by: Dave Airlie <airlied at redhat.com>
>---
> drivers/gpu/drm/qxl/qxl_display.c | 14 +++++++-------
> drivers/gpu/drm/qxl/qxl_draw.c    |  4 ++--
> drivers/gpu/drm/qxl/qxl_object.c  |  8 ++++----
> 3 files changed, 13 insertions(+), 13 deletions(-)
>
>diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
>index 70aff64ced87..e833b0bbff47 100644
>--- a/drivers/gpu/drm/qxl/qxl_display.c
>+++ b/drivers/gpu/drm/qxl/qxl_display.c
>@@ -602,16 +602,16 @@ static struct qxl_bo *qxl_create_cursor(struct qxl_device *qdev,
> 	cursor.chunk.next_chunk = 0;
> 	cursor.chunk.prev_chunk = 0;
> 	cursor.chunk.data_size = size;
>-	if (cursor_map.is_iomem) {
>-		memcpy_toio(cursor_map.vaddr_iomem,
>+	if (iosys_map_is_iomem(&cursor_map)) {
>+		memcpy_toio(iosys_map_ioptr(&cursor_map),
> 			    &cursor, sizeof(cursor));
>-		memcpy_toio(cursor_map.vaddr_iomem + sizeof(cursor),
>-			    user_map.vaddr, size);
>+		memcpy_toio(iosys_map_ioptr(&cursor_map) + sizeof(cursor),
>+			    iosys_map_ptr(&user_map), size);
> 	} else {
>-		memcpy(cursor_map.vaddr,
>+		memcpy(iosys_map_ptr(&cursor_map),
> 		       &cursor, sizeof(cursor));
>-		memcpy(cursor_map.vaddr + sizeof(cursor),
>-		       user_map.vaddr, size);
>+		memcpy(iosys_map_ptr(&cursor_map) + sizeof(cursor),
>+		       iosys_map_ptr(&user_map), size);

these would better use iosys_map_memcpy_*, but could be a follow up to
this (automated?)  conversion.

> 	}
>
> 	qxl_bo_vunmap_and_unpin(user_bo);
>diff --git a/drivers/gpu/drm/qxl/qxl_draw.c b/drivers/gpu/drm/qxl/qxl_draw.c
>index 3a3e127ce297..6000936bc8d0 100644
>--- a/drivers/gpu/drm/qxl/qxl_draw.c
>+++ b/drivers/gpu/drm/qxl/qxl_draw.c
>@@ -52,7 +52,7 @@ static struct qxl_rect *drawable_set_clipping(struct qxl_device *qdev,
> 	ret = qxl_bo_vmap_locked(clips_bo, &map);
> 	if (ret)
> 		return NULL;
>-	dev_clips = map.vaddr; /* TODO: Use mapping abstraction properly */
>+	dev_clips = iosys_map_ptr(&map); /* TODO: Use mapping abstraction properly */
>
> 	dev_clips->num_rects = num_clips;
> 	dev_clips->chunk.next_chunk = 0;
>@@ -206,7 +206,7 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
> 	ret = qxl_bo_vmap_locked(bo, &surface_map);
> 	if (ret)
> 		goto out_release_backoff;
>-	surface_base = surface_map.vaddr; /* TODO: Use mapping abstraction properly */
>+	surface_base = iosys_map_ptr(&surface_map); /* TODO: Use mapping abstraction properly */
>
> 	ret = qxl_image_init(qdev, release, dimage, surface_base,
> 			     left - dumb_shadow_offset,
>diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
>index 66635c55cf85..dcc1f6393885 100644
>--- a/drivers/gpu/drm/qxl/qxl_object.c
>+++ b/drivers/gpu/drm/qxl/qxl_object.c
>@@ -172,10 +172,10 @@ int qxl_bo_vmap_locked(struct qxl_bo *bo, struct iosys_map *map)
> 	bo->map_count = 1;
>
> 	/* TODO: Remove kptr in favor of map everywhere. */
>-	if (bo->map.is_iomem)
>-		bo->kptr = (void *)bo->map.vaddr_iomem;
>+	if (iosys_map_is_iomem(&bo->map))
>+		bo->kptr = (void *)iosys_map_ioptr(&bo->map);

this looks wrong as we then lose the __iomem. Or is this dead code and
it's never iomem?  Anyway, pre-existent issue unrelated to this patch.

Lucas De Marchi

> 	else
>-		bo->kptr = bo->map.vaddr;
>+		bo->kptr = iosys_map_ptr(&bo->map);
>
> out:
> 	*map = bo->map;
>@@ -230,7 +230,7 @@ void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev,
> 	ret = qxl_bo_vmap_locked(bo, &bo_map);
> 	if (ret)
> 		return NULL;
>-	rptr = bo_map.vaddr; /* TODO: Use mapping abstraction properly */
>+	rptr = iosys_map_ptr(&bo_map); /* TODO: Use mapping abstraction properly */
>
> 	rptr += page_offset * PAGE_SIZE;
> 	return rptr;
>-- 
>2.49.0
>


More information about the dri-devel mailing list