+++ /dev/null
-From 73b922f15552bb5b47cbcca4b4d2b131b89b786d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 26 Nov 2024 09:46:09 -0800
-Subject: drm/ttm: Add ttm_bo_access
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Matthew Brost <matthew.brost@intel.com>
-
-[ Upstream commit 7d08df5d0bd3d12d14dcec773fcddbe3eed3a8e8 ]
-
-Non-contiguous VRAM cannot easily be mapped in TTM nor can non-visible
-VRAM easily be accessed. Add ttm_bo_access, which is similar to
-ttm_bo_vm_access, to access such memory.
-
-v4:
- - Fix checkpatch warnings (CI)
-v5:
- - Fix checkpatch warnings (CI)
-v6:
- - Fix kernel doc (Auld)
-v7:
- - Move ttm_bo_access to ttm_bo_vm.c (Christian)
-
-Cc: Christian König <christian.koenig@amd.com>
-Reported-by: Christoph Manszewski <christoph.manszewski@intel.com>
-Suggested-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
-Signed-off-by: Matthew Brost <matthew.brost@intel.com>
-Tested-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
-Reviewed-by: Matthew Auld <matthew.auld@intel.com>
-Reviewed-by: Christian König <christian.koenig@amd.com>
-Link: https://patchwork.freedesktop.org/patch/msgid/20241126174615.2665852-3-matthew.brost@intel.com
-Stable-dep-of: 5f7bec831f1f ("drm/xe: Use ttm_bo_access in xe_vm_snapshot_capture_delayed")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/ttm/ttm_bo_vm.c | 40 ++++++++++++++++++++++++++-------
- include/drm/ttm/ttm_bo.h | 2 ++
- 2 files changed, 34 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
-index 4212b8c91dd42..17667ab31ad4c 100644
---- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
-+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
-@@ -405,13 +405,25 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
- return len;
- }
-
--int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
-- void *buf, int len, int write)
-+/**
-+ * ttm_bo_access - Helper to access a buffer object
-+ *
-+ * @bo: ttm buffer object
-+ * @offset: access offset into buffer object
-+ * @buf: pointer to caller memory to read into or write from
-+ * @len: length of access
-+ * @write: write access
-+ *
-+ * Utility function to access a buffer object. Useful when buffer object cannot
-+ * be easily mapped (non-contiguous, non-visible, etc...). Should not directly
-+ * be exported to user space via a peak / poke interface.
-+ *
-+ * Returns:
-+ * @len if successful, negative error code on failure.
-+ */
-+int ttm_bo_access(struct ttm_buffer_object *bo, unsigned long offset,
-+ void *buf, int len, int write)
- {
-- struct ttm_buffer_object *bo = vma->vm_private_data;
-- unsigned long offset = (addr) - vma->vm_start +
-- ((vma->vm_pgoff - drm_vma_node_start(&bo->base.vma_node))
-- << PAGE_SHIFT);
- int ret;
-
- if (len < 1 || (offset + len) > bo->base.size)
-@@ -429,8 +441,8 @@ int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
- break;
- default:
- if (bo->bdev->funcs->access_memory)
-- ret = bo->bdev->funcs->access_memory(
-- bo, offset, buf, len, write);
-+ ret = bo->bdev->funcs->access_memory
-+ (bo, offset, buf, len, write);
- else
- ret = -EIO;
- }
-@@ -439,6 +451,18 @@ int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
-
- return ret;
- }
-+EXPORT_SYMBOL(ttm_bo_access);
-+
-+int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
-+ void *buf, int len, int write)
-+{
-+ struct ttm_buffer_object *bo = vma->vm_private_data;
-+ unsigned long offset = (addr) - vma->vm_start +
-+ ((vma->vm_pgoff - drm_vma_node_start(&bo->base.vma_node))
-+ << PAGE_SHIFT);
-+
-+ return ttm_bo_access(bo, offset, buf, len, write);
-+}
- EXPORT_SYMBOL(ttm_bo_vm_access);
-
- static const struct vm_operations_struct ttm_bo_vm_ops = {
-diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
-index 7b56d1ca36d75..e383dee82001e 100644
---- a/include/drm/ttm/ttm_bo.h
-+++ b/include/drm/ttm/ttm_bo.h
-@@ -421,6 +421,8 @@ void ttm_bo_unpin(struct ttm_buffer_object *bo);
- int ttm_bo_evict_first(struct ttm_device *bdev,
- struct ttm_resource_manager *man,
- struct ttm_operation_ctx *ctx);
-+int ttm_bo_access(struct ttm_buffer_object *bo, unsigned long offset,
-+ void *buf, int len, int write);
- vm_fault_t ttm_bo_vm_reserve(struct ttm_buffer_object *bo,
- struct vm_fault *vmf);
- vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
---
-2.39.5
-