[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