diff options
author | Jammy Zhou <Jammy.Zhou@amd.com> | 2015-05-13 01:14:11 +0800 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-05 13:47:49 -0400 |
commit | 241cf6d1051718a481c61b469171a34c0ca718a4 (patch) | |
tree | c48cadc94b9b0286e859ba38068a408abc689fe3 /amdgpu/amdgpu_bo.c | |
parent | db126d1d8a764b9d3ad322779b13904867b14e5c (diff) | |
download | external_libdrm-241cf6d1051718a481c61b469171a34c0ca718a4.tar.gz external_libdrm-241cf6d1051718a481c61b469171a34c0ca718a4.tar.bz2 external_libdrm-241cf6d1051718a481c61b469171a34c0ca718a4.zip |
amdgpu: validate the upper limit of virtual address v2
Only 8GB virtual address space is used by default now
v2: use -ENOSPC for the error case
Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com>
Diffstat (limited to 'amdgpu/amdgpu_bo.c')
-rw-r--r-- | amdgpu/amdgpu_bo.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c index 587c1d08..d78bb9a8 100644 --- a/amdgpu/amdgpu_bo.c +++ b/amdgpu/amdgpu_bo.c @@ -121,7 +121,14 @@ int amdgpu_bo_alloc(amdgpu_device_handle dev, memset(&va, 0, sizeof(va)); - bo->virtual_mc_base_address = amdgpu_vamgr_find_va(&dev->vamgr, alloc_buffer->alloc_size, alloc_buffer->phys_alignment); + bo->virtual_mc_base_address = amdgpu_vamgr_find_va(&dev->vamgr, + alloc_buffer->alloc_size, + alloc_buffer->phys_alignment); + + if (bo->virtual_mc_base_address == AMDGPU_INVALID_VA_ADDRESS) { + amdgpu_bo_free_internal(bo); + return -ENOSPC; + } va.in.handle = bo->handle; va.in.operation = AMDGPU_VA_OP_MAP; @@ -440,6 +447,12 @@ int amdgpu_bo_import(amdgpu_device_handle dev, bo->virtual_mc_base_address = amdgpu_vamgr_find_va(&dev->vamgr, bo->alloc_size, 1 << 20); + if (bo->virtual_mc_base_address == AMDGPU_INVALID_VA_ADDRESS) { + pthread_mutex_unlock(&dev->bo_table_mutex); + amdgpu_bo_reference(&bo, NULL); + return -ENOSPC; + } + memset(&va, 0, sizeof(va)); va.in.handle = bo->handle; va.in.operation = AMDGPU_VA_OP_MAP; @@ -615,6 +628,11 @@ int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, bo->handle = args.handle; bo->virtual_mc_base_address = amdgpu_vamgr_find_va(&dev->vamgr, size, 4 * 1024); + if (bo->virtual_mc_base_address == AMDGPU_INVALID_VA_ADDRESS) { + amdgpu_bo_free_internal(bo); + return -ENOSPC; + } + memset(&va, 0, sizeof(va)); va.in.handle = bo->handle; va.in.operation = AMDGPU_VA_OP_MAP; |