mirror of https://gitee.com/openkylin/linux.git
drm/i915: Don't drop pinned fences
Userspace can currently provoke this when e.g. trying to use a pinned scanout as a cursor or overlay target. Later on that might lead to some fun fence pin count mayhem. Spurred by Ville's report that something goes wrong here and originally I've thought that this might slip through the pwrite gtt fastpath. But that one checks of obj tiling, so should be ok. But one thing that _does_ blow up is the vma unbinding with more than one address space. The next patch will fix this. v2: Use a WARN_ON - Chris pointed out that we already catch all cases so userspace can't provoke this like I've originally feared. While reviewing relevant code I've noticed a pile of DRM_ERROR in the overlay&cursor code which are all triggerable by userspace. Tune them down while at it. v3: Split out the DRM_ERROR->DRM_DEBUG_KMS change into a separate patch, as requested by Chris. Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
2206e6a11b
commit
aff10b30a1
|
@ -3040,6 +3040,9 @@ i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
|
||||||
|
|
||||||
fence = &dev_priv->fence_regs[obj->fence_reg];
|
fence = &dev_priv->fence_regs[obj->fence_reg];
|
||||||
|
|
||||||
|
if (WARN_ON(fence->pin_count))
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
i915_gem_object_fence_lost(obj);
|
i915_gem_object_fence_lost(obj);
|
||||||
i915_gem_object_update_fence(obj, fence, false);
|
i915_gem_object_update_fence(obj, fence, false);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue