[PATCH] riscv/purgatory: align riscv_kernel_entry

Alexandre Ghiti alex at ghiti.fr
Mon Jul 15 04:46:14 PDT 2024


Hi Daniel,

On 09/07/2024 03:26, Daniel Maslowski wrote:
> When alignment handling is delegated to the kernel, everything must be
> word-aligned in purgatory, since the trap handler is then set to the
> kexec one. Without the alignment, hitting the exception would
> ultimately crash. On other occasions, the kernel's handler would take
> care of exceptions.
> This has been tested with oreboot and its SBI delegating unaligned
> access exceptions and the kernel configured to handle them.
>
> Signed-off-by: Daniel Maslowski <cyrevolt at gmail.com>
> ---
>   arch/riscv/purgatory/entry.S | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/arch/riscv/purgatory/entry.S b/arch/riscv/purgatory/entry.S
> index 5bcf3af903da..29121650a941 100644
> --- a/arch/riscv/purgatory/entry.S
> +++ b/arch/riscv/purgatory/entry.S
> @@ -34,6 +34,7 @@ SYM_CODE_END(purgatory_start)
>   
>   .data
>   
> +.align 4


IIRC, .align on riscv takes a power of two as argument, which means you 
align riscv_kernel_entry symbol to 16B here, any reason for this 
alignment? I guess you want 4B on rv32 and 8B on rv64 right? In that 
case, the best here would be to use LGREG 
https://elixir.bootlin.com/linux/latest/source/arch/riscv/include/asm/asm.h#L29

Thanks,

Alex


>   SYM_DATA(riscv_kernel_entry, .quad 0)
>   
>   .end



More information about the linux-riscv mailing list