summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2021-04-26 18:03:34 +0300
committerChristian König <christian.koenig@amd.com>2021-06-04 16:16:46 +0300
commitd3bcb4b02fe977d6b7a82dbb6288e9223b5b6732 (patch)
tree74dbc1e4a3b6109aa7804d472f6b746ecd9fd590 /drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
parentbeb4c86521bcc2620078137a6495371bb63ee501 (diff)
downloadlinux-d3bcb4b02fe977d6b7a82dbb6288e9223b5b6732.tar.xz
drm/vmwgfx: switch the TTM backends to self alloc
Similar to the TTM range manager. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210602100914.46246-9-christian.koenig@amd.com
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
index 1774960d1b89..82a5e6489810 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
@@ -57,6 +57,12 @@ static int vmw_gmrid_man_get_node(struct ttm_resource_manager *man,
struct vmwgfx_gmrid_man *gman = to_gmrid_manager(man);
int id;
+ mem->mm_node = kmalloc(sizeof(*mem), GFP_KERNEL);
+ if (!mem->mm_node)
+ return -ENOMEM;
+
+ ttm_resource_init(bo, place, mem->mm_node);
+
id = ida_alloc_max(&gman->gmr_ida, gman->max_gmr_ids - 1, GFP_KERNEL);
if (id < 0)
return id;
@@ -87,13 +93,11 @@ static void vmw_gmrid_man_put_node(struct ttm_resource_manager *man,
{
struct vmwgfx_gmrid_man *gman = to_gmrid_manager(man);
- if (mem->mm_node) {
- ida_free(&gman->gmr_ida, mem->start);
- spin_lock(&gman->lock);
- gman->used_gmr_pages -= mem->num_pages;
- spin_unlock(&gman->lock);
- mem->mm_node = NULL;
- }
+ ida_free(&gman->gmr_ida, mem->start);
+ spin_lock(&gman->lock);
+ gman->used_gmr_pages -= mem->num_pages;
+ spin_unlock(&gman->lock);
+ kfree(mem->mm_node);
}
static const struct ttm_resource_manager_func vmw_gmrid_manager_func;