From: Greg Kroah-Hartman gregkh@linuxfoundation.org
This reverts commit 64694b276d74c653051637caa4bfa5e8c27b30ad which is commit 7faa313f05cad184e8b17750f0cbe5216ac6debb upstream.
Turns out one of the pre-requsite patches wasn't in 4.19.y, so this patch didn't make sense. So let's revert it.
Reported-by: Steven Rostedt rostedt@goodmis.org Reported-by: Will Deacon will@kernel.org Cc: Ard Biesheuvel ard.biesheuvel@linaro.org Cc: Kevin Hilman khilman@baylibre.com Cc: Sasha Levin sashal@kernel.org Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Conflicts: arch/arm64/kernel/entry.S [yyl: adjust context]
Signed-off-by: Yang Yingliang yangyingliang@huawei.com --- arch/arm64/include/asm/assembler.h | 8 +++++--- arch/arm64/kernel/entry.S | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index c9a7e2e..becb545 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h @@ -675,9 +675,11 @@ .macro if_will_cond_yield_neon #ifdef CONFIG_PREEMPT get_thread_info x0 - ldr x0, [x0, #TSK_TI_PREEMPT] - sub x0, x0, #PREEMPT_DISABLE_OFFSET - cbz x0, .Lyield_@ + ldr w1, [x0, #TSK_TI_PREEMPT] + ldr x0, [x0, #TSK_TI_FLAGS] + cmp w1, #PREEMPT_DISABLE_OFFSET + csel x0, x0, xzr, eq + tbnz x0, #TIF_NEED_RESCHED, .Lyield_@ // needs rescheduling? /* fall through to endif_yield_neon */ .subsection 1 .Lyield_@ : diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 8e25e0e..e577599 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -681,16 +681,18 @@ el1_irq: irq_handler
#ifdef CONFIG_PREEMPT - ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count + ldr w24, [tsk, #TSK_TI_PREEMPT] // get preempt count alternative_if ARM64_HAS_IRQ_PRIO_MASKING /* * DA_F were cleared at start of handling. If anything is set in DAIF, * we come back from an NMI, so skip preemption */ mrs x0, daif - orr x24, x24, x0 + orr w24, w24, w0 alternative_else_nop_endif - cbnz x24, 1f // preempt count != 0 || NMI return path + cbnz w24, 1f // preempt count != 0 || NMI return path + ldr x0, [tsk, #TSK_TI_FLAGS] // get flags + tbz x0, #TIF_NEED_RESCHED, 1f // needs rescheduling? bl el1_preempt 1: #endif