Commit cef9e99e authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/ttm: explicitly wait for bo idle before memcpy buffer move



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 35b8141b
Loading
Loading
Loading
Loading
+18 −19
Original line number Diff line number Diff line
@@ -1180,13 +1180,8 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
		goto out;
	}

	/* CPU copy if we have no accelerated method available */
	if (!drm->ttm.move) {
		ret = ttm_bo_move_memcpy(bo, evict, no_wait_gpu, new_mem);
		goto out;
	}

	/* Hardware assisted copy. */
	if (drm->ttm.move) {
		if (new_mem->mem_type == TTM_PL_SYSTEM)
			ret = nouveau_bo_move_flipd(bo, evict, intr,
						    no_wait_gpu, new_mem);
@@ -1196,11 +1191,15 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
		else
			ret = nouveau_bo_move_m2mf(bo, evict, intr,
						   no_wait_gpu, new_mem);

		if (!ret)
			goto out;
	}

	/* Fallback to software copy. */
	spin_lock(&bo->bdev->fence_lock);
	ret = ttm_bo_wait(bo, true, intr, no_wait_gpu);
	spin_unlock(&bo->bdev->fence_lock);
	if (ret == 0)
		ret = ttm_bo_move_memcpy(bo, evict, no_wait_gpu, new_mem);

out: