summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel
diff options
context:
space:
mode:
authorNicholas Piggin2017-06-08 17:36:07 +0200
committerMichael Ellerman2017-06-15 08:34:39 +0200
commit837e72f78a72ef43a0c5e179f3addadb2a225f80 (patch)
tree4a16400f9dc5667da0e16a4ac9cbf9764773f21d /arch/powerpc/kernel
parentpowerpc/64s: Leave interrupts hard enabled in context switch for radix (diff)
downloadkernel-qcow2-linux-837e72f78a72ef43a0c5e179f3addadb2a225f80.tar.gz
kernel-qcow2-linux-837e72f78a72ef43a0c5e179f3addadb2a225f80.tar.xz
kernel-qcow2-linux-837e72f78a72ef43a0c5e179f3addadb2a225f80.zip
powerpc/64: Drop reservation-clearing ldarx in context switch
There is no need to explicitly break the reservation in _switch, because we are guaranteed that the context switch path will include a larx/stcx. Comment the guarantee and remove the reservation clear from _switch. This is worth 1-2% in context switch performance. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r--arch/powerpc/kernel/entry_64.S11
1 files changed, 3 insertions, 8 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 91f9fdc2d027..273a35926534 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -521,15 +521,10 @@ _GLOBAL(_switch)
#endif /* CONFIG_SMP */
/*
- * If we optimise away the clear of the reservation in system
- * calls because we know the CPU tracks the address of the
- * reservation, then we need to clear it here to cover the
- * case that the kernel context switch path has no larx
- * instructions.
+ * The kernel context switch path must contain a spin_lock,
+ * which contains larx/stcx, which will clear any reservation
+ * of the task being switched.
*/
-BEGIN_FTR_SECTION
- ldarx r6,0,r1
-END_FTR_SECTION_IFSET(CPU_FTR_STCX_CHECKS_ADDRESS)
BEGIN_FTR_SECTION
/*