According to the ACPI specification, in ACPI 2.0 or later, an ACPI-compatible OS must use the XSDT if present. So, we should use xsdt_addr instead of rsdt_addr if xsdt_addr is valid.
Signed-off-by: Qiumiao Zhang <zhangqiumi...@huawei.com> --- grub-core/kern/acpi.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/grub-core/kern/acpi.c b/grub-core/kern/acpi.c index a9bcd85fc..c61115dcd 100644 --- a/grub-core/kern/acpi.c +++ b/grub-core/kern/acpi.c @@ -101,12 +101,6 @@ grub_acpi_find_table (const char *sig) if (r) return r; rsdpv2 = grub_machine_acpi_get_rsdpv2 (); - if (rsdpv2) - r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) - (grub_addr_t) rsdpv2->rsdpv1.rsdt_addr, - sig); - if (r) - return r; if (rsdpv2 #if GRUB_CPU_SIZEOF_VOID_P != 8 && !(rsdpv2->xsdt_addr >> 32) @@ -117,6 +111,12 @@ grub_acpi_find_table (const char *sig) sig); if (r) return r; + if (rsdpv2) + r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv2->rsdpv1.rsdt_addr, + sig); + if (r) + return r; return 0; } -- 2.28.0.windows.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel