aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-03-10 10:21:04 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-03-14 13:43:09 -0400
commit587f3c70aaf07081fb24ac035789836a3f7d9008 (patch)
tree28a80f072f9f0198a15690f7aacd3854e184e867 /drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
parent102534b085c41b278ee30674951c3ebac243645f (diff)
drm/amdgpu: always wait before kmap a BO
When a BO is currently moving we otherwise would blindly access the new location without checking. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
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