diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 9a025a77958d..151a2d42c639 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |||
@@ -308,7 +308,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev, | |||
308 | int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr) | 308 | int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr) |
309 | { | 309 | { |
310 | bool is_iomem; | 310 | bool is_iomem; |
311 | int r; | 311 | long r; |
312 | 312 | ||
313 | if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS) | 313 | if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS) |
314 | return -EPERM; | 314 | return -EPERM; |
@@ -319,14 +319,20 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr) | |||
319 | } | 319 | } |
320 | return 0; | 320 | return 0; |
321 | } | 321 | } |
322 | |||
323 | r = reservation_object_wait_timeout_rcu(bo->tbo.resv, false, false, | ||
324 | MAX_SCHEDULE_TIMEOUT); | ||
325 | if (r < 0) | ||
326 | return r; | ||
327 | |||
322 | r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap); | 328 | r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap); |
323 | if (r) { | 329 | if (r) |
324 | return r; | 330 | return r; |
325 | } | 331 | |
326 | bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); | 332 | bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); |
327 | if (ptr) { | 333 | if (ptr) |
328 | *ptr = bo->kptr; | 334 | *ptr = bo->kptr; |
329 | } | 335 | |
330 | return 0; | 336 | return 0; |
331 | } | 337 | } |
332 | 338 | ||