[PATCH v5 07/27] drm/amdgpu: Remap all page faults to per process dummy page.
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Apr 29 07:09:13 UTC 2021
Am 28.04.21 um 17:11 schrieb Andrey Grodzovsky:
> On device removal reroute all CPU mappings to dummy page
> per drm_file instance or imported GEM object.
>
> v4:
> Update for modified ttm_bo_vm_dummy_page
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 21 ++++++++++++++++-----
> 1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index a785acc09f20..93163b220e46 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -49,6 +49,7 @@
>
> #include <drm/drm_debugfs.h>
> #include <drm/amdgpu_drm.h>
> +#include <drm/drm_drv.h>
>
> #include "amdgpu.h"
> #include "amdgpu_object.h"
> @@ -1982,18 +1983,28 @@ void amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
> static vm_fault_t amdgpu_ttm_fault(struct vm_fault *vmf)
> {
> struct ttm_buffer_object *bo = vmf->vma->vm_private_data;
> + struct drm_device *ddev = bo->base.dev;
> vm_fault_t ret;
> + int idx;
>
> ret = ttm_bo_vm_reserve(bo, vmf);
> if (ret)
> return ret;
>
> - ret = amdgpu_bo_fault_reserve_notify(bo);
> - if (ret)
> - goto unlock;
> + if (drm_dev_enter(ddev, &idx)) {
> + ret = amdgpu_bo_fault_reserve_notify(bo);
> + if (ret) {
> + drm_dev_exit(idx);
> + goto unlock;
> + }
>
> - ret = ttm_bo_vm_fault_reserved(vmf, vmf->vma->vm_page_prot,
> - TTM_BO_VM_NUM_PREFAULT, 1);
> + ret = ttm_bo_vm_fault_reserved(vmf, vmf->vma->vm_page_prot,
> + TTM_BO_VM_NUM_PREFAULT, 1);
> +
> + drm_dev_exit(idx);
> + } else {
> + ret = ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
> + }
> if (ret == VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWAIT))
> return ret;
>
More information about the amd-gfx
mailing list