diff options
| author | Andrey Grodzovsky <andrey.grodzovsky@amd.com> | 2021-05-12 10:26:41 -0400 | 
|---|---|---|
| committer | Andrey Grodzovsky <andrey.grodzovsky@amd.com> | 2021-05-19 23:50:28 -0400 | 
| commit | f89f8c6bafd0692d3afd21488d012ceb1baf6df6 (patch) | |
| tree | a6f34cf205887bef775c4aad48536e0760181a17 /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |
| parent | 35bba8313b95a5cd074fc910a9c2670b4a1b105d (diff) | |
drm/amdgpu: Guard against write accesses after device removal
This should prevent writing to memory or IO ranges possibly
already allocated for other uses after our device is removed.
v5:
Protect more places wher memcopy_to/form_io takes place
Protect IB submissions
v6: Switch to !drm_dev_enter instead of scoping entire code
with brackets.
v7:
Drop guard of HW ring commands emission protection since they
are in GART and not in MMIO.
Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210512142648.666476-10-andrey.grodzovsky@amd.com
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 4a3e3f72e127..90c34491f85d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -32,6 +32,7 @@  #include <linux/dma-buf.h>  #include <drm/amdgpu_drm.h> +#include <drm/drm_drv.h>  #include "amdgpu.h"  #include "amdgpu_trace.h"  #include "amdgpu_amdkfd.h" @@ -1606,7 +1607,10 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,  	struct amdgpu_vm_update_params params;  	enum amdgpu_sync_mode sync_mode;  	uint64_t pfn; -	int r; +	int r, idx; + +	if (!drm_dev_enter(&adev->ddev, &idx)) +		return -ENODEV;  	memset(¶ms, 0, sizeof(params));  	params.adev = adev; @@ -1715,6 +1719,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,  error_unlock:  	amdgpu_vm_eviction_unlock(vm); +	drm_dev_exit(idx);  	return r;  } | 
