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

Re: [PATCH v3] xen/x86/pvh: handle ACPI RSDT table in PVH Dom0 build



I sent v4 here:

https://marc.info/?l=xen-devel&m=172610400409473


On Tue, 10 Sep 2024, Roger Pau Monné wrote:
> Ping?
> 
> I think this is a useful change, could we please have a new version
> with the proposed adjustments?
> 
> Thanks, Roger.
> 
> On Wed, Apr 24, 2024 at 03:18:26PM -0400, Daniel P. Smith wrote:
> > From: Stefano Stabellini <stefano.stabellini@xxxxxxx>
> > 
> > Xen always generates as XSDT table even if the firmware provided an RSDT 
> > table.
> > Copy the RSDT header from the firmware table, adjusting the signature, for 
> > the
> > XSDT table when not provided by the firmware.
> > 
> > Fixes: 1d74282c455f ('x86: setup PVHv2 Dom0 ACPI tables')
> > Suggested-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx>
> > Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx>
> > ---
> > 
> > This patch is used for development and testing of hyperlaunch using the QEMU
> > emulator. After dicussiong with Stefano, he was okay with me addressing 
> > Jan's
> > comment regarding the table signature and reposting for acceptance.
> > 
> > Changes in v3:
> > - ensure the constructed XSDT table always has the correct signature
> > 
> > ---
> >  xen/arch/x86/hvm/dom0_build.c | 14 +++++++++++++-
> >  1 file changed, 13 insertions(+), 1 deletion(-)
> > 
> > diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
> > index ac71d43a6b3f..781aac00fe72 100644
> > --- a/xen/arch/x86/hvm/dom0_build.c
> > +++ b/xen/arch/x86/hvm/dom0_build.c
> > @@ -1077,7 +1077,16 @@ static int __init pvh_setup_acpi_xsdt(struct domain 
> > *d, paddr_t madt_addr,
> >          rc = -EINVAL;
> >          goto out;
> >      }
> > -    xsdt_paddr = rsdp->xsdt_physical_address;
> > +    /*
> > +     * Note the header is the same for both RSDT and XSDT, so it's fine to
> > +     * copy the native RSDT header to the Xen crafted XSDT if no native
> > +     * XSDT is available.
> > +     */
> > +    if ( rsdp->revision > 1 && rsdp->xsdt_physical_address )
> > +        xsdt_paddr = rsdp->xsdt_physical_address;
> > +    else
> > +        xsdt_paddr = rsdp->rsdt_physical_address;
> > +
> >      acpi_os_unmap_memory(rsdp, sizeof(*rsdp));
> >      table = acpi_os_map_memory(xsdt_paddr, sizeof(*table));
> >      if ( !table )
> > @@ -1089,6 +1098,9 @@ static int __init pvh_setup_acpi_xsdt(struct domain 
> > *d, paddr_t madt_addr,
> >      xsdt->header = *table;
> >      acpi_os_unmap_memory(table, sizeof(*table));
> >  
> > +    /* In case the header is an RSDT copy, blindly ensure it has an XSDT 
> > sig */
> > +    xsdt->header.signature[0] = 'X';
> > +
> >      /* Add the custom MADT. */
> >      xsdt->table_offset_entry[0] = madt_addr;
> >  
> > -- 
> > 2.30.2
> > 
> 

 


Rackspace

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