]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
kern/acpi: Use xsdt_addr if present
authorQiumiao Zhang <zhangqiumiao1@huawei.com>
Tue, 13 Jun 2023 03:20:51 +0000 (11:20 +0800)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 13 Jun 2023 14:00:39 +0000 (16:00 +0200)
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 <zhangqiumiao1@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/kern/acpi.c

index a9bcd85fc1ba90f12e69eb53461c2b3336b0f8aa..c61115dcd376f1679f1bb898990a39a5834ccad4 100644 (file)
@@ -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;
 }