parisc: Remove unnecessary TLB purges from flush_dcache_page_asm and flush_icache_pag...
authorJohn David Anglin <dave.anglin@bell.net>
Wed, 7 Dec 2016 03:02:01 +0000 (22:02 -0500)
committerHelge Deller <deller@gmx.de>
Wed, 7 Dec 2016 08:01:21 +0000 (09:01 +0100)
We have four routines in pacache.S that use temporary alias pages:
copy_user_page_asm(), clear_user_page_asm(), flush_dcache_page_asm() and
flush_icache_page_asm().  copy_user_page_asm() and clear_user_page_asm()
don't purge the TLB entry used for the operation.
flush_dcache_page_asm() and flush_icache_page_asm do purge the entry.

Presumably, this was thought to optimize TLB use.  However, the
operation is quite heavy weight on PA 1.X processors as we need to take
the TLB lock and a TLB broadcast is sent to all processors.

This patch removes the purges from flush_dcache_page_asm() and
flush_icache_page_asm.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Cc: <stable@vger.kernel.org> # v3.16+
Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/kernel/pacache.S

index 1b39a2acaadf43f16df3a54f3a797b029a3e06ff..adf7187f89515ec69b19461f60ce379e552397dc 100644 (file)
@@ -892,19 +892,10 @@ ENTRY_CFI(flush_dcache_page_asm)
        fdc,m           r31(%r28)
        fdc,m           r31(%r28)
        fdc,m           r31(%r28)
-       cmpb,COND(<<)           %r28, %r25,1b
+       cmpb,COND(<<)   %r28, %r25,1b
        fdc,m           r31(%r28)
 
        sync
-
-#ifdef CONFIG_PA20
-       pdtlb,l         %r0(%r25)
-#else
-       tlb_lock        %r20,%r21,%r22
-       pdtlb           %r0(%r25)
-       tlb_unlock      %r20,%r21,%r22
-#endif
-
        bv              %r0(%r2)
        nop
        .exit
@@ -979,17 +970,6 @@ ENTRY_CFI(flush_icache_page_asm)
        fic,m           %r31(%sr4,%r28)
 
        sync
-
-#ifdef CONFIG_PA20
-       pdtlb,l         %r0(%r28)
-       pitlb,l         %r0(%sr4,%r25)
-#else
-       tlb_lock        %r20,%r21,%r22
-       pdtlb           %r0(%r28)
-       pitlb           %r0(%sr4,%r25)
-       tlb_unlock      %r20,%r21,%r22
-#endif
-
        bv              %r0(%r2)
        nop
        .exit