Commit 89dc15b7 authored by Thomas Hellstrom's avatar Thomas Hellstrom

drm/vmwgfx: Stricter count of legacy surface device resources

For legacy surfaces, they were previously registered as device resources
when the driver resources were created. Since they are evictable we instead
register them as device resources once they are created on the device,
just like for guest-backed surfaces. This has implications during
hibernation where we can't hibernate with device resources active.
Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: default avatarBrian Paul <brianp@vmware.com>
Reviewed-by: default avatarDeepak Rawat <drawat@vmware.com>
Reviewed-by: default avatarSinclair Yeh <syeh@vmware.com>
parent 6073a092
...@@ -345,7 +345,6 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res) ...@@ -345,7 +345,6 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res)
dev_priv->used_memory_size -= res->backup_size; dev_priv->used_memory_size -= res->backup_size;
mutex_unlock(&dev_priv->cmdbuf_mutex); mutex_unlock(&dev_priv->cmdbuf_mutex);
} }
vmw_fifo_resource_dec(dev_priv);
} }
/** /**
...@@ -407,6 +406,8 @@ static int vmw_legacy_srf_create(struct vmw_resource *res) ...@@ -407,6 +406,8 @@ static int vmw_legacy_srf_create(struct vmw_resource *res)
vmw_surface_define_encode(srf, cmd); vmw_surface_define_encode(srf, cmd);
vmw_fifo_commit(dev_priv, submit_size); vmw_fifo_commit(dev_priv, submit_size);
vmw_fifo_resource_inc(dev_priv);
/* /*
* Surface memory usage accounting. * Surface memory usage accounting.
*/ */
...@@ -558,6 +559,7 @@ static int vmw_legacy_srf_destroy(struct vmw_resource *res) ...@@ -558,6 +559,7 @@ static int vmw_legacy_srf_destroy(struct vmw_resource *res)
*/ */
vmw_resource_release_id(res); vmw_resource_release_id(res);
vmw_fifo_resource_dec(dev_priv);
return 0; return 0;
} }
...@@ -579,15 +581,11 @@ static int vmw_surface_init(struct vmw_private *dev_priv, ...@@ -579,15 +581,11 @@ static int vmw_surface_init(struct vmw_private *dev_priv,
struct vmw_resource *res = &srf->res; struct vmw_resource *res = &srf->res;
BUG_ON(!res_free); BUG_ON(!res_free);
if (!dev_priv->has_mob)
vmw_fifo_resource_inc(dev_priv);
ret = vmw_resource_init(dev_priv, res, true, res_free, ret = vmw_resource_init(dev_priv, res, true, res_free,
(dev_priv->has_mob) ? &vmw_gb_surface_func : (dev_priv->has_mob) ? &vmw_gb_surface_func :
&vmw_legacy_surface_func); &vmw_legacy_surface_func);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
if (!dev_priv->has_mob)
vmw_fifo_resource_dec(dev_priv);
res_free(res); res_free(res);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment