x86: Allow writing tables to fail
authorSimon Glass <sjg@chromium.org>
Wed, 4 Nov 2020 16:57:18 +0000 (09:57 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 5 Nov 2020 06:58:45 +0000 (14:58 +0800)
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 <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/cpu.c
arch/x86/include/asm/tables.h
arch/x86/lib/tables.c

index f869275..7135126 100644 (file)
@@ -18,6 +18,8 @@
  * src/arch/x86/lib/cpu.c
  */
 
+#define LOG_CATEGORY   UCLASS_CPU
+
 #include <common.h>
 #include <bootstage.h>
 #include <command.h>
@@ -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();
index f7c72ed..bf66e79 100644 (file)
@@ -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
index 7bad5dd..7099866 100644 (file)
@@ -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;
 }