diff mbox series

riscv/purgatory: align riscv_kernel_entry

Message ID 20240709012606.748596-1-cyrevolt@gmail.com (mailing list archive)
State Superseded
Headers show
Series riscv/purgatory: align riscv_kernel_entry | expand

Checks

Context Check Description
conchuod/vmtest-for-next-PR success PR summary
conchuod/patch-1-test-1 success .github/scripts/patches/tests/build_rv32_defconfig.sh
conchuod/patch-1-test-2 success .github/scripts/patches/tests/build_rv64_clang_allmodconfig.sh
conchuod/patch-1-test-3 success .github/scripts/patches/tests/build_rv64_gcc_allmodconfig.sh
conchuod/patch-1-test-4 success .github/scripts/patches/tests/build_rv64_nommu_k210_defconfig.sh
conchuod/patch-1-test-5 success .github/scripts/patches/tests/build_rv64_nommu_virt_defconfig.sh
conchuod/patch-1-test-6 warning .github/scripts/patches/tests/checkpatch.sh
conchuod/patch-1-test-7 success .github/scripts/patches/tests/dtb_warn_rv64.sh
conchuod/patch-1-test-8 success .github/scripts/patches/tests/header_inline.sh
conchuod/patch-1-test-9 success .github/scripts/patches/tests/kdoc.sh
conchuod/patch-1-test-10 success .github/scripts/patches/tests/module_param.sh
conchuod/patch-1-test-11 success .github/scripts/patches/tests/verify_fixes.sh
conchuod/patch-1-test-12 success .github/scripts/patches/tests/verify_signedoff.sh

Commit Message

Daniel Maslowski July 9, 2024, 1:26 a.m. UTC
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@gmail.com>
---
 arch/riscv/purgatory/entry.S | 1 +
 1 file changed, 1 insertion(+)

Comments

Alexandre Ghiti July 15, 2024, 11:46 a.m. UTC | #1
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@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
Alexandre Ghiti July 15, 2024, 12:38 p.m. UTC | #2
On 15/07/2024 13:46, Alexandre Ghiti wrote:
> 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@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
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv


And since this is a fix, can you add a Fixes tag please?

Thanks,

Alex
diff mbox series

Patch

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
 SYM_DATA(riscv_kernel_entry, .quad 0)
 
 .end