[PATCH 092/131] mm-overallocate-alignment

Chris Wilson chris at chris-wilson.co.uk
Sat Aug 6 07:36:59 UTC 2016


---
 drivers/gpu/drm/drm_mm.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 08cd46d94aa8..ae4c58592c70 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -388,6 +388,7 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm * const mm,
 {
 	struct drm_mm_node *entry;
 	u64 alignment_mask;
+	u64 min_size;
 
 	if (WARN_ON(size == 0))
 		return -EINVAL;
@@ -395,8 +396,10 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm * const mm,
 	if (end - start < size)
 		return -ENOSPC;
 
+	min_size = alignment + max(size, alignment);
 	alignment_mask = is_power_of_2(alignment) ? alignment - 1 : 0;
-	for (entry = first_hole(mm, start, end, size, flags); entry;
+restart:
+	for (entry = first_hole(mm, start, end, min_size, flags); entry;
 	     entry = next_hole(mm, entry, flags)) {
 		u64 hole_start = __drm_mm_hole_node_start(entry);
 		u64 hole_end = hole_start + entry->hole_size;
@@ -465,6 +468,11 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm * const mm,
 		return 0;
 	}
 
+	if (min_size != size) {
+		min_size = size;
+		goto restart;
+	}
+
 	return -ENOSPC;
 }
 EXPORT_SYMBOL(drm_mm_insert_node_in_range_generic);
-- 
2.8.1



More information about the Intel-gfx-trybot mailing list