| From d3c976c14ad8af421134c428b0a89ff8dd3bd8f8 Mon Sep 17 00:00:00 2001 |
| From: James Clarke <jrtc27@jrtc27.com> |
| Date: Wed, 29 May 2019 22:31:31 +0100 |
| Subject: sparc64: Fix regression in non-hypervisor TLB flush xcall |
| |
| From: James Clarke <jrtc27@jrtc27.com> |
| |
| commit d3c976c14ad8af421134c428b0a89ff8dd3bd8f8 upstream. |
| |
| Previously, %g2 would end up with the value PAGE_SIZE, but after the |
| commit mentioned below it ends up with the value 1 due to being reused |
| for a different purpose. We need it to be PAGE_SIZE as we use it to step |
| through pages in our demap loop, otherwise we set different flags in the |
| low 12 bits of the address written to, thereby doing things other than a |
| nucleus page flush. |
| |
| Fixes: a74ad5e660a9 ("sparc64: Handle extremely large kernel TLB range flushes more gracefully.") |
| Reported-by: Meelis Roos <mroos@linux.ee> |
| Tested-by: Meelis Roos <mroos@linux.ee> |
| Signed-off-by: James Clarke <jrtc27@jrtc27.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/sparc/mm/ultra.S | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/arch/sparc/mm/ultra.S |
| +++ b/arch/sparc/mm/ultra.S |
| @@ -587,7 +587,7 @@ xcall_flush_tlb_kernel_range: /* 44 insn |
| sub %g7, %g1, %g3 |
| srlx %g3, 18, %g2 |
| brnz,pn %g2, 2f |
| - add %g2, 1, %g2 |
| + sethi %hi(PAGE_SIZE), %g2 |
| sub %g3, %g2, %g3 |
| or %g1, 0x20, %g1 ! Nucleus |
| 1: stxa %g0, [%g1 + %g3] ASI_DMMU_DEMAP |
| @@ -751,7 +751,7 @@ __cheetah_xcall_flush_tlb_kernel_range: |
| sub %g7, %g1, %g3 |
| srlx %g3, 18, %g2 |
| brnz,pn %g2, 2f |
| - add %g2, 1, %g2 |
| + sethi %hi(PAGE_SIZE), %g2 |
| sub %g3, %g2, %g3 |
| or %g1, 0x20, %g1 ! Nucleus |
| 1: stxa %g0, [%g1 + %g3] ASI_DMMU_DEMAP |