diff options
Diffstat (limited to 'amdgpu/amdgpu_device.c')
-rw-r--r-- | amdgpu/amdgpu_device.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/amdgpu/amdgpu_device.c b/amdgpu/amdgpu_device.c index c6bbae81..e16cd24b 100644 --- a/amdgpu/amdgpu_device.c +++ b/amdgpu/amdgpu_device.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include "amdgpu_drm.h" | 43 | #include "amdgpu_drm.h" |
44 | #include "amdgpu_internal.h" | 44 | #include "amdgpu_internal.h" |
45 | #include "util_hash_table.h" | 45 | #include "util_hash_table.h" |
46 | #include "util_math.h" | ||
46 | 47 | ||
47 | #define PTR_TO_UINT(x) ((unsigned)((intptr_t)(x))) | 48 | #define PTR_TO_UINT(x) ((unsigned)((intptr_t)(x))) |
48 | #define UINT_TO_PTR(x) ((void *)((intptr_t)(x))) | 49 | #define UINT_TO_PTR(x) ((void *)((intptr_t)(x))) |
@@ -173,6 +174,7 @@ int amdgpu_device_initialize(int fd, | |||
173 | int flag_auth = 0; | 174 | int flag_auth = 0; |
174 | int flag_authexist=0; | 175 | int flag_authexist=0; |
175 | uint32_t accel_working = 0; | 176 | uint32_t accel_working = 0; |
177 | uint64_t start, max; | ||
176 | 178 | ||
177 | *device_handle = NULL; | 179 | *device_handle = NULL; |
178 | 180 | ||
@@ -251,6 +253,19 @@ int amdgpu_device_initialize(int fd, | |||
251 | 253 | ||
252 | dev->vamgr = amdgpu_vamgr_get_global(dev); | 254 | dev->vamgr = amdgpu_vamgr_get_global(dev); |
253 | 255 | ||
256 | max = MIN2(dev->dev_info.virtual_address_max, 0xffffffff); | ||
257 | start = amdgpu_vamgr_find_va(dev->vamgr, | ||
258 | max - dev->dev_info.virtual_address_offset, | ||
259 | dev->dev_info.virtual_address_alignment, 0); | ||
260 | if (start > 0xffffffff) | ||
261 | goto free_va; /* shouldn't get here */ | ||
262 | |||
263 | dev->vamgr_32 = calloc(1, sizeof(struct amdgpu_bo_va_mgr)); | ||
264 | if (dev->vamgr_32 == NULL) | ||
265 | goto free_va; | ||
266 | amdgpu_vamgr_init(dev->vamgr_32, start, max, | ||
267 | dev->dev_info.virtual_address_alignment); | ||
268 | |||
254 | *major_version = dev->major_version; | 269 | *major_version = dev->major_version; |
255 | *minor_version = dev->minor_version; | 270 | *minor_version = dev->minor_version; |
256 | *device_handle = dev; | 271 | *device_handle = dev; |
@@ -259,6 +274,11 @@ int amdgpu_device_initialize(int fd, | |||
259 | 274 | ||
260 | return 0; | 275 | return 0; |
261 | 276 | ||
277 | free_va: | ||
278 | r = -ENOMEM; | ||
279 | amdgpu_vamgr_free_va(dev->vamgr, start, | ||
280 | max - dev->dev_info.virtual_address_offset); | ||
281 | |||
262 | cleanup: | 282 | cleanup: |
263 | if (dev->fd >= 0) | 283 | if (dev->fd >= 0) |
264 | close(dev->fd); | 284 | close(dev->fd); |