From: cp0613@linux.alibaba.com
To: pjw@kernel.org, anup@brainfault.org,
andrew.jones@oss.qualcomm.com, guoren@kernel.org
Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
Chen Pei <cp0613@linux.alibaba.com>
Subject: [PATCH v2] riscv: smp: Align secondary_start_sbi to 4 bytes
Date: Mon, 13 Apr 2026 21:20:09 +0800 [thread overview]
Message-ID: <20260413132009.133752-1-cp0613@linux.alibaba.com> (raw)
From: Chen Pei <cp0613@linux.alibaba.com>
During SMP boot, the secondary_start_sbi address is passed to the
slave core via sbi_hsm_hart_start. In OpenSBI, this address is
written to STVEC in sbi_hart_switch_mode.
According to the privileged specification, the BASE field of STVEC
must always be aligned on a 4-byte boundary. However, System.map
reveals that secondary_start_sbi is not a 4-byte aligned address.
For example, the address of secondary_start_sbi is
0xffffffff80001066, and the disassembly is as follows:
Dump of assembler code from 0xffffffff80001052 to 0xffffffff8000107a:
0xffffffff80001052 <_start+4178>: c.nop -11
0xffffffff80001054 <_start+4180>: auipc gp,0x1a1f
0xffffffff80001058 <_start+4184>: addi gp,gp,84
0xffffffff8000105c <_start+4188>: csrw satp,a2
0xffffffff80001060 <_start+4192>: sfence.vma
0xffffffff80001064 <_start+4196>: ret
0xffffffff80001066 <_start+4198>: csrw sie,zero
0xffffffff8000106a <_start+4202>: csrw sip,zero
0xffffffff8000106e <_start+4206>: li t0,2
0xffffffff80001070 <_start+4208>: csrw scounteren,t0
0xffffffff80001074 <_start+4212>: auipc gp,0x1a1f
0xffffffff80001078 <_start+4216>: addi gp,gp,52
When writing to STVEC at address 0xffffffff80001066, the actual
write address is 0xffffffff80001064, corresponding to the address
of the previous ret instruction. This is unexpected, and if an
interrupt occurs at this point, it will cause unpredictable results.
However, secondary_start_sbi immediately masks all interrupts and
updates STVEC, so no problems occurred.
In summary, it is more reasonable to make secondary_start_sbi
satisfy 4-byte alignment.
Changes in v2:
- Place `.align 2` inside `#ifdef CONFIG_SMP`, above the tag.
- Add two Reviewed-by tags.
- Based on Linux 7.0.
Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>
Reviewed-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>
Signed-off-by: Chen Pei <cp0613@linux.alibaba.com>
---
arch/riscv/kernel/head.S | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S
index 9c99c5ad6fe8..9f33be6260e1 100644
--- a/arch/riscv/kernel/head.S
+++ b/arch/riscv/kernel/head.S
@@ -127,6 +127,7 @@ relocate_enable_mmu:
#endif /* CONFIG_MMU */
#ifdef CONFIG_SMP
.global secondary_start_sbi
+ .align 2
secondary_start_sbi:
/* Mask all interrupts */
csrw CSR_IE, zero
--
2.50.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
reply other threads:[~2026-04-13 13:20 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260413132009.133752-1-cp0613@linux.alibaba.com \
--to=cp0613@linux.alibaba.com \
--cc=andrew.jones@oss.qualcomm.com \
--cc=anup@brainfault.org \
--cc=guoren@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=pjw@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox