mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
drm/i915/gt: Mark ring->vma as active while pinned
As we use the active state to keep the vma alive while we are reading its contents during GPU error capture, we need to mark the ring->vma as active during execution if we want to include the rinbuffer in the error state. Reported-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Fixes:b1e3177bd1("drm/i915: Coordinate i915_active with its own mutex") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200110110402.1231745-3-chris@chris-wilson.co.uk (cherry picked from commit8ccfc20a7d) Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
This commit is contained in:
parent
e2c56d8973
commit
dce54e861e
|
|
@ -148,6 +148,31 @@ static void __context_unpin_state(struct i915_vma *vma)
|
|||
__i915_vma_unpin(vma);
|
||||
}
|
||||
|
||||
static int __ring_active(struct intel_ring *ring)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = i915_active_acquire(&ring->vma->active);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = intel_ring_pin(ring);
|
||||
if (err)
|
||||
goto err_active;
|
||||
|
||||
return 0;
|
||||
|
||||
err_active:
|
||||
i915_active_release(&ring->vma->active);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __ring_retire(struct intel_ring *ring)
|
||||
{
|
||||
intel_ring_unpin(ring);
|
||||
i915_active_release(&ring->vma->active);
|
||||
}
|
||||
|
||||
__i915_active_call
|
||||
static void __intel_context_retire(struct i915_active *active)
|
||||
{
|
||||
|
|
@ -160,7 +185,7 @@ static void __intel_context_retire(struct i915_active *active)
|
|||
__context_unpin_state(ce->state);
|
||||
|
||||
intel_timeline_unpin(ce->timeline);
|
||||
intel_ring_unpin(ce->ring);
|
||||
__ring_retire(ce->ring);
|
||||
|
||||
intel_context_put(ce);
|
||||
}
|
||||
|
|
@ -172,7 +197,7 @@ static int __intel_context_active(struct i915_active *active)
|
|||
|
||||
intel_context_get(ce);
|
||||
|
||||
err = intel_ring_pin(ce->ring);
|
||||
err = __ring_active(ce->ring);
|
||||
if (err)
|
||||
goto err_put;
|
||||
|
||||
|
|
@ -192,7 +217,7 @@ static int __intel_context_active(struct i915_active *active)
|
|||
err_timeline:
|
||||
intel_timeline_unpin(ce->timeline);
|
||||
err_ring:
|
||||
intel_ring_unpin(ce->ring);
|
||||
__ring_retire(ce->ring);
|
||||
err_put:
|
||||
intel_context_put(ce);
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user