grub-devel
[Top][All Lists]
Advanced

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

[PATCH] acpi: use xsdt_addr if present


From: Qiumiao Zhang
Subject: [PATCH] acpi: use xsdt_addr if present
Date: Thu, 8 Jun 2023 19:09:36 +0800

According to the UEFI 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>
---
 grub-core/commands/acpi.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c
index deec4bb43..6a7c9ad87 100644
--- a/grub-core/commands/acpi.c
+++ b/grub-core/commands/acpi.c
@@ -514,7 +514,11 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, 
char **args)
       /* Set revision variables to replicate the same version as host. */
       rev1 = ! rsdp->revision;
       rev2 = rsdp->revision;
-      rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp->rsdt_addr;
+      if (rev2 && ((struct grub_acpi_rsdp_v20 *) rsdp)->xsdt_addr != NULL)
+       rsdt = (struct grub_acpi_table_header *) (grub_addr_t) ((struct 
grub_acpi_rsdp_v20 *) rsdp)->xsdt_addr;
+      else
+       rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp->rsdt_addr;
+
       /* Load host tables. */
       for (entry_ptr = (grub_uint32_t *) (rsdt + 1);
           entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
-- 
2.28.0.windows.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]