[PATCH 4/6] drm/amdgpu: add limitation for dedicated vm number v2

Zhang, Jerry (Junwei) Jerry.Zhang at amd.com
Wed Apr 26 07:10:08 UTC 2017


On 04/24/2017 01:57 PM, Chunming Zhou wrote:
> v2: move #define to amdgpu_vm.h
>
> Change-Id: Ie5958cf6dbdc1c8278e61d9158483472d6f5c6e3
> Signed-off-by: Chunming Zhou <David1.Zhou at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h        | 1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c     | 9 +++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h     | 2 ++
>   4 files changed, 13 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 0831cd2..ba9d3d0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1591,6 +1591,7 @@ struct amdgpu_device {
>   	struct amdgpu_dummy_page	dummy_page;
>   	struct amdgpu_vm_manager	vm_manager;
>   	struct amdgpu_vmhub             vmhub[AMDGPU_MAX_VMHUBS];
> +	atomic_t			reserved_vmid;

Perhaps it's more reasonable to belongs to vm_manager.

Jerry

>
>   	/* memory management */
>   	struct amdgpu_mman		mman;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index a175dfd..9993085 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1889,6 +1889,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
>   	adev->vm_manager.vm_pte_num_rings = 0;
>   	adev->gart.gart_funcs = NULL;
>   	adev->fence_context = kcl_fence_context_alloc(AMDGPU_MAX_RINGS);
> +	atomic_set(&adev->reserved_vmid, 0);
>
>   	adev->smc_rreg = &amdgpu_invalid_rreg;
>   	adev->smc_wreg = &amdgpu_invalid_wreg;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 5f4dcc9..f7113b9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -565,6 +565,10 @@ static int amdgpu_vm_alloc_dedicated_vmid(struct amdgpu_device *adev,
>   	unsigned vmhub;
>   	int r;
>
> +	if (atomic_read(&adev->reserved_vmid) >= AMDGPU_VM_MAX_RESERVED_VMID) {
> +		DRM_ERROR("Over limitation of reserved vmid\n");
> +		return -EINVAL;
> +	}
>   	for (vmhub = 0; vmhub < AMDGPU_MAX_VMHUBS; vmhub++) {
>   		id_mgr = &adev->vm_manager.id_mgr[vmhub];
>
> @@ -580,6 +584,7 @@ static int amdgpu_vm_alloc_dedicated_vmid(struct amdgpu_device *adev,
>   		if (r)
>   			goto err;
>   	}
> +	atomic_inc(&adev->reserved_vmid);
>
>   	return 0;
>   err:
> @@ -2302,6 +2307,7 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   {
>   	struct amdgpu_bo_va_mapping *mapping, *tmp;
>   	bool prt_fini_needed = !!adev->gart.gart_funcs->set_prt;
> +	bool dedicated = false;
>   	int i;
>
>   	if (vm->is_kfd_vm) {
> @@ -2354,9 +2360,12 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   			list_add(&vm->dedicated_vmid[i]->list,
>   				 &id_mgr->ids_lru);
>   			vm->dedicated_vmid[i] = NULL;
> +			dedicated = true;
>   		}
>   		mutex_unlock(&id_mgr->lock);
>   	}
> +	if (dedicated)
> +		atomic_dec(&adev->reserved_vmid);
>   }
>
>   /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 23981ee..2d3e6ed 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -83,6 +83,8 @@
>
>   /* hardcode that limit for now */
>   #define AMDGPU_VA_RESERVED_SIZE			(8 << 20)
> +/* max vmids dedicated for process */
> +#define AMDGPU_VM_MAX_RESERVED_VMID 2
>
>   struct amdgpu_vm_pt {
>   	struct amdgpu_bo	*bo;
>


More information about the amd-gfx mailing list