mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
powerpc: Fix hard_irq_disable() with sanitizer
As reported by Zhouyi Zhou, WRITE_ONCE() is not atomic
as expected when KASAN or KCSAN are compiled in.
Fix it by re-implementing it using inline assembly.
Fixes: 077fc62b2b ("powerpc/irq: remove inline assembly in hard_irq_disable macro")
Reported-by: Zhouyi Zhou <zhouzhouyi@gmail.com>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a8298991b3df049a54ee8e558838e34265812014.1661272586.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
91926d8b7e
commit
814816d71e
|
|
@ -282,7 +282,8 @@ static inline bool pmi_irq_pending(void)
|
|||
flags = irq_soft_mask_set_return(IRQS_ALL_DISABLED); \
|
||||
local_paca->irq_happened |= PACA_IRQ_HARD_DIS; \
|
||||
if (!arch_irqs_disabled_flags(flags)) { \
|
||||
WRITE_ONCE(local_paca->saved_r1, current_stack_pointer);\
|
||||
asm volatile("std%X0 %1,%0" : "=m" (local_paca->saved_r1) \
|
||||
: "r" (current_stack_pointer)); \
|
||||
trace_hardirqs_off(); \
|
||||
} \
|
||||
} while(0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user