drm/i915/gt: Stop cross-polluting PIN_GLOBAL with PIN_USER with no-ppgtt
In order to keep userptr distinct from ggtt mmaps in the eyes of lockdep, we need to avoid marking those userptr vma as PIN_GLOBAL. (So long as we comply with only using them as local PIN_USER!) References: https://gitlab.freedesktop.org/drm/intel/-/issues/1880 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200525075347.582-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
ea97c4ca54
commit
bf0840cdb3
1 changed files with 3 additions and 8 deletions
|
@ -424,22 +424,17 @@ static int ggtt_bind_vma(struct i915_vma *vma,
|
||||||
struct drm_i915_gem_object *obj = vma->obj;
|
struct drm_i915_gem_object *obj = vma->obj;
|
||||||
u32 pte_flags;
|
u32 pte_flags;
|
||||||
|
|
||||||
|
if (i915_vma_is_bound(vma, ~flags & I915_VMA_BIND_MASK))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* Applicable to VLV (gen8+ do not support RO in the GGTT) */
|
/* Applicable to VLV (gen8+ do not support RO in the GGTT) */
|
||||||
pte_flags = 0;
|
pte_flags = 0;
|
||||||
if (i915_gem_object_is_readonly(obj))
|
if (i915_gem_object_is_readonly(obj))
|
||||||
pte_flags |= PTE_READ_ONLY;
|
pte_flags |= PTE_READ_ONLY;
|
||||||
|
|
||||||
vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags);
|
vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags);
|
||||||
|
|
||||||
vma->page_sizes.gtt = I915_GTT_PAGE_SIZE;
|
vma->page_sizes.gtt = I915_GTT_PAGE_SIZE;
|
||||||
|
|
||||||
/*
|
|
||||||
* Without aliasing PPGTT there's no difference between
|
|
||||||
* GLOBAL/LOCAL_BIND, it's all the same ptes. Hence unconditionally
|
|
||||||
* upgrade to both bound if we bind either to avoid double-binding.
|
|
||||||
*/
|
|
||||||
atomic_or(I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND, &vma->flags);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue