We hit dma_resv_assert_held warnings in several places, reserve the ttm base object when it's being used to avoid them.
Signed-off-by: Maaz Mombasawala <[email protected]> --- drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 6 ++++++ drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c index 1264a9ac4241..a69a6764ead2 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c @@ -52,10 +52,16 @@ static void vmw_bo_free(struct ttm_buffer_object *bo) WARN_ON(vbo != res->guest_memory_bo); WARN_ON(!res->guest_memory_bo); if (res->guest_memory_bo) { + int ret = 0; /* Reserve and switch the backing mob. */ mutex_lock(&res->dev_priv->cmdbuf_mutex); (void)vmw_resource_reserve(res, false, true); + ret = ttm_bo_reserve(bo, false, false, NULL); + if (ret != 0) + drm_warn(&res->dev_priv->drm, + "%s: failed reserve\n", __func__); vmw_resource_mob_detach(res); + ttm_bo_unreserve(bo); if (res->dirty) res->func->dirty_free(res); if (res->coherent) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c index 7b8163b5e501..d0c371df7e4c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c @@ -131,6 +131,7 @@ crc_generate_worker(struct work_struct *work) spin_unlock_irq(&du->vkms.crc_state_lock); if (surf) { + int ret; if (vmw_surface_sync(vmw, surf)) { drm_warn( crtc->dev, @@ -138,7 +139,14 @@ crc_generate_worker(struct work_struct *work) return; } + ret = ttm_bo_reserve(&surf->res.guest_memory_bo->tbo, false, false, NULL); + if (ret != 0) { + drm_warn(&vmw->drm, "%s: failed reserve\n", __func__); + goto done; + } compute_crc(crtc, surf, &crc32); + ttm_bo_unreserve(&surf->res.guest_memory_bo->tbo); +done: vmw_surface_unreference(&surf); } -- 2.54.0
