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

Re: [Xen-devel] [BUG] After upgrade to Xen 4.12.0 iommu=no-igfx



> -----Original Message-----
> From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
> Sent: 22 July 2019 12:49
> To: Paul Durrant <Paul.Durrant@xxxxxxxxxx>; 'Roman Shaposhnik' 
> <roman@xxxxxxxxxx>
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; jgross@xxxxxxxx; Andrew Cooper 
> <Andrew.Cooper3@xxxxxxxxxx>;
> boris.ostrovsky@xxxxxxxxxx; jbeulich@xxxxxxxx
> Subject: Re: [Xen-devel] [BUG] After upgrade to Xen 4.12.0 iommu=no-igfx
> 
> On Mon, Jul 22, 2019 at 08:20:36AM +0000, Paul Durrant wrote:
> > > -----Original Message-----
> > [snip]
> > > > (XEN) Domain heap initialised
> > > > (XEN) ACPI: 32/64X FACS address mismatch in FADT -
> > > > 8ce8ef80/0000000000000000, using 32
> > > > (XEN) IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
> > > > (XEN) Enabling APIC mode:  Flat.  Using 1 I/O APICs
> > > > (XEN) [VT-D]  RMRR address range 8d800000..8fffffff not in reserved
> > > > memory; need "iommu_inclusive_mapping=1"?
> >
> > This is your problem. In versions prior to 4.11 (I think, and certainly 
> > 4.12)
> iommu_inclusive_mapping used to default on, whereas now it appears to default 
> off. In most
> circumstances this is fine because there is a new flag, iommu_hwdom_reserved, 
> which defaults on and
> this makes sure that all e820 reserved regions are identity mapped (which 
> usually covers undeclared
> RMRRs). You have the opposite problem... a declared RMRR which is not 
> reserved, so you will need
> iommu_inclusive_mapping.
> 
> I think there's a bug in the initialization of iommu for a PV dom0,
> which leaves dom0 without rmrr entries. Can you try the patch below
> and report whether it solves your issue?
> 
> Thanks, Roger.
> ---8<---
> diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
> index 79ec6719f5..9d91f0d633 100644
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -185,7 +185,7 @@ void __hwdom_init iommu_hwdom_init(struct domain *d)
>      register_keyhandler('o', &iommu_dump_p2m_table, "dump iommu p2m table", 
> 0);
> 
>      hd->status = IOMMU_STATUS_initializing;
> -    hd->need_sync = iommu_hwdom_strict && !iommu_use_hap_pt(d);
> +    hd->need_sync = !iommu_use_hap_pt(d);

But this is going to mean the if() below is true for non-strict dom0, which 
means it pointlessly maps the dom0 page list when hwdom_iommu_map() should have 
already mapped all conventional RAM.

  Paul

>      if ( need_iommu_pt_sync(d) )
>      {
>          struct page_info *page;


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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