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@xxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.h | 2 -- drivers/gpu/drm/i915/i915_gem_evict.c | 6 ++++-- drivers/gpu/drm/i915/i915_vma.h | 10 +++++++++- drivers/gpu/drm/i915/i915_vma_types.h | 2 ++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 99cf861df92d..69c5a185ecff 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -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. */ diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c index 4d2d59a9942b..aef88fdb9f66 100644 --- a/drivers/gpu/drm/i915/i915_gem_evict.c +++ b/drivers/gpu/drm/i915/i915_gem_evict.c @@ -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; } } diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h index a64adc8c883b..dac953815118 100644 --- a/drivers/gpu/drm/i915/i915_vma.h +++ b/drivers/gpu/drm/i915/i915_vma.h @@ -283,10 +283,18 @@ 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 (node->color | 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); } /** diff --git a/drivers/gpu/drm/i915/i915_vma_types.h b/drivers/gpu/drm/i915/i915_vma_types.h index f5cb848b7a7e..e72a07692a64 100644 --- a/drivers/gpu/drm/i915/i915_vma_types.h +++ b/drivers/gpu/drm/i915/i915_vma_types.h @@ -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; -- 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx