powerpc/8xx: Save r3 all the time in DTLB miss handler
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 9 Feb 2016 16:07:48 +0000 (17:07 +0100)
committerScott Wood <oss@buserror.net>
Fri, 11 Mar 2016 23:18:01 +0000 (17:18 -0600)
We are spending between 40 and 160 cycles with a mean of 65 cycles in
the DTLB handling routine (measured with mftbl) so make it more
simple althought it adds one instruction.
With this modification, we get three registers available at all time,
which will help with following patch.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Scott Wood <oss@buserror.net>
arch/powerpc/kernel/head_8xx.S

index e629e28b57e1a16076381bde2f2cb5b72044b2c8..a89492eb6e46f4da4b98bbf4b86f7d7949da0ec1 100644 (file)
@@ -385,23 +385,20 @@ InstructionTLBMiss:
 
        . = 0x1200
 DataStoreTLBMiss:
-#ifdef CONFIG_8xx_CPU6
        mtspr   SPRN_SPRG_SCRATCH2, r3
-#endif
        EXCEPTION_PROLOG_0
-       mfcr    r10
+       mfcr    r3
 
        /* If we are faulting a kernel address, we have to use the
         * kernel page tables.
         */
-       mfspr   r11, SPRN_MD_EPN
-       IS_KERNEL(r11, r11)
+       mfspr   r10, SPRN_MD_EPN
+       IS_KERNEL(r11, r10)
        mfspr   r11, SPRN_M_TW  /* Get level 1 table */
        BRANCH_UNLESS_KERNEL(3f)
        lis     r11, (swapper_pg_dir-PAGE_OFFSET)@ha
 3:
-       mtcr    r10
-       mfspr   r10, SPRN_MD_EPN
+       mtcr    r3
 
        /* Insert level 1 index */
        rlwimi  r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
@@ -453,9 +450,7 @@ DataStoreTLBMiss:
        MTSPR_CPU6(SPRN_MD_RPN, r10, r3)        /* Update TLB entry */
 
        /* Restore registers */
-#ifdef CONFIG_8xx_CPU6
        mfspr   r3, SPRN_SPRG_SCRATCH2
-#endif
        mtspr   SPRN_DAR, r11   /* Tag DAR */
        EXCEPTION_EPILOG_0
        rfi