From 38e498c3a2b5b52e7935516cba0927e0d90c365c Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 4 Nov 2020 09:57:18 -0700 Subject: [PATCH] x86: Allow writing tables to fail At present write_tables() can fail but does not report this problem to its caller. Fix this by changing the return type. Signed-off-by: Simon Glass Reviewed-by: Bin Meng --- arch/x86/cpu/cpu.c | 9 ++++++++- arch/x86/include/asm/tables.h | 4 +++- arch/x86/lib/tables.c | 5 ++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c index f869275396..71351262f6 100644 --- a/arch/x86/cpu/cpu.c +++ b/arch/x86/cpu/cpu.c @@ -18,6 +18,8 @@ * src/arch/x86/lib/cpu.c */ +#define LOG_CATEGORY UCLASS_CPU + #include #include #include @@ -200,6 +202,7 @@ __weak void board_final_cleanup(void) int last_stage_init(void) { struct acpi_fadt __maybe_unused *fadt; + int ret; board_final_init(); @@ -210,7 +213,11 @@ int last_stage_init(void) acpi_resume(fadt); } - write_tables(); + ret = write_tables(); + if (ret) { + log_err("Failed to write tables\n"); + return log_msg_ret("table", ret); + } if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) { fadt = acpi_find_fadt(); diff --git a/arch/x86/include/asm/tables.h b/arch/x86/include/asm/tables.h index f7c72ed3db..bf66e79018 100644 --- a/arch/x86/include/asm/tables.h +++ b/arch/x86/include/asm/tables.h @@ -49,8 +49,10 @@ void table_fill_string(char *dest, const char *src, size_t n, char pad); * This writes x86 configuration tables, including PIRQ routing table, * Multi-Processor table and ACPI table. Whether a specific type of * configuration table is written is controlled by a Kconfig option. + * + * @return 0 if OK, -ENOSPC if table too large */ -void write_tables(void); +int write_tables(void); /** * write_pirq_routing_table() - Write PIRQ routing table diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c index 7bad5dd303..7099866a78 100644 --- a/arch/x86/lib/tables.c +++ b/arch/x86/lib/tables.c @@ -64,7 +64,7 @@ void table_fill_string(char *dest, const char *src, size_t n, char pad) dest[i] = pad; } -void write_tables(void) +int write_tables(void) { u32 rom_table_start = ROM_TABLE_ADDR; u32 rom_table_end; @@ -91,6 +91,7 @@ void write_tables(void) cfg_tables[i].size = table_size; } else { printf("%d: no memory for configuration tables\n", i); + return -ENOSPC; } #endif @@ -105,4 +106,6 @@ void write_tables(void) write_coreboot_table(CB_TABLE_ADDR, cfg_tables); #endif debug("- done writing tables\n"); + + return 0; }