Revert "arm64: preempt: Fix big-endian when checking preempt count in assembly"

This commit is contained in:
Salvatore Bonaccorso 2019-12-17 15:24:22 +01:00
parent 278eae7330
commit f73fafb39e
3 changed files with 58 additions and 1 deletions

1
debian/changelog vendored
View File

@ -77,7 +77,6 @@ linux (4.19.88-1) UNRELEASED; urgency=medium
- platform/x86: mlx-platform: Fix LED configuration
- ARM: OMAP1: fix USB configuration for device-only setups
- RDMA/hns: Fix the bug while use multi-hop of pbl
- arm64: preempt: Fix big-endian when checking preempt count in assembly
- RDMA/vmw_pvrdma: Use atomic memory allocation in create AH
- PM / AVS: SmartReflex: NULL check before some freeing functions is not needed
- xfs: zero length symlinks are not valid

View File

@ -0,0 +1,57 @@
From: Salvatore Bonaccorso <carnil@debian.org>
Date: Tue, 17 Dec 2019 15:18:10 +0100
Subject: Revert "arm64: preempt: Fix big-endian when checking preempt count in
assembly"
Bug: https://lore.kernel.org/stable/20191214021403.GA1357@home.goodmis.org/
As reported[1] by Steven Rostedt while updating 4.19-rt, the change
breaks without having as well 396244692232f ("arm64: preempt: Provide
our own implementation of asm/preempt.h").
[1]: <https://lore.kernel.org/stable/20191214021403.GA1357@home.goodmis.org/>
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
arch/arm64/include/asm/assembler.h | 8 +++++---
arch/arm64/kernel/entry.S | 6 ++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 0c100506a29a..5a97ac853168 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -683,9 +683,11 @@ USER(\label, ic ivau, \tmp2) // invalidate I line PoU
.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 bb6832353045..5f800384cb9a 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -622,8 +622,10 @@ el1_irq:
irq_handler
#ifdef CONFIG_PREEMPT
- ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count
- cbnz x24, 1f // preempt count != 0
+ ldr w24, [tsk, #TSK_TI_PREEMPT] // get preempt count
+ cbnz w24, 1f // preempt count != 0
+ ldr x0, [tsk, #TSK_TI_FLAGS] // get flags
+ tbz x0, #TIF_NEED_RESCHED, 1f // needs rescheduling?
bl el1_preempt
1:
#endif
--
2.24.1

View File

@ -101,6 +101,7 @@ bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch
debian/revert-objtool-fix-config_stack_validation-y-warning.patch
bugfix/all/mt76-use-the-correct-hweight8-function.patch
bugfix/all/rtc-s35390a-set-uie_unsupported.patch
debian/Revert-arm64-preempt-Fix-big-endian-when-checking-pr.patch
# Miscellaneous features