[PATCH] drm/amdgpu: Forbid kfd using cpu to update pt if vm is shared with gfx

Felix Kuehling felix.kuehling at amd.com
Wed Jun 21 15:16:16 UTC 2023


Can we change the flags if needed. E.g. see what 
amdgpu_bo_pin_restricted does:

         if (!(bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS))
                 bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
         amdgpu_bo_placement_from_domain(bo, domain);

This shouldn't really change anything about the BO placement because we 
only enable CPU page table updates on large-BAR GPUs by default. 
Alternatively, we could create VM BOs with 
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED on large-BAR GPUs to make it 
possible to switch to CPU page table updates for compute VMs.

Regards,
   Felix


Am 2023-06-21 um 05:46 schrieb YuBiao Wang:
> If a same GPU VM is shared by kfd and graphic operations, we must align
> the vm update mode to sdma, or cpu kmap will fail and cause null pointer
> issue.
>
> Signed-off-by: YuBiao Wang <YuBiao.Wang at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 291977b93b1d..e105ff9e8041 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -2239,6 +2239,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   {
>   	bool pte_support_ats = (adev->asic_type == CHIP_RAVEN);
> +	struct amdgpu_bo *bo = vm->root.bo;
>   	int r;
>   
>   	r = amdgpu_bo_reserve(vm->root.bo, true);
> @@ -2265,6 +2266,10 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   	/* Update VM state */
>   	vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
>   				    AMDGPU_VM_USE_CPU_FOR_COMPUTE);
> +
> +	if (bo && !(bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED))
> +		vm->use_cpu_for_update = false;
> +
>   	DRM_DEBUG_DRIVER("VM update mode is %s\n",
>   			 vm->use_cpu_for_update ? "CPU" : "SDMA");
>   	WARN_ONCE((vm->use_cpu_for_update &&


More information about the amd-gfx mailing list