summaryrefslogtreecommitdiff
path: root/libre/linux-libre/drm-fix-track-free-areas-3.7.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/linux-libre/drm-fix-track-free-areas-3.7.patch')
-rw-r--r--libre/linux-libre/drm-fix-track-free-areas-3.7.patch153
1 files changed, 0 insertions, 153 deletions
diff --git a/libre/linux-libre/drm-fix-track-free-areas-3.7.patch b/libre/linux-libre/drm-fix-track-free-areas-3.7.patch
deleted file mode 100644
index 6d00c6d3e..000000000
--- a/libre/linux-libre/drm-fix-track-free-areas-3.7.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-From 9ff0ab9881bd47f7d8a95c07a2fa61f594a91d0a Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sun, 16 Dec 2012 16:15:00 +0000
-Subject: [PATCH] drm: Only evict the blocks required to create the requested
- hole
-
-Avoid clobbering adjacent blocks if they happen to expire earlier and
-amalgamate together to form the requested hole.
-
-In passing this fixes a regression from
-commit ea7b1dd44867e9cd6bac67e7c9fc3f128b5b255c
-Author: Daniel Vetter <daniel.vetter@ffwll.ch>
-Date: Fri Feb 18 17:59:12 2011 +0100
-
- drm: mm: track free areas implicitly
-
-which swaps the end address for size (with a potential overflow) and
-effectively causes the eviction code to clobber almost all earlier
-buffers above the evictee.
-
-v2: Check the original hole not the adjusted as the coloring may confuse
-us when later searching for the overlapping nodes. Also make sure that
-we do apply the range restriction and color adjustment in the same
-order for both scanning, searching and insertion.
-
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
----
- drivers/gpu/drm/drm_mm.c | 45 +++++++++++++++++----------------------------
- include/drm/drm_mm.h | 2 +-
- 2 files changed, 18 insertions(+), 29 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
-index 0761a03..665553c 100644
---- a/drivers/gpu/drm/drm_mm.c
-+++ b/drivers/gpu/drm/drm_mm.c
-@@ -213,11 +213,13 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
-
- BUG_ON(!hole_node->hole_follows || node->allocated);
-
-- if (mm->color_adjust)
-- mm->color_adjust(hole_node, color, &adj_start, &adj_end);
--
- if (adj_start < start)
- adj_start = start;
-+ if (adj_end > end)
-+ adj_end = end;
-+
-+ if (mm->color_adjust)
-+ mm->color_adjust(hole_node, color, &adj_start, &adj_end);
-
- if (alignment) {
- unsigned tmp = adj_start % alignment;
-@@ -489,7 +491,7 @@ void drm_mm_init_scan(struct drm_mm *mm,
- mm->scan_size = size;
- mm->scanned_blocks = 0;
- mm->scan_hit_start = 0;
-- mm->scan_hit_size = 0;
-+ mm->scan_hit_end = 0;
- mm->scan_check_range = 0;
- mm->prev_scanned_node = NULL;
- }
-@@ -516,7 +518,7 @@ void drm_mm_init_scan_with_range(struct drm_mm *mm,
- mm->scan_size = size;
- mm->scanned_blocks = 0;
- mm->scan_hit_start = 0;
-- mm->scan_hit_size = 0;
-+ mm->scan_hit_end = 0;
- mm->scan_start = start;
- mm->scan_end = end;
- mm->scan_check_range = 1;
-@@ -535,8 +537,7 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
- struct drm_mm *mm = node->mm;
- struct drm_mm_node *prev_node;
- unsigned long hole_start, hole_end;
-- unsigned long adj_start;
-- unsigned long adj_end;
-+ unsigned long adj_start, adj_end;
-
- mm->scanned_blocks++;
-
-@@ -553,14 +554,8 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
- node->node_list.next = &mm->prev_scanned_node->node_list;
- mm->prev_scanned_node = node;
-
-- hole_start = drm_mm_hole_node_start(prev_node);
-- hole_end = drm_mm_hole_node_end(prev_node);
--
-- adj_start = hole_start;
-- adj_end = hole_end;
--
-- if (mm->color_adjust)
-- mm->color_adjust(prev_node, mm->scan_color, &adj_start, &adj_end);
-+ adj_start = hole_start = drm_mm_hole_node_start(prev_node);
-+ adj_end = hole_end = drm_mm_hole_node_end(prev_node);
-
- if (mm->scan_check_range) {
- if (adj_start < mm->scan_start)
-@@ -569,11 +564,14 @@ int drm_mm_scan_add_block(struct drm_mm_node *node)
- adj_end = mm->scan_end;
- }
-
-+ if (mm->color_adjust)
-+ mm->color_adjust(prev_node, mm->scan_color,
-+ &adj_start, &adj_end);
-+
- if (check_free_hole(adj_start, adj_end,
- mm->scan_size, mm->scan_alignment)) {
- mm->scan_hit_start = hole_start;
-- mm->scan_hit_size = hole_end;
--
-+ mm->scan_hit_end = hole_end;
- return 1;
- }
-
-@@ -609,19 +607,10 @@ int drm_mm_scan_remove_block(struct drm_mm_node *node)
- node_list);
-
- prev_node->hole_follows = node->scanned_preceeds_hole;
-- INIT_LIST_HEAD(&node->node_list);
- list_add(&node->node_list, &prev_node->node_list);
-
-- /* Only need to check for containement because start&size for the
-- * complete resulting free block (not just the desired part) is
-- * stored. */
-- if (node->start >= mm->scan_hit_start &&
-- node->start + node->size
-- <= mm->scan_hit_start + mm->scan_hit_size) {
-- return 1;
-- }
--
-- return 0;
-+ return (drm_mm_hole_node_end(node) > mm->scan_hit_start &&
-+ node->start < mm->scan_hit_end);
- }
- EXPORT_SYMBOL(drm_mm_scan_remove_block);
-
-diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
-index 06d7f79..a1b66b7 100644
---- a/include/drm/drm_mm.h
-+++ b/include/drm/drm_mm.h
-@@ -70,7 +70,7 @@ struct drm_mm {
- unsigned long scan_color;
- unsigned long scan_size;
- unsigned long scan_hit_start;
-- unsigned scan_hit_size;
-+ unsigned long scan_hit_end;
- unsigned scanned_blocks;
- unsigned long scan_start;
- unsigned long scan_end;
---
-1.7.10.4
-