Check and pass the readonly flags when set amdgpu_ttm_tt flags for readonly ptr pages. Otherwise, there is EPERM error returned during the KFDExceptionTest.PermissionFaultUserPointer test on ploaris10. Signed-off-by: Ma Jun <Jun.Ma2@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index d426333e865a..85d1087439c0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1036,10 +1036,17 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr, struct ttm_operation_ctx ctx = { true, false }; struct hmm_range *range; int ret = 0; + uint32_t tt_flags = 0; mutex_lock(&process_info->lock); - ret = amdgpu_ttm_tt_set_userptr(&bo->tbo, user_addr, 0); + if (!(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_WRITABLE)) + tt_flags |= AMDGPU_GEM_USERPTR_READONLY; + else + tt_flags = 0; + + + ret = amdgpu_ttm_tt_set_userptr(&bo->tbo, user_addr, tt_flags); if (ret) { pr_err("%s: Failed to set userptr: %d\n", __func__, ret); goto out; -- 2.34.1