xtensa: don't leave invalid TLB entry in fast_store_prohibited
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 23 Apr 2022 10:52:23 +0000 (03:52 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 2 May 2022 02:58:12 +0000 (19:58 -0700)
When fast_store_prohibited needs to go to the C-level exception handler
it leaves TLB entry that caused page fault in the TLB. If the faulting
task gets switched to a different CPU and completes page table update
there the TLB entry will get out of sync with the page table which may
cause a livelock on access to that page.
Invalidate faulting TLB entry on a slow path exit from the
fast_store_prohibited.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/kernel/entry.S

index d703ed3..7852481 100644 (file)
@@ -1882,7 +1882,11 @@ ENTRY(fast_store_prohibited)
        j       8b
 
 2:     /* If there was a problem, handle fault in C */
-
+       rsr     a1, excvaddr
+       pdtlb   a0, a1
+       bbci.l  a0, DTLB_HIT_BIT, 1f
+       idtlb   a0
+1:
        rsr     a3, depc        # still holds a2
        s32i    a3, a2, PT_AREG2
        mov     a1, a2