From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/drivers/gpu/drm/qxl/qxl_ioctl.c | 27 ++++++++++++++------------- 1 files changed, 14 insertions(+), 13 deletions(-) diff --git a/kernel/drivers/gpu/drm/qxl/qxl_ioctl.c b/kernel/drivers/gpu/drm/qxl/qxl_ioctl.c index 7850230..5cea6ee 100644 --- a/kernel/drivers/gpu/drm/qxl/qxl_ioctl.c +++ b/kernel/drivers/gpu/drm/qxl/qxl_ioctl.c @@ -89,11 +89,11 @@ { void *reloc_page; - reloc_page = qxl_bo_kmap_local_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); + reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); *(uint64_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = qxl_bo_physical_address(qdev, info->src_bo, info->src_offset); - qxl_bo_kunmap_local_page(qdev, info->dst_bo, reloc_page); + qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page); } static void @@ -105,9 +105,9 @@ if (info->src_bo && !info->src_bo->is_primary) id = info->src_bo->surface_id; - reloc_page = qxl_bo_kmap_local_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); + reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); *(uint32_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = id; - qxl_bo_kunmap_local_page(qdev, info->dst_bo, reloc_page); + qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page); } /* return holding the reference to this object */ @@ -149,6 +149,7 @@ struct qxl_bo *cmd_bo; void *fb_cmd; int i, ret, num_relocs; + int unwritten; switch (cmd->type) { case QXL_CMD_DRAW: @@ -184,21 +185,21 @@ goto out_free_reloc; /* TODO copy slow path code from i915 */ - fb_cmd = qxl_bo_kmap_local_page(qdev, cmd_bo, (release->release_offset & PAGE_MASK)); + fb_cmd = qxl_bo_kmap_atomic_page(qdev, cmd_bo, (release->release_offset & PAGE_MASK)); + unwritten = __copy_from_user_inatomic_nocache + (fb_cmd + sizeof(union qxl_release_info) + (release->release_offset & ~PAGE_MASK), + u64_to_user_ptr(cmd->command), cmd->command_size); - if (copy_from_user(fb_cmd + sizeof(union qxl_release_info) + - (release->release_offset & ~PAGE_MASK), - u64_to_user_ptr(cmd->command), cmd->command_size)) { - ret = -EFAULT; - } else { + { struct qxl_drawable *draw = fb_cmd; draw->mm_time = qdev->rom->mm_clock; } - qxl_bo_kunmap_local_page(qdev, cmd_bo, fb_cmd); - if (ret) { - DRM_ERROR("copy from user failed %d\n", ret); + qxl_bo_kunmap_atomic_page(qdev, cmd_bo, fb_cmd); + if (unwritten) { + DRM_ERROR("got unwritten %d\n", unwritten); + ret = -EFAULT; goto out_free_release; } -- Gitblit v1.6.2