On Sat, Apr 1, 2017, 05:24 Andrei Borzenkov <arvidj...@gmail.com> wrote:

> Fixed loading of ACPI tables on EFI (side effect was apparent memory
> corruption ranging from unpredictable behavior to system reset).
>
> Reported by Nando Eva <nando4...@ymail.com>
>
> ---
>
> @Nando: please test this patch. It fixed loading for me at least on
> QEMU/OVMF. It conflicts with lsacpi patch, but you can actually
> verify that RSDP was updated by using "lsefisystab" in grub.
>
> @Vladimir: this looks like 2.02 material as it was obviously wrong.
>
Agreed, go ahead.

> It does not fix weird behavior on physical system (loss of partitions
> afetr loading table using "acpi"); unfortunately, I cannot reproduce
> it in QEMU which makes it rather hard to debug. This smells like yet
> another meory corruption.
>
> Also our ACPI table mangling code is not clean (e.g. Linux reports
> FACS two times). Note that ACPI says normal and extended addresses
> (i.e. DSDT/XDSDT and FACS/XFACS) are mutually exclusive, while we
> set both to non-zero. This strictly speaking violates specs.
>
>  grub-core/commands/acpi.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c
> index b5c2f27..9f02f22 100644
> --- a/grub-core/commands/acpi.c
> +++ b/grub-core/commands/acpi.c
> @@ -761,10 +761,10 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int
> argc, char **args)
>      struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
>      struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
>
> -    grub_efi_system_table->boot_services->install_configuration_table
> -      (&acpi20, grub_acpi_get_rsdpv2 ());
> -    grub_efi_system_table->boot_services->install_configuration_table
> -      (&acpi, grub_acpi_get_rsdpv1 ());
> +    efi_call_2
> (grub_efi_system_table->boot_services->install_configuration_table,
> +      &acpi20, grub_acpi_get_rsdpv2 ());
> +    efi_call_2
> (grub_efi_system_table->boot_services->install_configuration_table,
> +      &acpi, grub_acpi_get_rsdpv1 ());
>    }
>  #endif
>
> --
> tg: (8014b7b..) u/acpi-efi_call (depends on: master)
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to