Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/ttm: add wait for idle in all drivers bo_move functions

Wait for idle before moving the BO in all drivers implementing
an accelerated move function.

This should keep the current behavior when removing the pre move wait.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
88932a7b 18885778

+25
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
··· 390 390 struct ttm_mem_reg *old_mem = &bo->mem; 391 391 int r; 392 392 393 + r = ttm_bo_wait(bo, interruptible, no_wait_gpu); 394 + if (r) 395 + return r; 396 + 393 397 /* Can't move a pinned BO */ 394 398 abo = container_of(bo, struct amdgpu_bo, tbo); 395 399 if (WARN_ON_ONCE(abo->pin_count > 0))
+4
drivers/gpu/drm/nouveau/nouveau_bo.c
··· 1289 1289 struct nouveau_drm_tile *new_tile = NULL; 1290 1290 int ret = 0; 1291 1291 1292 + ret = ttm_bo_wait(bo, intr, no_wait_gpu); 1293 + if (ret) 1294 + return ret; 1295 + 1292 1296 if (nvbo->pin_refcnt) 1293 1297 NV_WARN(drm, "Moving pinned object %p!\n", nvbo); 1294 1298
+7
drivers/gpu/drm/qxl/qxl_ttm.c
··· 350 350 struct ttm_mem_reg *new_mem) 351 351 { 352 352 struct ttm_mem_reg *old_mem = &bo->mem; 353 + int ret; 354 + 355 + ret = ttm_bo_wait(bo, interruptible, no_wait_gpu); 356 + if (ret) 357 + return ret; 358 + 359 + 353 360 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { 354 361 qxl_move_null(bo, new_mem); 355 362 return 0;
+4
drivers/gpu/drm/radeon/radeon_ttm.c
··· 403 403 struct ttm_mem_reg *old_mem = &bo->mem; 404 404 int r; 405 405 406 + r = ttm_bo_wait(bo, interruptible, no_wait_gpu); 407 + if (r) 408 + return r; 409 + 406 410 /* Can't move a pinned BO */ 407 411 rbo = container_of(bo, struct radeon_bo, tbo); 408 412 if (WARN_ON_ONCE(rbo->pin_count > 0))
+6
drivers/gpu/drm/virtio/virtgpu_ttm.c
··· 375 375 bool no_wait_gpu, 376 376 struct ttm_mem_reg *new_mem) 377 377 { 378 + int ret; 379 + 380 + ret = ttm_bo_wait(bo, interruptible, no_wait_gpu); 381 + if (ret) 382 + return ret; 383 + 378 384 virtio_gpu_move_null(bo, new_mem); 379 385 return 0; 380 386 }