Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 drivers/gpu/drm/drm_mm.c |   67 ++++++++++++++++++++++++++++-----------------
 1 files changed, 42 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 4fa33e1..fecb406 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -115,24 +115,15 @@ static inline unsigned long drm_mm_hole_node_end(struct 
drm_mm_node *hole_node)
        return next_node->start;
 }

-struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
-                                            unsigned long size,
-                                            unsigned alignment,
-                                            int atomic)
+static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
+                                struct drm_mm_node *node,
+                                unsigned long size, unsigned alignment)
 {
-
-       struct drm_mm_node *node;
        struct drm_mm *mm = hole_node->mm;
        unsigned long tmp = 0, wasted = 0;
        unsigned long hole_start = drm_mm_hole_node_start(hole_node);
        unsigned long hole_end = drm_mm_hole_node_end(hole_node);

-       BUG_ON(!hole_node->hole_follows);
-
-       node = drm_mm_kmalloc(mm, atomic);
-       if (unlikely(node == NULL))
-               return NULL;
-
        if (alignment)
                tmp = hole_start % alignment;

@@ -157,30 +148,37 @@ struct drm_mm_node *drm_mm_get_block_generic(struct 
drm_mm_node *hole_node,
        } else {
                node->hole_follows = 0;
        }
+}
+
+struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
+                                            unsigned long size,
+                                            unsigned alignment,
+                                            int atomic)
+{
+       struct drm_mm_node *node;
+
+       BUG_ON(!hole_node->hole_follows);
+
+       node = drm_mm_kmalloc(hole_node->mm, atomic);
+       if (unlikely(node == NULL))
+               return NULL;
+
+       drm_mm_insert_helper(hole_node, node, size, alignment);

        return node;
 }
 EXPORT_SYMBOL(drm_mm_get_block_generic);

-struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node 
*hole_node,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long start,
-                                               unsigned long end,
-                                               int atomic)
+static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
+                                      struct drm_mm_node *node,
+                                      unsigned long size, unsigned alignment,
+                                      unsigned long start, unsigned long end)
 {
-       struct drm_mm_node *node;
        struct drm_mm *mm = hole_node->mm;
        unsigned long tmp = 0, wasted = 0;
        unsigned long hole_start = drm_mm_hole_node_start(hole_node);
        unsigned long hole_end = drm_mm_hole_node_end(hole_node);

-       BUG_ON(!hole_node->hole_follows);
-
-       node = drm_mm_kmalloc(mm, atomic);
-       if (unlikely(node == NULL))
-               return NULL;
-
        if (hole_start < start)
                wasted += start - hole_start;
        if (alignment)
@@ -210,6 +208,25 @@ struct drm_mm_node *drm_mm_get_block_range_generic(struct 
drm_mm_node *hole_node
        } else {
                node->hole_follows = 0;
        }
+}
+
+struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node 
*hole_node,
+                                               unsigned long size,
+                                               unsigned alignment,
+                                               unsigned long start,
+                                               unsigned long end,
+                                               int atomic)
+{
+       struct drm_mm_node *node;
+
+       BUG_ON(!hole_node->hole_follows);
+
+       node = drm_mm_kmalloc(hole_node->mm, atomic);
+       if (unlikely(node == NULL))
+               return NULL;
+
+       drm_mm_insert_helper_range(hole_node, node, size, alignment,
+                                  start, end);

        return node;
 }
-- 
1.7.2.3

Reply via email to