Signed-off-by: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/drm_mm.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 89df9e51f21d..73b9137797e4 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -276,7 +276,7 @@ static struct drm_mm_node *best_hole(struct drm_mm *mm, u64 
size)
        struct drm_mm_node *best = NULL;
        struct rb_node *rb = mm->holes_size.rb_node;
 
-       while (rb) {
+       do {
                struct drm_mm_node *pos =
                        rb_entry(rb, struct drm_mm_node, rb_hole_size);
                u64 sz = pos->hole_size;
@@ -289,17 +289,17 @@ static struct drm_mm_node *best_hole(struct drm_mm *mm, 
u64 size)
                } else {
                        return pos;
                }
-       }
+       } while (rb);
 
        return best;
 }
 
 static struct drm_mm_node *find_hole(struct drm_mm *mm, u64 addr)
 {
-       struct drm_mm_node *node = NULL;
+       struct drm_mm_node *node;
        struct rb_node *rb = mm->holes_addr.rb_node;
 
-       while (rb) {
+       do {
                u64 hole_start;
 
                node = rb_hole_addr_to_node(rb);
@@ -311,7 +311,7 @@ static struct drm_mm_node *find_hole(struct drm_mm *mm, u64 
addr)
                        rb = node->rb_hole_addr.rb_right;
                else
                        break;
-       }
+       } while (rb);
 
        return node;
 }
@@ -336,9 +336,9 @@ first_hole(struct drm_mm *mm,
                return find_hole(mm, end);
 
        case DRM_MM_INSERT_EVICT:
-               return list_first_entry_or_null(&mm->hole_stack,
-                                               struct drm_mm_node,
-                                               hole_stack);
+               return list_first_entry(&mm->hole_stack,
+                                       struct drm_mm_node,
+                                       hole_stack);
        }
 }
 
@@ -389,6 +389,9 @@ int drm_mm_reserve_node(struct drm_mm *mm, struct 
drm_mm_node *node)
        if (unlikely(end <= node->start))
                return -ENOSPC;
 
+       if (RB_EMPTY_ROOT(&mm->holes_addr))
+               return -ENOSPC;
+
        /* Find the relevant hole to add our node to */
        hole = find_hole(mm, node->start);
        if (!hole)
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to