[PATCH v3 3/7] drm/amdgpu: Extend amdgpu_ttm_tt_get_userptr() to return flags

Tvrtko Ursulin <[email protected]> Thu, 6 Aug 2026 14:47:08 +0100
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
Extend amdgpu_ttm_tt_get_userptr() to also return userptr creation flags
so those can be queried from a subsequent patch.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Suggested-by: Christian König <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c  | 6 ++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h  | 2 +-
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 +++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 1dd15b556d68..deaae26fe982 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1311,10 +1311,11 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_device *bdev,
  * task
  *
  * @tbo: The ttm_buffer_object that contains the userptr
- * @user_addr:  The returned value
+ * @user_addr: Returned userptr address
+ * @user_flags: Returned userptr flags
  */
 int amdgpu_ttm_tt_get_userptr(const struct ttm_buffer_object *tbo,
-			      uint64_t *user_addr)
+			      uint64_t *user_addr, uint32_t *user_flags)
 {
 	struct amdgpu_ttm_tt *gtt;
 
@@ -1323,6 +1324,7 @@ int amdgpu_ttm_tt_get_userptr(const struct ttm_buffer_object *tbo,
 
 	gtt = (void *)tbo->ttm;
 	*user_addr = gtt->userptr;
+	*user_flags = gtt->userflags;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index a47a6eae6713..82f3b9fdfe83 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -247,7 +247,7 @@ static inline u64 amdgpu_gtt_node_to_byte_offset(const struct drm_mm_node *gtt_n
 
 void amdgpu_ttm_tt_set_user_pages(struct ttm_tt *ttm, struct amdgpu_hmm_range *range);
 int amdgpu_ttm_tt_get_userptr(const struct ttm_buffer_object *tbo,
-			      uint64_t *user_addr);
+			      uint64_t *user_addr, uint32_t *user_flags);
 int amdgpu_ttm_tt_set_userptr(struct ttm_buffer_object *bo,
 			      uint64_t addr, uint32_t flags);
 bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 309510e23315..a6ed8efb4927 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -2071,6 +2071,7 @@ static int criu_checkpoint_bos(struct kfd_process *p,
 			struct kfd_criu_bo_bucket *bo_bucket;
 			struct kfd_criu_bo_priv_data *bo_priv;
 			int i, dev_idx = 0;
+			u32 user_flags;
 
 			kgd_mem = (struct kgd_mem *)mem;
 			dumper_bo = kgd_mem->bo;
@@ -2093,7 +2094,8 @@ static int criu_checkpoint_bos(struct kfd_process *p,
 
 			if (bo_bucket->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
 				ret = amdgpu_ttm_tt_get_userptr(&dumper_bo->tbo,
-								&bo_priv->user_addr);
+								&bo_priv->user_addr,
+								&user_flags);
 				if (ret) {
 					pr_err("Failed to obtain user address for user-pointer bo\n");
 					goto exit;
-- 
2.54.0