diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 27 |
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; |