diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2018-09-26 10:29:49 -0400 |
---|---|---|
committer | Thomas Hellstrom <thellstrom@vmware.com> | 2018-09-28 02:57:08 -0400 |
commit | 1b9a01d62cb1bed2bc98f8b4e31d5b9daf0a446b (patch) | |
tree | e26303fbb82b5c14f7fe502926ffb52befb02a5c /drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | |
parent | 508108ea274788888408f4245438e40c90d821da (diff) |
drm/vmwgfx: Don't refcount cotable lookups during command buffer validation
The typical pattern of these lookups are
-Lookup
-Put on validate list if not already there.
-Unreference
And since we are the exclusive user of the context during lookup time,
we can be sure that the resource will stay alive during the sequence.
So avoid taking a reference during lookup, and also avoid unreferencing
when done. There are two users outside of command buffer validation and
those are refcounted explicitly.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c index 13db7efcb89c..dfa2d19274d5 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | |||
@@ -372,7 +372,6 @@ static int vmw_resource_context_res_add(struct vmw_private *dev_priv, | |||
372 | continue; | 372 | continue; |
373 | 373 | ||
374 | ret = vmw_resource_val_add(sw_context, res); | 374 | ret = vmw_resource_val_add(sw_context, res); |
375 | vmw_resource_unreference(&res); | ||
376 | if (unlikely(ret != 0)) | 375 | if (unlikely(ret != 0)) |
377 | return ret; | 376 | return ret; |
378 | } | 377 | } |
@@ -1266,7 +1265,6 @@ static int vmw_cmd_dx_define_query(struct vmw_private *dev_priv, | |||
1266 | 1265 | ||
1267 | cotable_res = vmw_context_cotable(ctx_node->ctx, SVGA_COTABLE_DXQUERY); | 1266 | cotable_res = vmw_context_cotable(ctx_node->ctx, SVGA_COTABLE_DXQUERY); |
1268 | ret = vmw_cotable_notify(cotable_res, cmd->q.queryId); | 1267 | ret = vmw_cotable_notify(cotable_res, cmd->q.queryId); |
1269 | vmw_resource_unreference(&cotable_res); | ||
1270 | 1268 | ||
1271 | return ret; | 1269 | return ret; |
1272 | } | 1270 | } |
@@ -2578,7 +2576,6 @@ static int vmw_cmd_dx_view_define(struct vmw_private *dev_priv, | |||
2578 | 2576 | ||
2579 | res = vmw_context_cotable(ctx_node->ctx, vmw_view_cotables[view_type]); | 2577 | res = vmw_context_cotable(ctx_node->ctx, vmw_view_cotables[view_type]); |
2580 | ret = vmw_cotable_notify(res, cmd->defined_id); | 2578 | ret = vmw_cotable_notify(res, cmd->defined_id); |
2581 | vmw_resource_unreference(&res); | ||
2582 | if (unlikely(ret != 0)) | 2579 | if (unlikely(ret != 0)) |
2583 | return ret; | 2580 | return ret; |
2584 | 2581 | ||
@@ -2675,7 +2672,6 @@ static int vmw_cmd_dx_so_define(struct vmw_private *dev_priv, | |||
2675 | res = vmw_context_cotable(ctx_node->ctx, vmw_so_cotables[so_type]); | 2672 | res = vmw_context_cotable(ctx_node->ctx, vmw_so_cotables[so_type]); |
2676 | cmd = container_of(header, typeof(*cmd), header); | 2673 | cmd = container_of(header, typeof(*cmd), header); |
2677 | ret = vmw_cotable_notify(res, cmd->defined_id); | 2674 | ret = vmw_cotable_notify(res, cmd->defined_id); |
2678 | vmw_resource_unreference(&res); | ||
2679 | 2675 | ||
2680 | return ret; | 2676 | return ret; |
2681 | } | 2677 | } |
@@ -2806,7 +2802,6 @@ static int vmw_cmd_dx_define_shader(struct vmw_private *dev_priv, | |||
2806 | 2802 | ||
2807 | res = vmw_context_cotable(ctx_node->ctx, SVGA_COTABLE_DXSHADER); | 2803 | res = vmw_context_cotable(ctx_node->ctx, SVGA_COTABLE_DXSHADER); |
2808 | ret = vmw_cotable_notify(res, cmd->body.shaderId); | 2804 | ret = vmw_cotable_notify(res, cmd->body.shaderId); |
2809 | vmw_resource_unreference(&res); | ||
2810 | if (ret) | 2805 | if (ret) |
2811 | return ret; | 2806 | return ret; |
2812 | 2807 | ||