[PATCH] ARM: fix smp_processor_id() in preemptible warning in harden_branch_predictor()

From: Liu Xiang
Date: Thu Mar 25 2021 - 05:51:43 EST


When CONFIG_HARDEN_BRANCH_PREDICTOR is selected and user aborts occur,
there is a warning:

BUG: using smp_processor_id() in preemptible [00000000] code: errnotest/577
caller is __do_user_fault.constprop.4+0x24/0x88
CPU: 1 PID: 577 Comm: errnotest Not tainted 4.14.188-rt87-fmsh-00004-g58055877a #1
Hardware name: FMSH PSOC Platform
[<8010d6d4>] (unwind_backtrace) from [<8010a228>] (show_stack+0x10/0x14)
[<8010a228>] (show_stack) from [<80698f44>] (dump_stack+0x7c/0x98)
[<80698f44>] (dump_stack) from [<803d17d0>] (check_preemption_disabled+0xc4/0xfc)
[<803d17d0>] (check_preemption_disabled) from [<80110eb8>] (__do_user_fault.constprop.4+0x24/0x88)
[<80110eb8>] (__do_user_fault.constprop.4) from [<801112e4>] (do_page_fault+0x2dc/0x310)
[<801112e4>] (do_page_fault) from [<801012a8>] (do_DataAbort+0x38/0xb8)
[<801012a8>] (do_DataAbort) from [<8010b03c>] (__dabt_usr+0x3c/0x40)
Exception stack(0xb21d1fb0 to 0xb21d1ff8)
1fa0: fffffff4 00000000 00000054 fffffff4
1fc0: 00000000 00000000 7ed81cc8 7ed81ca0 0007a440 00000000 00000000 00000000
1fe0: 00000000 7ed81ca0 00010493 0001f330 20030010 ffffffff

Signed-off-by: Liu Xiang <liu.xiang@xxxxxxxxxxxxxx>
---
arch/arm/include/asm/system_misc.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h
index 66f6a3ae6..4a55cfbdf 100644
--- a/arch/arm/include/asm/system_misc.h
+++ b/arch/arm/include/asm/system_misc.h
@@ -22,9 +22,10 @@ DECLARE_PER_CPU(harden_branch_predictor_fn_t, harden_branch_predictor_fn);
static inline void harden_branch_predictor(void)
{
harden_branch_predictor_fn_t fn = per_cpu(harden_branch_predictor_fn,
- smp_processor_id());
+ get_cpu());
if (fn)
fn();
+ put_cpu();
}
#else
#define harden_branch_predictor() do { } while (0)
--
2.17.1