Re: [PATCH v1 2/4] LoongArch: Handle percpu handler address in bt_address()

From: Tiezhu Yang

Date: Tue Jan 20 2026 - 08:09:01 EST


On 2026/1/20 下午9:01, Huacai Chen wrote:
On Tue, Jan 20, 2026 at 8:57 PM Tiezhu Yang <yangtiezhu@xxxxxxxxxxx> wrote:

On 2026/1/20 下午8:04, Huacai Chen wrote:
Hi, Tiezhu,

On Tue, Jan 20, 2026 at 5:23 PM Tiezhu Yang <yangtiezhu@xxxxxxxxxxx> wrote:

After commit 4cd641a79e69 ("LoongArch: Remove unnecessary checks for
ORC unwinder"), the system can not boot normally under some configs,
there are many error messages "cannot find unwind pc at".

...

+#if defined(CONFIG_NUMA) && !defined(CONFIG_PREEMPT_RT)
+ for (int cpu = 1; cpu < num_possible_cpus(); cpu++) {
Use nr_cpu_ids instead of num_possible_cpus() can improve performance a little.

+ int vec_sz = sizeof(exception_handlers);
+
It is better to add "if (!pcpu_handlers[cpu]) continue" here.

If so, it can use for_each_possible_cpu(cpu) directly?
It can, but I remember you want to skip CPU 0?

Yes, that is the intention to use the for loop, but if checking
!pcpu_handlers[cpu], I think no need to use for loop to skip cpu
0, just use for_each_possible_cpu(cpu) is more simple and direct.

The code looks like:

----->8-----
diff --git a/arch/loongarch/kernel/unwind_orc.c b/arch/loongarch/kernel/unwind_orc.c
index d6b3688a1ce9..a0ba4e416f99 100644
--- a/arch/loongarch/kernel/unwind_orc.c
+++ b/arch/loongarch/kernel/unwind_orc.c
@@ -352,6 +352,24 @@ static inline unsigned long bt_address(unsigned long ra)
{
extern unsigned long eentry;

+#if defined(CONFIG_NUMA) && !defined(CONFIG_PREEMPT_RT)
+ int cpu;
+ int vec_sz __maybe_unused;
+
+ for_each_possible_cpu(cpu) {
+ if (!pcpu_handlers[cpu])
+ continue;
+
+ vec_sz = sizeof(exception_handlers);
+
+ if (ra >= pcpu_handlers[cpu] &&
+ ra < pcpu_handlers[cpu] + vec_sz) {
+ ra = eentry + (ra - pcpu_handlers[cpu]);
+ break;
+ }
+ }
+#endif
+
if (ra >= eentry && ra < eentry + EXCCODE_INT_END * VECSIZE) {
unsigned long func;
unsigned long type = (ra - eentry) / VECSIZE;

Please let me know what is the better way.

Thanks,
Tiezhu