From 94feb18de8a687bef7c94999161b6bebaa382709 Mon Sep 17 00:00:00 2001 From: Thomas Fleury Date: Thu, 26 Oct 2017 16:41:24 -0700 Subject: 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 Reviewed-on: https://git-master.nvidia.com/r/1586596 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/pmu/pmu_fw.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'drivers/gpu/nvgpu/common/pmu/pmu_fw.c') diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_fw.c b/drivers/gpu/nvgpu/common/pmu/pmu_fw.c index 20eadb50..654fde21 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu_fw.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu_fw.c @@ -29,6 +29,9 @@ #include "gk20a/gk20a.h" +#include "boardobj/boardobj.h" +#include "boardobj/boardobjgrp.h" + /* PMU NS UCODE IMG */ #define NVGPU_PMU_NS_UCODE_IMAGE "gpmu_ucode.bin" @@ -2228,12 +2231,24 @@ static void nvgpu_remove_pmu_support(struct nvgpu_pmu *pmu) struct gk20a *g = gk20a_from_pmu(pmu); struct mm_gk20a *mm = &g->mm; struct vm_gk20a *vm = mm->pmu.vm; + struct boardobj *pboardobj, *pboardobj_tmp; + struct boardobjgrp *pboardobjgrp, *pboardobjgrp_tmp; nvgpu_log_fn(g, " "); if (nvgpu_alloc_initialized(&pmu->dmem)) nvgpu_alloc_destroy(&pmu->dmem); + nvgpu_list_for_each_entry_safe(pboardobjgrp, pboardobjgrp_tmp, + &g->boardobjgrp_head, boardobjgrp, node) { + pboardobjgrp->destruct(pboardobjgrp); + } + + nvgpu_list_for_each_entry_safe(pboardobj, pboardobj_tmp, + &g->boardobj_head, boardobj, node) { + pboardobj->destruct(pboardobj); + } + if (pmu->fw) nvgpu_release_firmware(g, pmu->fw); -- cgit v1.2.2