powerpc/64: Drop reservation-clearing ldarx in context switch
authorNicholas Piggin <npiggin@gmail.com>
Thu, 8 Jun 2017 15:36:07 +0000 (01:36 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 15 Jun 2017 06:34:39 +0000 (16:34 +1000)
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>
arch/powerpc/kernel/entry_64.S

index 91f9fdc..273a359 100644 (file)
@@ -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
 /*