aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index 36b871686d3c..596cd6dafd33 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -346,13 +346,11 @@ static int vmw_bo_to_validate_list(struct vmw_sw_context *sw_context,
346 ++sw_context->cur_val_buf; 346 ++sw_context->cur_val_buf;
347 val_buf = &vval_buf->base; 347 val_buf = &vval_buf->base;
348 val_buf->bo = ttm_bo_reference(bo); 348 val_buf->bo = ttm_bo_reference(bo);
349 val_buf->reserved = false; 349 val_buf->shared = false;
350 list_add_tail(&val_buf->head, &sw_context->validate_nodes); 350 list_add_tail(&val_buf->head, &sw_context->validate_nodes);
351 vval_buf->validate_as_mob = validate_as_mob; 351 vval_buf->validate_as_mob = validate_as_mob;
352 } 352 }
353 353
354 sw_context->fence_flags |= DRM_VMW_FENCE_FLAG_EXEC;
355
356 if (p_val_node) 354 if (p_val_node)
357 *p_val_node = val_node; 355 *p_val_node = val_node;
358 356
@@ -2337,13 +2335,9 @@ int vmw_execbuf_fence_commands(struct drm_file *file_priv,
2337 2335
2338 if (p_handle != NULL) 2336 if (p_handle != NULL)
2339 ret = vmw_user_fence_create(file_priv, dev_priv->fman, 2337 ret = vmw_user_fence_create(file_priv, dev_priv->fman,
2340 sequence, 2338 sequence, p_fence, p_handle);
2341 DRM_VMW_FENCE_FLAG_EXEC,
2342 p_fence, p_handle);
2343 else 2339 else
2344 ret = vmw_fence_create(dev_priv->fman, sequence, 2340 ret = vmw_fence_create(dev_priv->fman, sequence, p_fence);
2345 DRM_VMW_FENCE_FLAG_EXEC,
2346 p_fence);
2347 2341
2348 if (unlikely(ret != 0 && !synced)) { 2342 if (unlikely(ret != 0 && !synced)) {
2349 (void) vmw_fallback_wait(dev_priv, false, false, 2343 (void) vmw_fallback_wait(dev_priv, false, false,
@@ -2395,7 +2389,7 @@ vmw_execbuf_copy_fence_user(struct vmw_private *dev_priv,
2395 BUG_ON(fence == NULL); 2389 BUG_ON(fence == NULL);
2396 2390
2397 fence_rep.handle = fence_handle; 2391 fence_rep.handle = fence_handle;
2398 fence_rep.seqno = fence->seqno; 2392 fence_rep.seqno = fence->base.seqno;
2399 vmw_update_seqno(dev_priv, &dev_priv->fifo); 2393 vmw_update_seqno(dev_priv, &dev_priv->fifo);
2400 fence_rep.passed_seqno = dev_priv->last_read_seqno; 2394 fence_rep.passed_seqno = dev_priv->last_read_seqno;
2401 } 2395 }
@@ -2416,8 +2410,7 @@ vmw_execbuf_copy_fence_user(struct vmw_private *dev_priv,
2416 ttm_ref_object_base_unref(vmw_fp->tfile, 2410 ttm_ref_object_base_unref(vmw_fp->tfile,
2417 fence_handle, TTM_REF_USAGE); 2411 fence_handle, TTM_REF_USAGE);
2418 DRM_ERROR("Fence copy error. Syncing.\n"); 2412 DRM_ERROR("Fence copy error. Syncing.\n");
2419 (void) vmw_fence_obj_wait(fence, fence->signal_mask, 2413 (void) vmw_fence_obj_wait(fence, false, false,
2420 false, false,
2421 VMW_FENCE_WAIT_TIMEOUT); 2414 VMW_FENCE_WAIT_TIMEOUT);
2422 } 2415 }
2423} 2416}
@@ -2469,7 +2462,6 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2469 sw_context->fp = vmw_fpriv(file_priv); 2462 sw_context->fp = vmw_fpriv(file_priv);
2470 sw_context->cur_reloc = 0; 2463 sw_context->cur_reloc = 0;
2471 sw_context->cur_val_buf = 0; 2464 sw_context->cur_val_buf = 0;
2472 sw_context->fence_flags = 0;
2473 INIT_LIST_HEAD(&sw_context->resource_list); 2465 INIT_LIST_HEAD(&sw_context->resource_list);
2474 sw_context->cur_query_bo = dev_priv->pinned_bo; 2466 sw_context->cur_query_bo = dev_priv->pinned_bo;
2475 sw_context->last_query_ctx = NULL; 2467 sw_context->last_query_ctx = NULL;
@@ -2495,7 +2487,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2495 if (unlikely(ret != 0)) 2487 if (unlikely(ret != 0))
2496 goto out_err_nores; 2488 goto out_err_nores;
2497 2489
2498 ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes); 2490 ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes, true);
2499 if (unlikely(ret != 0)) 2491 if (unlikely(ret != 0))
2500 goto out_err; 2492 goto out_err;
2501 2493
@@ -2678,15 +2670,14 @@ void __vmw_execbuf_release_pinned_bo(struct vmw_private *dev_priv,
2678 INIT_LIST_HEAD(&validate_list); 2670 INIT_LIST_HEAD(&validate_list);
2679 2671
2680 pinned_val.bo = ttm_bo_reference(dev_priv->pinned_bo); 2672 pinned_val.bo = ttm_bo_reference(dev_priv->pinned_bo);
2673 pinned_val.shared = false;
2681 list_add_tail(&pinned_val.head, &validate_list); 2674 list_add_tail(&pinned_val.head, &validate_list);
2682 2675
2683 query_val.bo = ttm_bo_reference(dev_priv->dummy_query_bo); 2676 query_val.bo = ttm_bo_reference(dev_priv->dummy_query_bo);
2677 query_val.shared = false;
2684 list_add_tail(&query_val.head, &validate_list); 2678 list_add_tail(&query_val.head, &validate_list);
2685 2679
2686 do { 2680 ret = ttm_eu_reserve_buffers(&ticket, &validate_list, false);
2687 ret = ttm_eu_reserve_buffers(&ticket, &validate_list);
2688 } while (ret == -ERESTARTSYS);
2689
2690 if (unlikely(ret != 0)) { 2681 if (unlikely(ret != 0)) {
2691 vmw_execbuf_unpin_panic(dev_priv); 2682 vmw_execbuf_unpin_panic(dev_priv);
2692 goto out_no_reserve; 2683 goto out_no_reserve;