summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/boardobj/boardobj.c
diff options
context:
space:
mode:
authorThomas Fleury <tfleury@nvidia.com>2017-10-26 19:41:24 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-11-06 16:41:36 -0500
commit94feb18de8a687bef7c94999161b6bebaa382709 (patch)
tree8bea74e24b9e29e5e0a920b956abbe73e90edff3 /drivers/gpu/nvgpu/boardobj/boardobj.c
parent4e7c9c3008e8bd354afa471e1d97ba88b12194da (diff)
gpu: nvgpu: call destructor for boardobj and boardobjgrp
Maintain a list of boardobj and boardobjgrp, so that we can free related objects when removing pmu support. A flag is added in boardobj so that the destructor can determine if it should free the object. This 'allocated' flag is false when the object is embedded into another structure, which should be freed through other means. JIRA EVLR-1959 Bug 200352099 Change-Id: I6a3ff3c57f7428dd145deacf98f2992a9be9796d Signed-off-by: Thomas Fleury <tfleury@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1586596 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/boardobj/boardobj.c')
-rw-r--r--drivers/gpu/nvgpu/boardobj/boardobj.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/boardobj/boardobj.c b/drivers/gpu/nvgpu/boardobj/boardobj.c
index c0646eb4..f9be6981 100644
--- a/drivers/gpu/nvgpu/boardobj/boardobj.c
+++ b/drivers/gpu/nvgpu/boardobj/boardobj.c
@@ -41,6 +41,7 @@ u32 boardobj_construct_super(struct gk20a *g, struct boardobj **ppboardobj,
41 *ppboardobj = nvgpu_kzalloc(g, size); 41 *ppboardobj = nvgpu_kzalloc(g, size);
42 if (*ppboardobj == NULL) 42 if (*ppboardobj == NULL)
43 return -ENOMEM; 43 return -ENOMEM;
44 (*ppboardobj)->allocated = true;
44 } 45 }
45 46
46 pboardobj = *ppboardobj; 47 pboardobj = *ppboardobj;
@@ -53,6 +54,8 @@ u32 boardobj_construct_super(struct gk20a *g, struct boardobj **ppboardobj,
53 pboardobj->destruct = boardobj_destruct_super; 54 pboardobj->destruct = boardobj_destruct_super;
54 pboardobj->pmudatainit = boardobj_pmudatainit_super; 55 pboardobj->pmudatainit = boardobj_pmudatainit_super;
55 56
57 nvgpu_list_add(&pboardobj->node, &g->boardobj_head);
58
56 return 0; 59 return 0;
57} 60}
58 61
@@ -61,7 +64,11 @@ u32 boardobj_destruct_super(struct boardobj *pboardobj)
61 gk20a_dbg_info(""); 64 gk20a_dbg_info("");
62 if (pboardobj == NULL) 65 if (pboardobj == NULL)
63 return -EINVAL; 66 return -EINVAL;
64 nvgpu_kfree(pboardobj->g, pboardobj); 67
68 nvgpu_list_del(&pboardobj->node);
69 if (pboardobj->allocated)
70 nvgpu_kfree(pboardobj->g, pboardobj);
71
65 return 0; 72 return 0;
66} 73}
67 74