On 2026. május 29., péntek 13:24:09 közép-európai nyári idő Christian König 
wrote:
> That case is handled by amdgpu_vm_update_leaves now.
> 
> Signed-off-by: Christian König <[email protected]>

This commit seems to be doing more than suggested by the (very short) commit 
message. It removes immediate updates not only from amdgpu_vm_update_range() 
but also amdgpu_vm_pt_clear() and amdgpu_vm_pt_create().

Otherwise the code looks good.

Reviewed-by: Timur Kristóf <[email protected]>


> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c    | 21 +++++++++------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h    | 16 +++++++---------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 19 ++++++-------------
>  drivers/gpu/drm/amd/amdkfd/kfd_svm.c      |  4 ++--
>  4 files changed, 24 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 94632a660b79..edc8b1ca2d3e
> 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1084,7 +1084,6 @@ amdgpu_vm_tlb_flush(struct amdgpu_vm_update_params
> *params, *
>   * @adev: amdgpu_device pointer to use for commands
>   * @vm: the VM to update the range
> - * @immediate: immediate submission in a page fault
>   * @unlocked: unlocked invalidation during MM callback
>   * @flush_tlb: trigger tlb invalidation after update completed
>   * @allow_override: change MTYPE for local NUMA nodes
> @@ -1104,12 +1103,11 @@ amdgpu_vm_tlb_flush(struct amdgpu_vm_update_params
> *params, * 0 for success, negative erro code for failure.
>   */
>  int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm
> *vm, -                           bool immediate, bool unlocked, bool 
flush_tlb,
> -                        bool allow_override, struct amdgpu_sync 
*sync,
> -                        uint64_t start, uint64_t last, uint64_t 
flags,
> -                        uint64_t offset, uint64_t vram_base,
> -                        struct ttm_resource *res, dma_addr_t 
*pages_addr,
> -                        struct dma_fence **fence)
> +                        bool unlocked, bool flush_tlb, bool 
allow_override,
> +                        struct amdgpu_sync *sync, uint64_t start,
> +                        uint64_t last, uint64_t flags, uint64_t 
offset,
> +                        uint64_t vram_base, struct ttm_resource 
*res,
> +                        dma_addr_t *pages_addr, struct dma_fence 
**fence)
>  {
>       struct amdgpu_vm_tlb_seq_struct *tlb_cb;
>       struct amdgpu_vm_update_params params;
> @@ -1139,7 +1137,6 @@ int amdgpu_vm_update_range(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, memset(&params, 0, sizeof(params));
>       params.adev = adev;
>       params.vm = vm;
> -     params.immediate = immediate;
>       params.pages_addr = pages_addr;
>       params.unlocked = unlocked;
>       params.needs_flush = flush_tlb;
> @@ -1365,7 +1362,7 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
> struct amdgpu_bo_va *bo_va,
> 
>               trace_amdgpu_vm_bo_update(mapping);
> 
> -             r = amdgpu_vm_update_range(adev, vm, false, false, 
flush_tlb,
> +             r = amdgpu_vm_update_range(adev, vm, false, flush_tlb,
>                                          !uncached, &sync, 
mapping->start,
>                                          mapping->last, 
update_flags,
>                                          mapping->offset, 
vram_base, mem,
> @@ -1568,7 +1565,7 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
>                       struct amdgpu_bo_va_mapping, list);
>               list_del(&mapping->list);
> 
> -             r = amdgpu_vm_update_range(adev, vm, false, false, 
true, false,
> +             r = amdgpu_vm_update_range(adev, vm, false, true, false,
>                                          &sync, mapping-
>start, mapping->last,
>                                          0, 0, 0, NULL, 
NULL, &f);
>               amdgpu_vm_free_mapping(adev, vm, mapping, f);
> @@ -2617,7 +2614,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct
> amdgpu_vm *vm, vm->tlb_fence_context = dma_fence_context_alloc(1);
> 
>       r = amdgpu_vm_pt_create(adev, vm, adev->vm_manager.root_level,
> -                             false, &root, xcp_id);
> +                             &root, xcp_id);
>       if (r)
>               goto error_free_delayed;
> 
> @@ -2633,7 +2630,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct
> amdgpu_vm *vm, if (r)
>               goto error_free_root;
> 
> -     r = amdgpu_vm_pt_clear(adev, vm, root, false);
> +     r = amdgpu_vm_pt_clear(adev, vm, root);
>       if (r)
>               goto error_free_root;
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index 04b32accfa3f..3e86a2a470f0
> 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -530,12 +530,11 @@ int amdgpu_vm_flush_compute_tlb(struct amdgpu_device
> *adev, void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base,
>                           struct amdgpu_vm *vm, struct amdgpu_bo 
*bo);
>  int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm
> *vm, -                           bool immediate, bool unlocked, bool 
flush_tlb,
> -                        bool allow_override, struct amdgpu_sync 
*sync,
> -                        uint64_t start, uint64_t last, uint64_t 
flags,
> -                        uint64_t offset, uint64_t vram_base,
> -                        struct ttm_resource *res, dma_addr_t 
*pages_addr,
> -                        struct dma_fence **fence);
> +                        bool unlocked, bool flush_tlb, bool 
allow_override,
> +                        struct amdgpu_sync *sync, uint64_t start,
> +                        uint64_t last, uint64_t flags, uint64_t 
offset,
> +                        uint64_t vram_base, struct ttm_resource 
*res,
> +                        dma_addr_t *pages_addr, struct dma_fence 
**fence);
>  int amdgpu_vm_bo_update(struct amdgpu_device *adev,
>                       struct amdgpu_bo_va *bo_va,
>                       bool clear);
> @@ -602,10 +601,9 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm,
>                         struct amdgpu_mem_stats 
stats[__AMDGPU_PL_NUM]);
> 
>  int amdgpu_vm_pt_clear(struct amdgpu_device *adev, struct amdgpu_vm *vm,
> -                    struct amdgpu_bo_vm *vmbo, bool immediate);
> +                    struct amdgpu_bo_vm *vmbo);
>  int amdgpu_vm_pt_create(struct amdgpu_device *adev, struct amdgpu_vm *vm,
> -                     int level, bool immediate, struct 
amdgpu_bo_vm **vmbo,
> -                     int32_t xcp_id);
> +                     int level, struct amdgpu_bo_vm **vmbo, 
int32_t xcp_id);
>  void amdgpu_vm_pt_free_root(struct amdgpu_device *adev, struct amdgpu_vm
> *vm);
> 
>  int amdgpu_vm_pde_update(struct amdgpu_vm_update_params *params,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c index
> 9766b6b9aecc..6f5415d5a1bc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> @@ -351,7 +351,6 @@ static void amdgpu_vm_pt_next_dfs(struct amdgpu_device
> *adev, * @adev: amdgpu_device pointer
>   * @vm: VM to clear BO from
>   * @vmbo: BO to clear
> - * @immediate: use an immediate update
>   *
>   * Root PD needs to be reserved when calling this.
>   *
> @@ -359,7 +358,7 @@ static void amdgpu_vm_pt_next_dfs(struct amdgpu_device
> *adev, * 0 on success, errno otherwise.
>   */
>  int amdgpu_vm_pt_clear(struct amdgpu_device *adev, struct amdgpu_vm *vm,
> -                    struct amdgpu_bo_vm *vmbo, bool immediate)
> +                    struct amdgpu_bo_vm *vmbo)
>  {
>       unsigned int level = adev->vm_manager.root_level;
>       struct ttm_operation_ctx ctx = { true, false };
> @@ -396,7 +395,6 @@ int amdgpu_vm_pt_clear(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, memset(&params, 0, sizeof(params));
>       params.adev = adev;
>       params.vm = vm;
> -     params.immediate = immediate;
> 
>       r = vm->update_funcs->prepare(&params, NULL,
>                                     
AMDGPU_KERNEL_JOB_ID_VM_PT_CLEAR);
> @@ -434,13 +432,11 @@ int amdgpu_vm_pt_clear(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, * @adev: amdgpu_device pointer
>   * @vm: requesting vm
>   * @level: the page table level
> - * @immediate: use a immediate update
>   * @vmbo: pointer to the buffer object pointer
>   * @xcp_id: GPU partition id
>   */
>  int amdgpu_vm_pt_create(struct amdgpu_device *adev, struct amdgpu_vm *vm,
> -                     int level, bool immediate, struct 
amdgpu_bo_vm **vmbo,
> -                     int32_t xcp_id)
> +                     int level, struct amdgpu_bo_vm **vmbo, 
int32_t xcp_id)
>  {
>       struct amdgpu_bo_param bp;
>       unsigned int num_entries;
> @@ -470,7 +466,6 @@ int amdgpu_vm_pt_create(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, bp.flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> 
>       bp.type = ttm_bo_type_kernel;
> -     bp.no_wait_gpu = immediate;
>       bp.xcp_id_plus1 = xcp_id + 1;
> 
>       if (vm->root.bo)
> @@ -485,7 +480,6 @@ int amdgpu_vm_pt_create(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, * @adev: amdgpu_device pointer
>   * @vm: VM to allocate page tables for
>   * @cursor: Which page table to allocate
> - * @immediate: use an immediate update
>   *
>   * Make sure a specific page table or directory is allocated.
>   *
> @@ -495,8 +489,7 @@ int amdgpu_vm_pt_create(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, */
>  static int amdgpu_vm_pt_alloc(struct amdgpu_device *adev,
>                             struct amdgpu_vm *vm,
> -                           struct amdgpu_vm_pt_cursor *cursor,
> -                           bool immediate)
> +                           struct amdgpu_vm_pt_cursor *cursor)
>  {
>       struct amdgpu_vm_bo_base *entry = cursor->entry;
>       struct amdgpu_bo *pt_bo;
> @@ -507,7 +500,7 @@ static int amdgpu_vm_pt_alloc(struct amdgpu_device
> *adev, return 0;
> 
>       amdgpu_vm_eviction_unlock(vm);
> -     r = amdgpu_vm_pt_create(adev, vm, cursor->level, immediate, &pt,
> +     r = amdgpu_vm_pt_create(adev, vm, cursor->level, &pt,
>                               vm->root.bo->xcp_id);
>       amdgpu_vm_eviction_lock(vm);
>       if (r)
> @@ -519,7 +512,7 @@ static int amdgpu_vm_pt_alloc(struct amdgpu_device
> *adev, pt_bo = &pt->bo;
>       pt_bo->parent = amdgpu_bo_ref(cursor->parent->bo);
>       amdgpu_vm_bo_base_init(entry, vm, pt_bo);
> -     r = amdgpu_vm_pt_clear(adev, vm, pt, immediate);
> +     r = amdgpu_vm_pt_clear(adev, vm, pt);
>       if (r)
>               goto error_free_pt;
> 
> @@ -813,7 +806,7 @@ int amdgpu_vm_ptes_update(struct amdgpu_vm_update_params
> *params, * address range are actually allocated
>                        */
>                       r = amdgpu_vm_pt_alloc(params->adev, params-
>vm,
> -                                            &cursor, 
params->immediate);
> +                                            &cursor);
>                       if (r)
>                               return r;
>               }
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c index 72cfb4a6ab3e..37b5166e9a14
> 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -1372,7 +1372,7 @@ svm_range_unmap_from_gpu(struct amdgpu_device *adev,
> struct amdgpu_vm *vm, return -EINVAL;
>       }
> 
> -     return amdgpu_vm_update_range(adev, vm, false, true, true, false, 
NULL,
> gpu_start, +  return amdgpu_vm_update_range(adev, vm, true, true, 
false,
> NULL, gpu_start, gpu_end, init_pte_value, 0, 0, NULL, NULL,
>                                     fence);
>  }
> @@ -1489,7 +1489,7 @@ svm_range_map_to_gpu(struct kfd_process_device *pdd,
> struct svm_range *prange, (last_domain == SVM_RANGE_VRAM_DOMAIN) ? 1 : 0,
>                        pte_flags);
> 
> -             r = amdgpu_vm_update_range(adev, vm, false, false, 
flush_tlb, true,
> +             r = amdgpu_vm_update_range(adev, vm, false, flush_tlb, 
true,
>                                          NULL, gpu_start, 
gpu_end,
>                                          pte_flags,
>                                          (last_start - 
prange->start) << PAGE_SHIFT,




Reply via email to