Re: [PATCH v2] drm/i915: Also perform gpu reset under execlist mode.

Chris Wilson
2015-07-07T12:00:17Z

On Tue, Jul 07, 2015 at 04:23:13AM +0800, Zhi Wang wrote:
> Hi Chris:
>
> How about this one? :)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c
> b/drivers/gpu/drm/i915/i915_dma.c
> index c5349fa..013039e 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1134,6 +1134,21 @@ int i915_driver_unload(struct drm_device *dev)
>
> i915_global_gtt_cleanup(dev);
>
> + /*
> + * The only known way to stop the gpu from accessing the hw
> context in
> + * graphics memory space is to reset it. Do this as the very last
> + * operation to avoid confusing other code, leading to
> spurious errors.
> + *
> + * Besides, we also need to restore HW workload submission mode back
> + * to default mode when shutdown i915.
> + *
> + * It makes i915 module loading/unloading be able to switch between
> + * different workload submission mode on gen8+. And
> according to B-spec,
> + * the only way to reset HW workload submission mode to
> default mod is GPU reset.
> + */
> + if (INTEL_INFO(dev)->gen >= 5)
> + intel_gpu_reset(dev);
> +
> intel_uncore_fini(dev);
> if (dev_priv->regs != NULL)
> pci_iounmap(dev->pdev, dev_priv->regs);
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c
> b/drivers/gpu/drm/i915/i915_gem_context.c
> index a7e58a8..376ee6b 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -373,11 +373,6 @@ void i915_gem_context_fini(struct drm_device *dev)
> int i;
>
> if (dctx->legacy_hw_ctx.rcs_state) {
> - /* The only known way to stop the gpu from accessing
> the hw context is
> - * to reset it. Do this as the very last operation
> to avoid confusing
> - * other code, leading to spurious errors. */
> - intel_gpu_reset(dev);
> -
> /* When default context is created and switched to,
> base object refcount
> * will be 2 (+1 from object creation and +1 from
> do_switch()).
> * i915_gem_context_fini() will be called after
> gpu_idle() has switched

I'd be happy to r-b that. Having a verbose comment explaining why we put
the shotgun to our head is definitely required, thanks.
-Chris

--
Chris Wilson, Intel Open Source Technology Centre