aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c16
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,
308int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr) 308int 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