drm/nouveau: replace some open-coded mm_initialised checks
authorBen Skeggs <bskeggs@redhat.com>
Wed, 10 Oct 2012 02:13:38 +0000 (12:13 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 28 Nov 2012 23:56:30 +0000 (09:56 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/core/mm.c
drivers/gpu/drm/nouveau/core/include/core/mm.h
drivers/gpu/drm/nouveau/core/subdev/fb/base.c

index a6d3cd6490f7fa97f171dff724f73430364af89f..0261a11b2ae03e2f054f8017ffe29b2724d56120 100644 (file)
@@ -234,15 +234,18 @@ nouveau_mm_init(struct nouveau_mm *mm, u32 offset, u32 length, u32 block)
 int
 nouveau_mm_fini(struct nouveau_mm *mm)
 {
-       struct nouveau_mm_node *node, *heap =
-               list_first_entry(&mm->nodes, struct nouveau_mm_node, nl_entry);
-       int nodes = 0;
+       if (nouveau_mm_initialised(mm)) {
+               struct nouveau_mm_node *node, *heap =
+                       list_first_entry(&mm->nodes, typeof(*heap), nl_entry);
+               int nodes = 0;
+
+               list_for_each_entry(node, &mm->nodes, nl_entry) {
+                       if (WARN_ON(nodes++ == mm->heap_nodes))
+                               return -EBUSY;
+               }
 
-       list_for_each_entry(node, &mm->nodes, nl_entry) {
-               if (WARN_ON(nodes++ == mm->heap_nodes))
-                       return -EBUSY;
+               kfree(heap);
        }
 
-       kfree(heap);
        return 0;
 }
index 975137ba34a6faefb7d4121b8db2efd3464a28c6..2514e81ade0220f83e7cdfecc4dc19a7177df062 100644 (file)
@@ -21,6 +21,12 @@ struct nouveau_mm {
        int heap_nodes;
 };
 
+static inline bool
+nouveau_mm_initialised(struct nouveau_mm *mm)
+{
+       return mm->block_size != 0;
+}
+
 int  nouveau_mm_init(struct nouveau_mm *, u32 offset, u32 length, u32 block);
 int  nouveau_mm_fini(struct nouveau_mm *);
 int  nouveau_mm_head(struct nouveau_mm *, u8 type, u32 size_max, u32 size_min,
index f0086de8af3113d772f687a9c3a1117128f6fb80..9fae64d60954f539315c25ef9cc52a2f1b160cd0 100644 (file)
@@ -85,12 +85,8 @@ nouveau_fb_destroy(struct nouveau_fb *pfb)
 
        for (i = 0; i < pfb->tile.regions; i++)
                pfb->tile.fini(pfb, i, &pfb->tile.region[i]);
-
-       if (pfb->tags.block_size)
-               nouveau_mm_fini(&pfb->tags);
-
-       if (pfb->vram.block_size)
-               nouveau_mm_fini(&pfb->vram);
+       nouveau_mm_fini(&pfb->tags);
+       nouveau_mm_fini(&pfb->vram);
 
        nouveau_subdev_destroy(&pfb->base);
 }