drm/vmwgfx: Assign eviction priorities to resources
TTM provides a means to assign eviction priorities to buffer object. This means that all buffer objects with a lower priority will be evicted first on memory pressure. Use this to make sure surfaces and in particular non-dirty surfaces are evicted first. Evicting in particular shaders, cotables and contexts imply a significant performance hit on vmwgfx, so make sure these resources are evicted last. Some buffer objects are sub-allocated in user-space which means we can have many resources attached to a single buffer object or resource. In that case the buffer object is given the highest priority of the attached resources. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Deepak Rawat <drawat@vmware.com>
This commit is contained in:
@@ -95,6 +95,8 @@ static const struct vmw_res_func vmw_gb_shader_func = {
|
||||
.res_type = vmw_res_shader,
|
||||
.needs_backup = true,
|
||||
.may_evict = true,
|
||||
.prio = 3,
|
||||
.dirty_prio = 3,
|
||||
.type_name = "guest backed shaders",
|
||||
.backup_placement = &vmw_mob_placement,
|
||||
.create = vmw_gb_shader_create,
|
||||
@@ -106,7 +108,9 @@ static const struct vmw_res_func vmw_gb_shader_func = {
|
||||
static const struct vmw_res_func vmw_dx_shader_func = {
|
||||
.res_type = vmw_res_shader,
|
||||
.needs_backup = true,
|
||||
.may_evict = false,
|
||||
.may_evict = true,
|
||||
.prio = 3,
|
||||
.dirty_prio = 3,
|
||||
.type_name = "dx shaders",
|
||||
.backup_placement = &vmw_mob_placement,
|
||||
.create = vmw_dx_shader_create,
|
||||
@@ -423,7 +427,7 @@ static int vmw_dx_shader_create(struct vmw_resource *res)
|
||||
|
||||
WARN_ON_ONCE(!shader->committed);
|
||||
|
||||
if (!list_empty(&res->mob_head)) {
|
||||
if (vmw_resource_mob_attached(res)) {
|
||||
mutex_lock(&dev_priv->binding_mutex);
|
||||
ret = vmw_dx_shader_unscrub(res);
|
||||
mutex_unlock(&dev_priv->binding_mutex);
|
||||
|
Reference in New Issue
Block a user