All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Michel Thierry <michel.thierry@intel.com>
Cc: "intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"# v4 . 11+" <stable@vger.kernel.org>
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Guard against i915_ggtt_disable_guc() being invoked unconditionally
Date: Thu, 1 Jun 2017 07:03:35 +0100	[thread overview]
Message-ID: <20170601060335.GC23936@nuc-i3427.alporthouse.com> (raw)
In-Reply-To: <2a537571-cb16-2ffe-36b1-69b21ccac98b@intel.com>

On Wed, May 31, 2017 at 06:01:10PM -0700, Michel Thierry wrote:
> On 5/31/2017 12:05 PM, Chris Wilson wrote:
> >Commit 7c3f86b6dc51 ("drm/i915: Invalidate the guc ggtt TLB upon
> >insertion") added the restoration of the invalidation routine after the
> >GuC was disabled, but missed that the GuC was unconditionally disabled
> >when not used. This then overwrites the invalidate routine for the older
> >chipsets, causing havoc and breaking resume as the most obvious victim.
> >
> >We place the guard inside i915_ggtt_disable_guc() to be backport
> >friendly (the bug was introduced into v4.11) but it would be preferred
> >to be in more control over when this was guard (i.e. do not try and
> >teardown the data structures before we have enabled them). That should
> >be true with the reorganisation of the guc loaders.
> >
> >Reported-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> >Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> >Fixes: 7c3f86b6dc51 ("drm/i915: Invalidate the guc ggtt TLB upon insertion")
> >Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> >Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> >Cc: Oscar Mateo <oscar.mateo@intel.com>
> >Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> >Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> >Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
> >Cc: <stable@vger.kernel.org> # v4.11+
> >---
> > drivers/gpu/drm/i915/i915_gem_gtt.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> >diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> >index 4f581adf2fcf..6eb83684b97b 100644
> >--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> >+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> >@@ -3282,7 +3282,8 @@ void i915_ggtt_enable_guc(struct drm_i915_private *i915)
> >
> > void i915_ggtt_disable_guc(struct drm_i915_private *i915)
> > {
> >-       i915->ggtt.invalidate = gen6_ggtt_invalidate;
> >+       if (i915->ggtt.invalidate == guc_ggtt_invalidate)
> >+               i915->ggtt.invalidate = gen6_ggtt_invalidate;
> > }
> >
> > void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
> 
> Reviewed-by: Michel Thierry <michel.thierry@intel.com>
> 
> btw the bug can only happen in 4.11; in 4.12+ this safeguard is
> already redundant since enable_guc_loading should be zero and
> ggtt_disable_guc is never called.

That's what I wanted to hear, thanks! After landing this we can then
replace the if() with a GEM_BUG_ON.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

WARNING: multiple messages have this Message-ID (diff)
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Michel Thierry <michel.thierry@intel.com>
Cc: "intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"# v4 . 11+" <stable@vger.kernel.org>
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Guard against i915_ggtt_disable_guc() being invoked unconditionally
Date: Thu, 1 Jun 2017 07:03:35 +0100	[thread overview]
Message-ID: <20170601060335.GC23936@nuc-i3427.alporthouse.com> (raw)
In-Reply-To: <2a537571-cb16-2ffe-36b1-69b21ccac98b@intel.com>

On Wed, May 31, 2017 at 06:01:10PM -0700, Michel Thierry wrote:
> On 5/31/2017 12:05 PM, Chris Wilson wrote:
> >Commit 7c3f86b6dc51 ("drm/i915: Invalidate the guc ggtt TLB upon
> >insertion") added the restoration of the invalidation routine after the
> >GuC was disabled, but missed that the GuC was unconditionally disabled
> >when not used. This then overwrites the invalidate routine for the older
> >chipsets, causing havoc and breaking resume as the most obvious victim.
> >
> >We place the guard inside i915_ggtt_disable_guc() to be backport
> >friendly (the bug was introduced into v4.11) but it would be preferred
> >to be in more control over when this was guard (i.e. do not try and
> >teardown the data structures before we have enabled them). That should
> >be true with the reorganisation of the guc loaders.
> >
> >Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> >Fixes: 7c3f86b6dc51 ("drm/i915: Invalidate the guc ggtt TLB upon insertion")
> >Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> >Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> >Cc: Oscar Mateo <oscar.mateo@intel.com>
> >Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> >Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> >Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
> >Cc: <stable@vger.kernel.org> # v4.11+
> >---
> > drivers/gpu/drm/i915/i915_gem_gtt.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> >diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> >index 4f581adf2fcf..6eb83684b97b 100644
> >--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> >+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> >@@ -3282,7 +3282,8 @@ void i915_ggtt_enable_guc(struct drm_i915_private *i915)
> >
> > void i915_ggtt_disable_guc(struct drm_i915_private *i915)
> > {
> >-       i915->ggtt.invalidate = gen6_ggtt_invalidate;
> >+       if (i915->ggtt.invalidate == guc_ggtt_invalidate)
> >+               i915->ggtt.invalidate = gen6_ggtt_invalidate;
> > }
> >
> > void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
> 
> Reviewed-by: Michel Thierry <michel.thierry@intel.com>
> 
> btw the bug can only happen in 4.11; in 4.12+ this safeguard is
> already redundant since enable_guc_loading should be zero and
> ggtt_disable_guc is never called.

That's what I wanted to hear, thanks! After landing this we can then
replace the if() with a GEM_BUG_ON.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

  reply	other threads:[~2017-06-01  6:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-31 19:05 [PATCH] drm/i915: Guard against i915_ggtt_disable_guc() being invoked unconditionally Chris Wilson
2017-05-31 19:26 ` ✓ Fi.CI.BAT: success for " Patchwork
2017-06-01  1:01 ` [Intel-gfx] [PATCH] " Michel Thierry
2017-06-01  6:03   ` Chris Wilson [this message]
2017-06-01  6:03     ` Chris Wilson
2017-06-01  8:56   ` Chris Wilson
2017-06-01  8:56     ` Chris Wilson
2017-06-01 10:21 ` Joonas Lahtinen
2017-06-01 10:21   ` Joonas Lahtinen

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=20170601060335.GC23936@nuc-i3427.alporthouse.com \
    --to=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=michel.thierry@intel.com \
    --cc=stable@vger.kernel.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.