@@ -357,8 +357,6 @@ enum i915_cache_level {
I915_CACHE_WT, /* hsw:gt3e WriteThrough for scanouts */
};
-#define I915_COLOR_UNEVICTABLE (-1) /* a non-vma sharing the address space */
-
struct intel_fbc {
/* This is always the inner lock when overlapping with struct_mutex and
* it's the outer lock when overlapping with stolen_lock. */
@@ -313,11 +313,13 @@ int i915_gem_evict_for_node(struct i915_address_space *vm,
*/
if (i915_vm_has_cache_coloring(vm)) {
if (node->start + node->size == target->start) {
- if (node->color == target->color)
+ if (i915_node_color_matches(node,
+ target->color))
continue;
}
if (node->start == target->start + target->size) {
- if (node->color == target->color)
+ if (i915_node_color_matches(node,
+ target->color))
continue;
}
}
@@ -283,10 +283,17 @@ static inline bool i915_vma_is_bound(const struct i915_vma *vma,
return atomic_read(&vma->flags) & where;
}
+static inline bool i915_node_color_matches(const struct drm_mm_node *node,
+ unsigned long color)
+{
+ return color == I915_COLOR_UNEVICTABLE || node->color == color;
+}
+
static inline bool i915_node_color_differs(const struct drm_mm_node *node,
unsigned long color)
{
- return drm_mm_node_allocated(node) && node->color != color;
+ return drm_mm_node_allocated(node) &&
+ !i915_node_color_matches(node, color);
}
/**
@@ -95,6 +95,8 @@ enum i915_cache_level;
*
*/
+#define I915_COLOR_UNEVICTABLE (-1) /* a non-vma sharing the address space */
+
struct intel_remapped_plane_info {
/* in gtt pages */
unsigned int width, height, stride, offset;
Assume that unevictable nodes are not in the GTT and so we can ignore page boundary concerns, and so allow regular nodes to abutt against irregular unevictable nodes. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/i915_drv.h | 2 -- drivers/gpu/drm/i915/i915_gem_evict.c | 6 ++++-- drivers/gpu/drm/i915/i915_vma.h | 9 ++++++++- drivers/gpu/drm/i915/i915_vma_types.h | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-)