powerpc: Relocatable system call no longer uses the LR
authorAnton Blanchard <anton@samba.org>
Tue, 26 May 2015 05:46:54 +0000 (15:46 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jun 2015 03:26:47 +0000 (13:26 +1000)
We had some code to restore the LR in the relocatable system call path
back when we used the LR to do an indirect branch.

Commit 6a404806dfce ("powerpc: Avoid link stack corruption in MMU
on syscall entry path") changed this to use the CTR which is volatile
across system calls so does not need restoring.

Remove the stale comment and the restore of the LR.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/exceptions-64s.S

index 9519e6bdc6d75c324334bf4f0f52dd6da9d9bbcc..cf8c1b55e6c8643e0bbe4c1fc7db7972460256d4 100644 (file)
@@ -59,14 +59,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE)                              \
 
 #if defined(CONFIG_RELOCATABLE)
        /*
-        * We can't branch directly; in the direct case we use LR
-        * and system_call_entry restores LR.  (We thus need to move
-        * LR to r10 in the RFID case too.)
+        * We can't branch directly so we do it via the CTR which
+        * is volatile across system calls.
         */
 #define SYSCALL_PSERIES_2_DIRECT                               \
        mflr    r10 ;                                           \
        ld      r12,PACAKBASE(r13) ;                            \
-       LOAD_HANDLER(r12, system_call_entry_direct) ;           \
+       LOAD_HANDLER(r12, system_call_entry) ;                  \
        mtctr   r12 ;                                           \
        mfspr   r12,SPRN_SRR1 ;                                 \
        /* Re-use of r13... No spare regs to do this */ \
@@ -80,7 +79,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE)                                \
        mfspr   r12,SPRN_SRR1 ;                                 \
        li      r10,MSR_RI ;                                    \
        mtmsrd  r10,1 ;                 /* Set RI (EE=0) */     \
-       b       system_call_entry_direct ;
+       b       system_call_entry ;
 #endif
 
 /*
@@ -969,13 +968,6 @@ hv_facility_unavailable_relon_trampoline:
 __end_interrupts:
 
        .align  7
-system_call_entry_direct:
-#if defined(CONFIG_RELOCATABLE)
-       /* The first level prologue may have used LR to get here, saving
-        * orig in r10.  To save hacking/ifdeffing common code, restore here.
-        */
-       mtlr    r10
-#endif
 system_call_entry:
        b       system_call_common