If the memory is going to be accessed by the device, make sure we mark
the pages accordingly such that the kernel knows this. This aligns with
the xe-userptr code.

Signed-off-by: Matthew Auld <matthew.a...@intel.com>
Cc: Thomas Hellström <thomas.hellst...@linux.intel.com>
Cc: Matthew Brost <matthew.br...@intel.com>
---
 drivers/gpu/drm/drm_gpusvm.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
index 7f1cf5492bba..5b4ecd36dff1 100644
--- a/drivers/gpu/drm/drm_gpusvm.c
+++ b/drivers/gpu/drm/drm_gpusvm.c
@@ -1471,6 +1471,7 @@ int drm_gpusvm_range_get_pages(struct drm_gpusvm *gpusvm,
                        pages[i] = page;
                } else {
                        dma_addr_t addr;
+                       unsigned int k;
 
                        if (is_zone_device_page(page) || zdd) {
                                err = -EOPNOTSUPP;
@@ -1489,6 +1490,14 @@ int drm_gpusvm_range_get_pages(struct drm_gpusvm *gpusvm,
                        range->dma_addr[j] = drm_pagemap_device_addr_encode
                                (addr, DRM_INTERCONNECT_SYSTEM, order,
                                 dma_dir);
+
+                       for (k = 0; k < 1u << order; k++) {
+                               if (!ctx->read_only)
+                                       set_page_dirty_lock(page);
+
+                               mark_page_accessed(page);
+                               page++;
+                       }
                }
                i += 1 << order;
                num_dma_mapped = i;
-- 
2.48.1

Reply via email to