From: Thomas Graziadei <thomas.graziadei@omicronenergy.com>
Date: Wed, 18 Mar 2020 21:26:40 +0100
Subject: [PATCH] powerpc: Fix lazy preemption for powerpc 32bit
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git
Git-commit: 0443a3044a15a8cb1fcca0997b637d5887909715
Patch-mainline: Queued in subsystem maintainer repository
References: SLE Realtime Extension
The 32bit powerpc assembler implementation of the lazy preemption
set the _TIF_PERSYSCALL_MASK on the low word. This could lead to
modprobe segfaults and a kernel panic - not syncing: Attempt to
kill init! issue.
Fixed by shifting the mask by 16 bit using andis and lis.
Signed-off-by: Thomas Graziadei <thomas.graziadei@omicronenergy.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Daniel Wagner <dwagner@suse.de>
---
arch/powerpc/kernel/entry_32.S | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -533,12 +533,12 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRE
1: stw r6,RESULT(r1) /* Save result */
stw r3,GPR3(r1) /* Update return value */
-2: andi. r0,r9,(_TIF_PERSYSCALL_MASK)@h
+2: andis. r0,r9,(_TIF_PERSYSCALL_MASK)@h
beq 4f
/* Clear per-syscall TIF flags if any are set. */
- li r11,_TIF_PERSYSCALL_MASK@h
+ lis r11,(_TIF_PERSYSCALL_MASK)@h
addi r12,r2,TI_FLAGS
3: lwarx r8,0,r12
andc r8,r8,r11