[PATCH v4 2/4] x86/boot/compressed: Clean up EFI RSDP lookup in efi_get_rsdp_addr()

From: Thorsten Blum

Date: Mon Nov 09 2026 - 07:55:27 EST


Mark __efi_get_rsdp_addr() as __maybe_unused and remove the unused ret
variable. In efi_get_rsdp_addr(), remove the unused nr_tables variable
and use the function return values directly in the conditions.

Since efi_get_conf_table() already calls efi_get_system_table(), drop
the redundant efi_get_system_table() call and keep a single error path.

Make efi_get_system_table() static now that it has no callers outside of
efi.c, and remove its declaration and stub from misc.h.

Reviewed-by: Jan Stancek <jstancek@xxxxxxxxxx>
Reviewed-by: Nicolas Schier <n.schier@xxxxxxxxx>
Signed-off-by: Thorsten Blum <blum@xxxxxxxxxx>
---
arch/x86/boot/compressed/acpi.c | 18 ++++--------------
arch/x86/boot/compressed/efi.c | 2 +-
arch/x86/boot/compressed/misc.h | 6 ------
3 files changed, 5 insertions(+), 21 deletions(-)

diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
index aed27604c11f..5b2064b9c199 100644
--- a/arch/x86/boot/compressed/acpi.c
+++ b/arch/x86/boot/compressed/acpi.c
@@ -21,12 +21,11 @@
*/
struct mem_vector immovable_mem[MAX_NUMNODES*2];

-static acpi_physical_address
+static acpi_physical_address __maybe_unused
__efi_get_rsdp_addr(unsigned long cfg_tbl_pa, unsigned int cfg_tbl_len)
{
#ifdef CONFIG_EFI
unsigned long rsdp_addr;
- int ret;

/*
* Search EFI system tables for RSDP. Preferred is ACPI_20_TABLE_GUID to
@@ -53,21 +52,12 @@ static acpi_physical_address efi_get_rsdp_addr(void)
#ifdef CONFIG_EFI
unsigned long cfg_tbl_pa = 0;
unsigned int cfg_tbl_len;
- unsigned long systab_pa;
- unsigned int nr_tables;
- enum efi_type et;
- int ret;

- et = efi_get_type(boot_params_ptr);
- if (et == EFI_TYPE_NONE)
+ if (efi_get_type(boot_params_ptr) == EFI_TYPE_NONE)
return 0;

- systab_pa = efi_get_system_table(boot_params_ptr);
- if (!systab_pa)
- error("EFI support advertised, but unable to locate system table.");
-
- ret = efi_get_conf_table(boot_params_ptr, &cfg_tbl_pa, &cfg_tbl_len);
- if (ret || !cfg_tbl_pa)
+ if (efi_get_conf_table(boot_params_ptr, &cfg_tbl_pa, &cfg_tbl_len) ||
+ !cfg_tbl_pa)
error("EFI config table not found.");

return __efi_get_rsdp_addr(cfg_tbl_pa, cfg_tbl_len);
diff --git a/arch/x86/boot/compressed/efi.c b/arch/x86/boot/compressed/efi.c
index f2d08e756e66..93dbf4abb79e 100644
--- a/arch/x86/boot/compressed/efi.c
+++ b/arch/x86/boot/compressed/efi.c
@@ -57,7 +57,7 @@ enum efi_type efi_get_type(struct boot_params *bp)
*
* Return: EFI system table address on success. On error, return 0.
*/
-unsigned long efi_get_system_table(struct boot_params *bp)
+static unsigned long efi_get_system_table(struct boot_params *bp)
{
unsigned long sys_tbl_pa;
struct efi_info *ei;
diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h
index 4f86c5903e03..8c9f3283c92e 100644
--- a/arch/x86/boot/compressed/misc.h
+++ b/arch/x86/boot/compressed/misc.h
@@ -212,7 +212,6 @@ enum efi_type {
#ifdef CONFIG_EFI
/* helpers for early EFI config table access */
enum efi_type efi_get_type(struct boot_params *bp);
-unsigned long efi_get_system_table(struct boot_params *bp);
int efi_get_conf_table(struct boot_params *bp, unsigned long *cfg_tbl_pa,
unsigned int *cfg_tbl_len);
unsigned long efi_find_vendor_table(struct boot_params *bp,
@@ -225,11 +224,6 @@ static inline enum efi_type efi_get_type(struct boot_params *bp)
return EFI_TYPE_NONE;
}

-static inline unsigned long efi_get_system_table(struct boot_params *bp)
-{
- return 0;
-}
-
static inline int efi_get_conf_table(struct boot_params *bp,
unsigned long *cfg_tbl_pa,
unsigned int *cfg_tbl_len)