Skip to content

Commit de3688e

Browse files
drm/ttm: add ttm_resource_fini v2
Make sure we call the common cleanup function in all implementations of the resource manager. v2: fix missing case in i915, rudimentary kerneldoc, should be filled in more when we add more functionality Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20220124122514.1832-2-christian.koenig@amd.com
1 parent 2343bcd commit de3688e

File tree

13 files changed

+48
-6
lines changed

13 files changed

+48
-6
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
169169
return 0;
170170

171171
err_free:
172+
ttm_resource_fini(man, &node->base.base);
172173
kfree(node);
173174

174175
err_out:
@@ -200,6 +201,7 @@ static void amdgpu_gtt_mgr_del(struct ttm_resource_manager *man,
200201
if (!(res->placement & TTM_PL_FLAG_TEMPORARY))
201202
atomic64_sub(res->num_pages, &mgr->used);
202203

204+
ttm_resource_fini(man, res);
203205
kfree(node);
204206
}
205207

drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ static void amdgpu_preempt_mgr_del(struct ttm_resource_manager *man,
9595
struct amdgpu_preempt_mgr *mgr = to_preempt_mgr(man);
9696

9797
atomic64_sub(res->num_pages, &mgr->used);
98+
ttm_resource_fini(man, res);
9899
kfree(res);
99100
}
100101

drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
476476
while (i--)
477477
drm_mm_remove_node(&node->mm_nodes[i]);
478478
spin_unlock(&mgr->lock);
479+
ttm_resource_fini(man, &node->base);
479480
kvfree(node);
480481

481482
error_sub:
@@ -515,6 +516,7 @@ static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
515516
atomic64_sub(usage, &mgr->usage);
516517
atomic64_sub(vis_usage, &mgr->vis_usage);
517518

519+
ttm_resource_fini(man, res);
518520
kvfree(node);
519521
}
520522

drivers/gpu/drm/i915/i915_ttm_buddy_manager.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
110110
drm_buddy_free_list(mm, &bman_res->blocks);
111111
mutex_unlock(&bman->lock);
112112
err_free_res:
113+
ttm_resource_fini(man, &bman_res->base);
113114
kfree(bman_res);
114115
return err;
115116
}
@@ -124,6 +125,7 @@ static void i915_ttm_buddy_man_free(struct ttm_resource_manager *man,
124125
drm_buddy_free_list(&bman->mm, &bman_res->blocks);
125126
mutex_unlock(&bman->lock);
126127

128+
ttm_resource_fini(man, res);
127129
kfree(bman_res);
128130
}
129131

drivers/gpu/drm/nouveau/nouveau_mem.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,12 @@ nouveau_mem_vram(struct ttm_resource *reg, bool contig, u8 page)
162162
}
163163

164164
void
165-
nouveau_mem_del(struct ttm_resource *reg)
165+
nouveau_mem_del(struct ttm_resource_manager *man, struct ttm_resource *reg)
166166
{
167167
struct nouveau_mem *mem = nouveau_mem(reg);
168168

169169
nouveau_mem_fini(mem);
170+
ttm_resource_fini(man, reg);
170171
kfree(mem);
171172
}
172173

drivers/gpu/drm/nouveau/nouveau_mem.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ nouveau_mem(struct ttm_resource *reg)
2323

2424
int nouveau_mem_new(struct nouveau_cli *, u8 kind, u8 comp,
2525
struct ttm_resource **);
26-
void nouveau_mem_del(struct ttm_resource *);
26+
void nouveau_mem_del(struct ttm_resource_manager *man,
27+
struct ttm_resource *);
2728
int nouveau_mem_vram(struct ttm_resource *, bool contig, u8 page);
2829
int nouveau_mem_host(struct ttm_resource *, struct ttm_tt *);
2930
void nouveau_mem_fini(struct nouveau_mem *);

drivers/gpu/drm/nouveau/nouveau_ttm.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@
3636
#include <core/tegra.h>
3737

3838
static void
39-
nouveau_manager_del(struct ttm_resource_manager *man, struct ttm_resource *reg)
39+
nouveau_manager_del(struct ttm_resource_manager *man,
40+
struct ttm_resource *reg)
4041
{
41-
nouveau_mem_del(reg);
42+
nouveau_mem_del(man, reg);
4243
}
4344

4445
static int
@@ -62,7 +63,7 @@ nouveau_vram_manager_new(struct ttm_resource_manager *man,
6263

6364
ret = nouveau_mem_vram(*res, nvbo->contig, nvbo->page);
6465
if (ret) {
65-
nouveau_mem_del(*res);
66+
nouveau_mem_del(man, *res);
6667
return ret;
6768
}
6869

@@ -118,7 +119,7 @@ nv04_gart_manager_new(struct ttm_resource_manager *man,
118119
ret = nvif_vmm_get(&mem->cli->vmm.vmm, PTES, false, 12, 0,
119120
(long)(*res)->num_pages << PAGE_SHIFT, &mem->vma[0]);
120121
if (ret) {
121-
nouveau_mem_del(*res);
122+
nouveau_mem_del(man, *res);
122123
return ret;
123124
}
124125

drivers/gpu/drm/ttm/ttm_range_manager.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
8989
spin_unlock(&rman->lock);
9090

9191
if (unlikely(ret)) {
92+
ttm_resource_fini(man, *res);
9293
kfree(node);
9394
return ret;
9495
}
@@ -108,6 +109,7 @@ static void ttm_range_man_free(struct ttm_resource_manager *man,
108109
drm_mm_remove_node(&node->mm_nodes[0]);
109110
spin_unlock(&rman->lock);
110111

112+
ttm_resource_fini(man, res);
111113
kfree(node);
112114
}
113115

drivers/gpu/drm/ttm/ttm_resource.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
#include <drm/ttm/ttm_resource.h>
3030
#include <drm/ttm/ttm_bo_driver.h>
3131

32+
/**
33+
* ttm_resource_init - resource object constructure
34+
* @bo: buffer object this resources is allocated for
35+
* @place: placement of the resource
36+
* @res: the resource object to inistilize
37+
*
38+
* Initialize a new resource object. Counterpart of &ttm_resource_fini.
39+
*/
3240
void ttm_resource_init(struct ttm_buffer_object *bo,
3341
const struct ttm_place *place,
3442
struct ttm_resource *res)
@@ -44,6 +52,21 @@ void ttm_resource_init(struct ttm_buffer_object *bo,
4452
}
4553
EXPORT_SYMBOL(ttm_resource_init);
4654

55+
/**
56+
* ttm_resource_fini - resource destructor
57+
* @man: the resource manager this resource belongs to
58+
* @res: the resource to clean up
59+
*
60+
* Should be used by resource manager backends to clean up the TTM resource
61+
* objects before freeing the underlying structure. Counterpart of
62+
* &ttm_resource_init
63+
*/
64+
void ttm_resource_fini(struct ttm_resource_manager *man,
65+
struct ttm_resource *res)
66+
{
67+
}
68+
EXPORT_SYMBOL(ttm_resource_fini);
69+
4770
int ttm_resource_alloc(struct ttm_buffer_object *bo,
4871
const struct ttm_place *place,
4972
struct ttm_resource **res_ptr)

drivers/gpu/drm/ttm/ttm_sys_manager.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ static int ttm_sys_man_alloc(struct ttm_resource_manager *man,
2323
static void ttm_sys_man_free(struct ttm_resource_manager *man,
2424
struct ttm_resource *res)
2525
{
26+
ttm_resource_fini(man, res);
2627
kfree(res);
2728
}
2829

0 commit comments

Comments
 (0)