All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2] drm/i915: Stop the machine as we install the	wedged submit_request handler
Date: Tue, 22 Nov 2016 16:07:28 +0200	[thread overview]
Message-ID: <87h96zvc9r.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20161121124003.481-1-chris@chris-wilson.co.uk>

Chris Wilson <chris@chris-wilson.co.uk> writes:

> In order to prevent a race between the old callback submitting an
> incomplete request and i915_gem_set_wedged() installing its nop handler,
> we must ensure that the swap occurs when the machine is idle
> (stop_machine).
>
> v2: move context lost from out of BKL.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>

> ---
>  drivers/gpu/drm/i915/i915_gem.c | 26 +++++++++++++++++++++-----
>  1 file changed, 21 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index d0dcaf35b429..e80ad6906fb4 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -38,6 +38,7 @@
>  #include <linux/reservation.h>
>  #include <linux/shmem_fs.h>
>  #include <linux/slab.h>
> +#include <linux/stop_machine.h>
>  #include <linux/swap.h>
>  #include <linux/pci.h>
>  #include <linux/dma-buf.h>
> @@ -2770,6 +2771,12 @@ static void nop_submit_request(struct drm_i915_gem_request *request)
>  
>  static void i915_gem_cleanup_engine(struct intel_engine_cs *engine)
>  {
> +	/* We need to be sure that no thread is running the old callback as
> +	 * we install the nop handler (otherwise we would submit a request
> +	 * to hardware that will never complete). In order to prevent this
> +	 * race, we wait until the machine is idle before making the swap
> +	 * (using stop_machine()).
> +	 */
>  	engine->submit_request = nop_submit_request;
>  
>  	/* Mark all pending requests as complete so that any concurrent
> @@ -2800,20 +2807,29 @@ static void i915_gem_cleanup_engine(struct intel_engine_cs *engine)
>  	}
>  }
>  
> -void i915_gem_set_wedged(struct drm_i915_private *dev_priv)
> +static int __i915_gem_set_wedged_BKL(void *data)
>  {
> +	struct drm_i915_private *i915 = data;
>  	struct intel_engine_cs *engine;
>  	enum intel_engine_id id;
>  
> +	for_each_engine(engine, i915, id)
> +		i915_gem_cleanup_engine(engine);
> +
> +	return 0;
> +}
> +
> +void i915_gem_set_wedged(struct drm_i915_private *dev_priv)
> +{
>  	lockdep_assert_held(&dev_priv->drm.struct_mutex);
>  	set_bit(I915_WEDGED, &dev_priv->gpu_error.flags);
>  
> -	i915_gem_context_lost(dev_priv);
> -	for_each_engine(engine, dev_priv, id)
> -		i915_gem_cleanup_engine(engine);
> -	mod_delayed_work(dev_priv->wq, &dev_priv->gt.idle_work, 0);
> +	stop_machine(__i915_gem_set_wedged_BKL, dev_priv, NULL);
>  
> +	i915_gem_context_lost(dev_priv);
>  	i915_gem_retire_requests(dev_priv);
> +
> +	mod_delayed_work(dev_priv->wq, &dev_priv->gt.idle_work, 0);
>  }
>  
>  static void
> -- 
> 2.10.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-11-22 14:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-18  9:37 [PATCH 1/3] drm/i915: Disable hangcheck when wedged Chris Wilson
2016-11-18  9:37 ` [PATCH 2/3] drm/i915: Complete requests in nop_submit_request Chris Wilson
2016-11-18 12:56   ` Tvrtko Ursulin
2016-11-18 13:03     ` Mika Kuoppala
2016-11-18 13:33       ` Chris Wilson
2016-11-18 14:22         ` Tvrtko Ursulin
2016-11-18  9:37 ` [PATCH 3/3] drm/i915: Stop the machine as we install the wedged submit_request handler Chris Wilson
2016-11-18 14:38   ` Chris Wilson
2016-11-21 12:40   ` [PATCH v2] " Chris Wilson
2016-11-22 14:07     ` Mika Kuoppala [this message]
2016-11-18 10:16 ` ✓ Fi.CI.BAT: success for series starting with [1/3] drm/i915: Disable hangcheck when wedged Patchwork
2016-11-18 11:40 ` [PATCH 1/3] " Mika Kuoppala
2016-11-21 16:45 ` ✗ Fi.CI.BAT: warning for series starting with [1/3] drm/i915: Disable hangcheck when wedged (rev2) Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2016-11-21 12:17 [PATCH v2] drm/i915: Stop the machine as we install the wedged submit_request handler 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=87h96zvc9r.fsf@gaia.fi.intel.com \
    --to=mika.kuoppala@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.