[Intel-gfx] [PATCH] drm: Use a common test for no holes before find_hole
Chris Wilson
chris at chris-wilson.co.uk
Tue Feb 21 18:13:57 UTC 2017
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
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
More information about the Intel-gfx
mailing list