On Thu, Nov 29, 2018 at 02:24:22PM +0100, Samuel Ortiz wrote: > From: Igor Mammedov <imamm...@redhat.com> > > When RSDP table was introduced (d4bec5d87), we calculated only legacy > checksum, and that was incorrect as it > - specified rev=2 and forgot about extended checksum. > - legacy checksum calculated on full table instead of the 1st 20 bytes > > Fix it by adding extended checksum calculation and using correct > size for legacy checksum. > > While at it use explicit constants to specify sub/full tables > sizes instead of relying on AcpiRsdpDescriptor size and fields offsets. > The follow up commits will convert this table to build_append_int_noprefix() > API, > will use constants anyway and remove unused AcpiRsdpDescriptor structure. > > Based on "[PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP" > by Samuel Ortiz, who did it right in his impl. > > Fixes: d4bec5d87 (hw/arm/virt-acpi-build: Generate RSDP table) > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > CC: Ard Biesheuvel <ard.biesheu...@linaro.org> > CC: Shannon Zhao <shannon.zha...@gmail.com> > Reviewed-by: Samuel Ortiz <sa...@linux.intel.com> > Signed-off-by: Samuel Ortiz <sa...@linux.intel.com>
I don't see my R-b here, but this patch doesn't appear to have changed since I reviewed it. Here it is again Reviewed-by: Andrew Jones <drjo...@redhat.com> > --- > hw/arm/virt-acpi-build.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index fcaa350892..0835900052 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -390,8 +390,13 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker, > unsigned xsdt_tbl_offset) > > /* Checksum to be filled by Guest linker */ > bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, > - (char *)rsdp - rsdp_table->data, sizeof *rsdp, > + (char *)rsdp - rsdp_table->data, 20 /* ACPI rev 1.0 RSDP size */, > (char *)&rsdp->checksum - rsdp_table->data); > + > + /* Extended checksum to be filled by Guest linker */ > + bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, > + (char *)rsdp - rsdp_table->data, 36 /* ACPI rev 2.0 RSDP size */, > + (char *)&rsdp->extended_checksum - rsdp_table->data); > } > > static void > -- > 2.19.2 > >