[Intel-gfx] [PATCH 2/3] drm/i915: Sleep around performing iommu unmaps on Tigerlake
Mika Kuoppala
mika.kuoppala at linux.intel.com
Wed Dec 9 15:22:11 UTC 2020
Chris Wilson <chris at chris-wilson.co.uk> writes:
> Tigerlake is plagued by spontaneous DMAR faults [reason 7, next page
> table ptr is invalid] which lead to GPU hangs. These faults occur when
> an iommu map is immediately reused. Adding further clflushes and
> barriers around either the GTT PTE or iommu PTE updates do not prevent
> the faults. So far the only effect has been from inducing a delay
> between reuse of the iommu on the GPU.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
Acked-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_ggtt.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c
> index cf94525be2c1..f5b981443117 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c
> @@ -101,7 +101,16 @@ static bool needs_idle_maps(struct drm_i915_private *i915)
> * Query intel_iommu to see if we need the workaround. Presumably that
> * was loaded first.
> */
> - return IS_GEN(i915, 5) && IS_MOBILE(i915) && intel_vtd_active();
> + if (!intel_vtd_active())
> + return false;
> +
> + if (IS_GEN(i915, 5) && IS_MOBILE(i915))
> + return true;
> +
> + if (IS_GEN(i915, 12))
> + return true; /* XXX DMAR fault reason 7 */
> +
> + return false;
> }
>
> void i915_ggtt_suspend(struct i915_ggtt *ggtt)
> --
> 2.20.1
More information about the Intel-gfx
mailing list