@@ -2513,7 +2513,7 @@ i915_gem_obj_ggtt_pin(struct drm_i915_gem_object *obj,
uint32_t alignment,
unsigned flags)
{
- return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment, flags | PIN_GLOBAL_ALIASED);
+ return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment, flags | PIN_GLOBAL);
}
static inline int
@@ -3588,8 +3588,10 @@ search_free:
WARN_ON(flags & PIN_MAPPABLE && !obj->map_and_fenceable);
- if (flags & PIN_GLOBAL_ALIASED)
- vma_bind_flags = GLOBAL_BIND | ALIASING_BIND;
+ if (flags & PIN_ALIASING)
+ vma_bind_flags = ALIASING_BIND;
+ if (flags & PIN_GLOBAL)
+ vma_bind_flags = GLOBAL_BIND;
trace_i915_vma_bind(vma, flags);
i915_gem_vma_bind(vma, obj->cache_level, vma_bind_flags);
@@ -552,10 +552,11 @@ i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
struct drm_i915_gem_exec_object2 *entry = vma->exec_entry;
bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
bool need_fence;
- uint64_t flags;
+ uint64_t flags = 0;
int ret;
- flags = 0;
+ if (i915_is_ggtt(vma->vm))
+ flags = PIN_ALIASING;
need_fence =
has_fenced_gpu_access &&
@@ -1603,6 +1603,9 @@ static void ggtt_bind_vma(struct i915_vma *vma,
}
}
+ if (!(flags & ALIASING_BIND))
+ return;
+
if (dev_priv->mm.aliasing_ppgtt &&
(!obj->has_aliasing_ppgtt_mapping ||
(cache_level != obj->cache_level))) {
This patch finishes off actually separating the aliasing and global finds. Prior to this, all global binds would be aliased. Now if aliasing binds are required, they must be explicitly asked for. So far, we have no users of this outside of execbuf - but Mika has already submitted a patch requiring just this. A nice benefit of this is we should no longer be able to clobber GTT only objects from the aliasing PPGTT. v2: Only add aliasing binds for the GGTT/Aliasing PPGTT at execbuf v3: Rebase resolution with changed size of flags Signed-off-by: Ben Widawsky <ben@bwidawsk.net> --- drivers/gpu/drm/i915/i915_drv.h | 2 +- drivers/gpu/drm/i915/i915_gem.c | 6 ++++-- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 5 +++-- drivers/gpu/drm/i915/i915_gem_gtt.c | 3 +++ 4 files changed, 11 insertions(+), 5 deletions(-)