[PATCH] riscv: resume needs to be a global

If we take an exception before u-boot is relocated, there's a good chance we will end up in an endless loop of exceptions because resume is invalid until after relocation.
Signed-off-by: Anton Blanchard antonb@tenstorrent.com --- arch/riscv/include/asm/global_data.h | 1 + arch/riscv/lib/interrupts.c | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/arch/riscv/include/asm/global_data.h b/arch/riscv/include/asm/global_data.h index 593d9276d3..d356752a56 100644 --- a/arch/riscv/include/asm/global_data.h +++ b/arch/riscv/include/asm/global_data.h @@ -42,6 +42,7 @@ struct arch_global_data { #ifdef CONFIG_SMBIOS ulong smbios_start; /* Start address of SMBIOS table */ #endif + struct resume_data *resume; };
#include <asm-generic/global_data.h> diff --git a/arch/riscv/lib/interrupts.c b/arch/riscv/lib/interrupts.c index f9a1428a48..a0e069e749 100644 --- a/arch/riscv/lib/interrupts.c +++ b/arch/riscv/lib/interrupts.c @@ -22,11 +22,9 @@
DECLARE_GLOBAL_DATA_PTR;
-static struct resume_data *resume; - void set_resume(struct resume_data *data) { - resume = data; + gd->arch.resume = data; }
static void show_efi_loaded_images(uintptr_t epc) @@ -140,9 +138,9 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs) "Store/AMO page fault", };
- if (resume) { - resume->code = code; - longjmp(resume->jump, 1); + if (gd->arch.resume) { + gd->arch.resume->code = code; + longjmp(gd->arch.resume->jump, 1); }
if (code < ARRAY_SIZE(exception_code))

On Thu, Aug 08, 2024 at 02:14:17AM +0000, Anton Blanchard wrote:
If we take an exception before u-boot is relocated, there's a good chance we will end up in an endless loop of exceptions because resume is invalid until after relocation.
Signed-off-by: Anton Blanchard antonb@tenstorrent.com
arch/riscv/include/asm/global_data.h | 1 + arch/riscv/lib/interrupts.c | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-)
Reviewed-by: Leo Yu-Chi Liang ycliang@andestech.com
participants (2)
-
Anton Blanchard
-
Leo Liang