[PATCH 26/31] drm: Fix application of color vs range restriction when scanning drm_mm
Chris Wilson
chris at chris-wilson.co.uk
Mon Dec 12 08:16:43 UTC 2016
The range restriction should be applied after the color adjustment, or
else we may inadvertently apply the color adjustment to the restricted
hole (and not against its neighbours).
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/drm_mm.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 023cb95ba067..b0078d930482 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -778,6 +778,7 @@ bool drm_mm_scan_add_block(struct drm_mm_scan *scan,
struct drm_mm *mm = scan->mm;
struct drm_mm_node *hole;
u64 hole_start, hole_end;
+ u64 col_start, col_end;
u64 adj_start, adj_end;
MM_BUG_ON(!node->allocated);
@@ -793,14 +794,16 @@ bool drm_mm_scan_add_block(struct drm_mm_scan *scan,
node->node_list.next = &scan->prev_scanned_node->node_list;
scan->prev_scanned_node = node;
- hole_start = drm_mm_hole_node_start(hole);
- hole_end = drm_mm_hole_node_end(hole);
-
- adj_start = max(hole_start, scan->range_start);
- adj_end = min(hole_end, scan->range_end);
+ hole_start = __drm_mm_hole_node_start(hole);
+ hole_end = __drm_mm_hole_node_end(hole);
+ col_start = hole_start;
+ col_end = hole_end;
if (mm->color_adjust)
- mm->color_adjust(hole, scan->color, &adj_start, &adj_end);
+ mm->color_adjust(hole, scan->color, &col_start, &col_end);
+
+ adj_start = max(col_start, scan->range_start);
+ adj_end = min(col_end, scan->range_end);
if (check_free_hole(adj_start, adj_end,
scan->size, scan->alignment)) {
--
2.11.0
More information about the Intel-gfx-trybot
mailing list