All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 4/7] drm/i915: Only track live rings for retiring
Date: Fri, 27 Apr 2018 13:52:21 +0100	[thread overview]
Message-ID: <45eefbb6-843a-9a0e-4a41-02b42f53c28e@linux.intel.com> (raw)
In-Reply-To: <20180426174932.23127-4-chris@chris-wilson.co.uk>


On 26/04/2018 18:49, Chris Wilson wrote:
> We don't need to track every ring for its lifetime as they are managed
> by the contexts/engines. What we do want to track are the live rings so
> that we can sporadically clean up requests if userspace falls behind. We
> can simply restrict the gt->rings list to being only gt->live_rings.
> 
> v2: s/live/active/ for consistency with gt.active_requests
> 
> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.h                  |  3 ++-
>   drivers/gpu/drm/i915/i915_gem.c                  |  6 ++++--
>   drivers/gpu/drm/i915/i915_request.c              | 10 ++++++++--
>   drivers/gpu/drm/i915/intel_ringbuffer.c          |  4 ----
>   drivers/gpu/drm/i915/intel_ringbuffer.h          |  2 +-
>   drivers/gpu/drm/i915/selftests/mock_engine.c     |  4 ----
>   drivers/gpu/drm/i915/selftests/mock_gem_device.c |  5 +++--
>   7 files changed, 18 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1837c01d44d0..54351cace362 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2060,7 +2060,8 @@ struct drm_i915_private {
>   
>   		struct i915_gem_timeline global_timeline;
>   		struct list_head timelines;
> -		struct list_head rings;
> +
> +		struct list_head active_rings;
>   		u32 active_requests;
>   		u32 request_serial;
>   
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index f0644d1fbd75..fa1d94a4eb5f 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -141,6 +141,7 @@ static u32 __i915_gem_park(struct drm_i915_private *i915)
>   {
>   	lockdep_assert_held(&i915->drm.struct_mutex);
>   	GEM_BUG_ON(i915->gt.active_requests);
> +	GEM_BUG_ON(!list_empty(&i915->gt.active_rings));
>   
>   	if (!i915->gt.awake)
>   		return I915_EPOCH_INVALID;
> @@ -5599,9 +5600,10 @@ int i915_gem_init_early(struct drm_i915_private *dev_priv)
>   	if (!dev_priv->priorities)
>   		goto err_dependencies;
>   
> -	mutex_lock(&dev_priv->drm.struct_mutex);
> -	INIT_LIST_HEAD(&dev_priv->gt.rings);
>   	INIT_LIST_HEAD(&dev_priv->gt.timelines);
> +	INIT_LIST_HEAD(&dev_priv->gt.active_rings);
> +
> +	mutex_lock(&dev_priv->drm.struct_mutex);
>   	err = i915_gem_timeline_init__global(dev_priv);
>   	mutex_unlock(&dev_priv->drm.struct_mutex);
>   	if (err)
> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
> index e6535255d445..c8fc4b323e62 100644
> --- a/drivers/gpu/drm/i915/i915_request.c
> +++ b/drivers/gpu/drm/i915/i915_request.c
> @@ -322,6 +322,7 @@ static void advance_ring(struct i915_request *request)
>   		 * noops - they are safe to be replayed on a reset.
>   		 */
>   		tail = READ_ONCE(request->tail);
> +		list_del(&ring->active_link);
>   	} else {
>   		tail = request->postfix;
>   	}
> @@ -1096,6 +1097,8 @@ void __i915_request_add(struct i915_request *request, bool flush_caches)
>   	i915_gem_active_set(&timeline->last_request, request);
>   
>   	list_add_tail(&request->ring_link, &ring->request_list);
> +	if (list_is_first(&request->ring_link, &ring->request_list))
> +		list_add(&ring->active_link, &request->i915->gt.active_rings);
>   	request->emitted_jiffies = jiffies;
>   
>   	/*
> @@ -1418,14 +1421,17 @@ static void ring_retire_requests(struct intel_ring *ring)
>   
>   void i915_retire_requests(struct drm_i915_private *i915)
>   {
> -	struct intel_ring *ring, *next;
> +	struct intel_ring *ring, *tmp;
>   
>   	lockdep_assert_held(&i915->drm.struct_mutex);
>   
>   	if (!i915->gt.active_requests)
>   		return;
>   
> -	list_for_each_entry_safe(ring, next, &i915->gt.rings, link)
> +	/* An outstanding request must be on a still active ring somewhere */
> +	GEM_BUG_ON(list_empty(&i915->gt.active_rings));
> +
> +	list_for_each_entry_safe(ring, tmp, &i915->gt.active_rings, active_link)
>   		ring_retire_requests(ring);
>   }
>   
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index ae8958007df5..007449cfa22b 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1150,8 +1150,6 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size)
>   	}
>   	ring->vma = vma;
>   
> -	list_add(&ring->link, &engine->i915->gt.rings);
> -
>   	return ring;
>   }
>   
> @@ -1163,8 +1161,6 @@ intel_ring_free(struct intel_ring *ring)
>   	i915_vma_close(ring->vma);
>   	__i915_gem_object_release_unless_active(obj);
>   
> -	list_del(&ring->link);
> -
>   	kfree(ring);
>   }
>   
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index deb80d01e0bd..fd679cec9ac6 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -130,7 +130,7 @@ struct intel_ring {
>   	void *vaddr;
>   
>   	struct list_head request_list;
> -	struct list_head link;
> +	struct list_head active_link;
>   
>   	u32 head;
>   	u32 tail;
> diff --git a/drivers/gpu/drm/i915/selftests/mock_engine.c b/drivers/gpu/drm/i915/selftests/mock_engine.c
> index 42967fc09eb0..629870aeb547 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_engine.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_engine.c
> @@ -140,15 +140,11 @@ static struct intel_ring *mock_ring(struct intel_engine_cs *engine)
>   	INIT_LIST_HEAD(&ring->request_list);
>   	intel_ring_update_space(ring);
>   
> -	list_add(&ring->link, &engine->i915->gt.rings);
> -
>   	return ring;
>   }
>   
>   static void mock_ring_free(struct intel_ring *ring)
>   {
> -	list_del(&ring->link);
> -
>   	kfree(ring);
>   }
>   
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index ac4bacf8b5b9..f22a2b35a283 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -224,9 +224,10 @@ struct drm_i915_private *mock_gem_device(void)
>   	if (!i915->priorities)
>   		goto err_dependencies;
>   
> -	mutex_lock(&i915->drm.struct_mutex);
> -	INIT_LIST_HEAD(&i915->gt.rings);
>   	INIT_LIST_HEAD(&i915->gt.timelines);
> +	INIT_LIST_HEAD(&i915->gt.active_rings);
> +
> +	mutex_lock(&i915->drm.struct_mutex);
>   	err = i915_gem_timeline_init__global(i915);
>   	if (err) {
>   		mutex_unlock(&i915->drm.struct_mutex);
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2018-04-27 12:52 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-26 17:49 [PATCH 1/7] drm/i915: Stop tracking timeline->inflight_seqnos Chris Wilson
2018-04-26 17:49 ` [PATCH 2/7] drm/i915: Wrap engine->context_pin() and engine->context_unpin() Chris Wilson
2018-04-27 12:35   ` Tvrtko Ursulin
2018-04-26 17:49 ` [PATCH 3/7] drm/i915: Retire requests along rings Chris Wilson
2018-04-27 12:50   ` Tvrtko Ursulin
2018-04-27 13:00     ` Chris Wilson
2018-04-26 17:49 ` [PATCH 4/7] drm/i915: Only track live rings for retiring Chris Wilson
2018-04-27 12:52   ` Tvrtko Ursulin [this message]
2018-04-26 17:49 ` [PATCH 5/7] drm/i915: Move timeline from GTT to ring Chris Wilson
2018-04-27 13:01   ` Tvrtko Ursulin
2018-04-26 17:49 ` [PATCH 6/7] drm/i915: Split i915_gem_timeline into individual timelines Chris Wilson
2018-04-27 14:37   ` Tvrtko Ursulin
2018-04-27 15:00     ` Chris Wilson
2018-04-26 17:49 ` [PATCH 7/7] drm/i915: Lazily unbind vma on close Chris Wilson
2018-04-27 15:38   ` Tvrtko Ursulin
2018-04-27 15:47     ` Chris Wilson
2018-04-27  8:52 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/7] drm/i915: Stop tracking timeline->inflight_seqnos Patchwork
2018-04-27  8:55 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-04-27  9:07 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-04-27 10:34 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2018-04-27 10:37 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-04-27 10:49 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-04-27 12:20 ` [PATCH 1/7] " Tvrtko Ursulin
  -- strict thread matches above, loose matches on Subject: below --
2018-04-25 10:52 [PATCH 1/7] drm/i915/execlists: Skip lite restore on the currently executing request Chris Wilson
2018-04-25 10:52 ` [PATCH 4/7] drm/i915: Only track live rings for retiring Chris Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45eefbb6-843a-9a0e-4a41-02b42f53c28e@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.