[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] VT-d: add iommu=igfx_off option to workaround graphics issues



> From: Ting-Wei Lan [mailto:lantw44@xxxxxxxxx]
> Sent: Saturday, July 18, 2015 3:06 AM
> 
> When using Linux >= 3.19 (commit 47591df) as dom0 on some Intel Ironlake
> devices, It is possible to encounter graphics issues that make screen
> unreadable or crash the system. It was reported in freedesktop bugzilla:
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=90037
> 
> As we still cannot find a proper fix for this problem, this patch adds
> iommu=igfx_off option that is similar to Linux intel_iommu=igfx_off for
> users to manually workaround the problem.
> 
> Signed-off-by: Ting-Wei Lan <lantw44@xxxxxxxxx>

Since igfx works before, I'd think a more proper fix should be on the
bisected Linux commit or i915 to have two working correctly together.
Otherwise this patch is just hiding problem.

There is one possible usage to do selective IOMMU disable other than
global "iommu=off" switch. Then making this option general would
be better than igfx_off, e.g. based on BDF. But I'm not sure how it
is useful in reality.

> ---
>  docs/misc/xen-command-line.markdown  | 10 +++++++++-
>  xen/drivers/passthrough/iommu.c      |  3 +++
>  xen/drivers/passthrough/vtd/quirks.c |  2 +-
>  xen/include/xen/iommu.h              |  2 +-
>  4 files changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/docs/misc/xen-command-line.markdown
> b/docs/misc/xen-command-line.markdown
> index 13f03ad..7b61603 100644
> --- a/docs/misc/xen-command-line.markdown
> +++ b/docs/misc/xen-command-line.markdown
> @@ -793,7 +793,7 @@ debug hypervisor only).
>  > Default: `new` unless directed-EOI is supported
> 
>  ### iommu
> -> `= List of [ <boolean> | force | required | intremap | qinval | snoop | 
> sharept |
> dom0-passthrough | dom0-strict | amd-iommu-perdev-intremap | 
> workaround_bios_bug
> | verbose | debug ]`
> +> `= List of [ <boolean> | force | required | intremap | qinval | snoop | 
> sharept |
> dom0-passthrough | dom0-strict | amd-iommu-perdev-intremap | 
> workaround_bios_bug
> | igfx_off | verbose | debug ]`
> 
>  > Sub-options:
> 
> @@ -867,6 +867,14 @@ debug hypervisor only).
>  >> ignored (normally IOMMU setup fails if any of the devices listed by a DRHD
>  >> entry aren't PCI discoverable).
> 
> +> `igfx_off` (VT-d)
> +
> +> Default: `false`
> +
> +>> Workaround graphics issues for Intel Calpella/Ironlake devices. This 
> option
> +>> is similar to Linux `intel_iommu=igfx_off`, so if it fixes anything, you
> +>> should file a bug reporting the problem.
> +
>  > `verbose`
> 
>  > Default: `false`
> diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
> index cc12735..2ba8c9d 100644
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -47,6 +47,7 @@ bool_t __read_mostly force_iommu;
>  bool_t __hwdom_initdata iommu_dom0_strict;
>  bool_t __read_mostly iommu_verbose;
>  bool_t __read_mostly iommu_workaround_bios_bug;
> +bool_t __read_mostly iommu_igfx_off;
>  bool_t __read_mostly iommu_passthrough;
>  bool_t __read_mostly iommu_snoop = 1;
>  bool_t __read_mostly iommu_qinval = 1;
> @@ -87,6 +88,8 @@ static void __init parse_iommu_param(char *s)
>              force_iommu = val;
>          else if ( !strcmp(s, "workaround_bios_bug") )
>              iommu_workaround_bios_bug = val;
> +        else if ( !strcmp(s, "igfx_off") )
> +            iommu_igfx_off = val;
>          else if ( !strcmp(s, "verbose") )
>              iommu_verbose = val;
>          else if ( !strcmp(s, "snoop") )
> diff --git a/xen/drivers/passthrough/vtd/quirks.c 
> b/xen/drivers/passthrough/vtd/quirks.c
> index 69d29ab..da1d853 100644
> --- a/xen/drivers/passthrough/vtd/quirks.c
> +++ b/xen/drivers/passthrough/vtd/quirks.c
> @@ -77,7 +77,7 @@ int is_igd_vt_enabled_quirk(void)
> 
>      /* integrated graphics on Intel platforms is located at 0:2.0 */
>      ggc = pci_conf_read16(0, 0, IGD_DEV, 0, GGC);
> -    return ( ggc & GGC_MEMORY_VT_ENABLED ? 1 : 0 );
> +    return ( ggc & GGC_MEMORY_VT_ENABLED ? 1 : 0 ) && !iommu_igfx_off;
>  }
> 
>  /*
> diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h
> index 8eb764a..2cdb0a9 100644
> --- a/xen/include/xen/iommu.h
> +++ b/xen/include/xen/iommu.h
> @@ -29,7 +29,7 @@
> 
>  extern bool_t iommu_enable, iommu_enabled;
>  extern bool_t force_iommu, iommu_verbose;
> -extern bool_t iommu_workaround_bios_bug, iommu_passthrough;
> +extern bool_t iommu_workaround_bios_bug, iommu_igfx_off, iommu_passthrough;
>  extern bool_t iommu_snoop, iommu_qinval, iommu_intremap;
>  extern bool_t iommu_hap_pt_share;
>  extern bool_t iommu_debug;
> --
> 2.4.3


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.