* [PATCH 3/6] drm/i915: Perform GGTT restore much earlier during resume [not found] <20190909110011.8958-1-chris@chris-wilson.co.uk> @ 2019-09-09 11:00 ` Chris Wilson 2019-09-10 10:39 ` Mika Kuoppala 0 siblings, 1 reply; 2+ messages in thread From: Chris Wilson @ 2019-09-09 11:00 UTC (permalink / raw) To: intel-gfx Cc: Chris Wilson, Mika Kuoppala, Martin Peres, Joonas Lahtinen, stable As soon as we re-enable the various functions within the HW, they may go off and read data via a GGTT offset. Hence, if we have not yet restored the GGTT PTE before then, they may read and even *write* random locations in memory. Detected by DMAR faults during resume. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Cc: Martin Peres <martin.peres@linux.intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: stable@vger.kernel.org --- drivers/gpu/drm/i915/gem/i915_gem_pm.c | 3 --- drivers/gpu/drm/i915/i915_drv.c | 5 +++++ drivers/gpu/drm/i915/selftests/i915_gem.c | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c index b3993d24b83d..9b1129aaacfe 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c @@ -242,9 +242,6 @@ void i915_gem_resume(struct drm_i915_private *i915) mutex_lock(&i915->drm.struct_mutex); intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL); - i915_gem_restore_gtt_mappings(i915); - i915_gem_restore_fences(i915); - if (i915_gem_init_hw(i915)) goto err_wedged; diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 7b2c81a8bbaa..1af4eba968c0 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -1877,6 +1877,11 @@ static int i915_drm_resume(struct drm_device *dev) if (ret) DRM_ERROR("failed to re-enable GGTT\n"); + mutex_lock(&dev_priv->drm.struct_mutex); + i915_gem_restore_gtt_mappings(dev_priv); + i915_gem_restore_fences(dev_priv); + mutex_unlock(&dev_priv->drm.struct_mutex); + intel_csr_ucode_resume(dev_priv); i915_restore_state(dev_priv); diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c index bb6dd54a6ff3..37593831b539 100644 --- a/drivers/gpu/drm/i915/selftests/i915_gem.c +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c @@ -118,6 +118,12 @@ static void pm_resume(struct drm_i915_private *i915) with_intel_runtime_pm(&i915->runtime_pm, wakeref) { intel_gt_sanitize(&i915->gt, false); i915_gem_sanitize(i915); + + mutex_lock(&i915->drm.struct_mutex); + i915_gem_restore_gtt_mappings(i915); + i915_gem_restore_fences(i915); + mutex_unlock(&i915->drm.struct_mutex); + i915_gem_resume(i915); } } -- 2.23.0 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 3/6] drm/i915: Perform GGTT restore much earlier during resume 2019-09-09 11:00 ` [PATCH 3/6] drm/i915: Perform GGTT restore much earlier during resume Chris Wilson @ 2019-09-10 10:39 ` Mika Kuoppala 0 siblings, 0 replies; 2+ messages in thread From: Mika Kuoppala @ 2019-09-10 10:39 UTC (permalink / raw) To: Chris Wilson, intel-gfx Cc: Chris Wilson, Martin Peres, Joonas Lahtinen, stable Chris Wilson <chris@chris-wilson.co.uk> writes: > As soon as we re-enable the various functions within the HW, they may go > off and read data via a GGTT offset. Hence, if we have not yet restored > the GGTT PTE before then, they may read and even *write* random locations > in memory. > > Detected by DMAR faults during resume. > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> > Cc: Martin Peres <martin.peres@linux.intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: stable@vger.kernel.org Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_pm.c | 3 --- > drivers/gpu/drm/i915/i915_drv.c | 5 +++++ > drivers/gpu/drm/i915/selftests/i915_gem.c | 6 ++++++ > 3 files changed, 11 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c > index b3993d24b83d..9b1129aaacfe 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c > @@ -242,9 +242,6 @@ void i915_gem_resume(struct drm_i915_private *i915) > mutex_lock(&i915->drm.struct_mutex); > intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL); > > - i915_gem_restore_gtt_mappings(i915); > - i915_gem_restore_fences(i915); > - > if (i915_gem_init_hw(i915)) > goto err_wedged; > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 7b2c81a8bbaa..1af4eba968c0 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -1877,6 +1877,11 @@ static int i915_drm_resume(struct drm_device *dev) > if (ret) > DRM_ERROR("failed to re-enable GGTT\n"); > > + mutex_lock(&dev_priv->drm.struct_mutex); > + i915_gem_restore_gtt_mappings(dev_priv); > + i915_gem_restore_fences(dev_priv); > + mutex_unlock(&dev_priv->drm.struct_mutex); > + > intel_csr_ucode_resume(dev_priv); > > i915_restore_state(dev_priv); > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c > index bb6dd54a6ff3..37593831b539 100644 > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c > @@ -118,6 +118,12 @@ static void pm_resume(struct drm_i915_private *i915) > with_intel_runtime_pm(&i915->runtime_pm, wakeref) { > intel_gt_sanitize(&i915->gt, false); > i915_gem_sanitize(i915); > + > + mutex_lock(&i915->drm.struct_mutex); > + i915_gem_restore_gtt_mappings(i915); > + i915_gem_restore_fences(i915); > + mutex_unlock(&i915->drm.struct_mutex); > + > i915_gem_resume(i915); > } > } > -- > 2.23.0 ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-09-10 10:39 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20190909110011.8958-1-chris@chris-wilson.co.uk> 2019-09-09 11:00 ` [PATCH 3/6] drm/i915: Perform GGTT restore much earlier during resume Chris Wilson 2019-09-10 10:39 ` Mika Kuoppala
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).