Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > If we want to reuse a fence that is in active use by the GPU, we have to > wait an uncertain amount of time, but if we reuse an inactive fence, we > can change it right away. Loop through the list of available fences > twice, ignoring any active fences on the first pass. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 22 ++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c > index 7fb36b12fe7a..a357bb431815 100644 > --- a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c > +++ b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c > @@ -320,13 +320,31 @@ void i915_vma_revoke_fence(struct i915_vma *vma) > fence_write(fence); > } > > +static bool fence_is_active(const struct i915_fence_reg *fence) > +{ > + return fence->vma && i915_vma_is_active(fence->vma); > +} > + > static struct i915_fence_reg *fence_find(struct i915_ggtt *ggtt) > { > - struct i915_fence_reg *fence; > + struct i915_fence_reg *active = NULL; > + struct i915_fence_reg *fence, *fn; > > - list_for_each_entry(fence, &ggtt->fence_list, link) { > + list_for_each_entry_safe(fence, fn, &ggtt->fence_list, link) { > GEM_BUG_ON(fence->vma && fence->vma->fence != fence); > > + if (fence == active) /* now seen this fence twice */ > + active = ERR_PTR(-EAGAIN); > + > + /* Prefer idle fences so we do not have to wait on the GPU */ > + if (active != ERR_PTR(-EAGAIN) && fence_is_active(fence)) { > + if (!active) > + active = fence; > + > + list_move_tail(&fence->link, &ggtt->fence_list); > + continue; > + } > + > if (atomic_read(&fence->pin_count)) > continue; > > -- > 2.20.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx