[Nouveau] [PATCH] drm/nouveau: fix nouveau_mm/nouveau_mm_node leak

Marcin Slusarz marcin.slusarz at gmail.com
Thu Oct 11 14:53:09 PDT 2012


Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
---
 drivers/gpu/drm/nouveau/core/core/gpuobj.c         | 6 +++++-
 drivers/gpu/drm/nouveau/core/include/core/gpuobj.h | 3 +++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/core/core/gpuobj.c b/drivers/gpu/drm/nouveau/core/core/gpuobj.c
index c2a7608..48121d2 100644
--- a/drivers/gpu/drm/nouveau/core/core/gpuobj.c
+++ b/drivers/gpu/drm/nouveau/core/core/gpuobj.c
@@ -39,8 +39,11 @@ nouveau_gpuobj_destroy(struct nouveau_gpuobj *gpuobj)
 			nv_wo32(gpuobj, i, 0x00000000);
 	}
 
+	if (gpuobj->node)
+		nouveau_mm_free(gpuobj->node_heap, &gpuobj->node);
+
 	if (gpuobj->heap.block_size)
-		nouveau_mm_fini(&gpuobj->heap);
+		WARN_ON(nouveau_mm_fini(&gpuobj->heap));
 
 	nouveau_object_destroy(&gpuobj->base);
 }
@@ -114,6 +117,7 @@ nouveau_gpuobj_create_(struct nouveau_object *parent,
 				      max(align, (u32)1), &gpuobj->node);
 		if (ret)
 			return ret;
+		gpuobj->node_heap = heap;
 
 		gpuobj->addr += gpuobj->node->offset;
 	}
diff --git a/drivers/gpu/drm/nouveau/core/include/core/gpuobj.h b/drivers/gpu/drm/nouveau/core/include/core/gpuobj.h
index d09adf1..f65bf5b 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/gpuobj.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/gpuobj.h
@@ -16,7 +16,10 @@ struct nouveau_vm;
 struct nouveau_gpuobj {
 	struct nouveau_object base;
 	struct nouveau_object *parent;
+
+	struct nouveau_mm *node_heap;
 	struct nouveau_mm_node *node;
+
 	struct nouveau_mm heap;
 
 	u32 flags;
-- 
1.7.12



More information about the Nouveau mailing list