Commit 1c4664fa authored by Max Filippov's avatar Max Filippov
Browse files

xtensa: define update_mmu_tlb function



Before the commit f9ce0be7 ("mm: Cleanup faultaround and finish_fault()
codepaths") there was a call to update_mmu_cache in alloc_set_pte that
used to invalidate TLB entry caching invalid PTE that caused a page
fault. That commit removed that call so now invalid TLB entry survives
causing repetitive page faults on the CPU that took the initial fault
until that TLB entry is occasionally evicted. This issue is spotted by
the xtensa TLB sanity checker.

Fix this issue by defining update_mmu_tlb function that flushes TLB entry
for the faulting address.

Cc: stable@vger.kernel.org # 5.12+
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent a3d0245c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -411,6 +411,10 @@ extern void update_mmu_cache(struct vm_area_struct * vma,

typedef pte_t *pte_addr_t;

void update_mmu_tlb(struct vm_area_struct *vma,
		    unsigned long address, pte_t *ptep);
#define __HAVE_ARCH_UPDATE_MMU_TLB

#endif /* !defined (__ASSEMBLY__) */

#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
+6 −0
Original line number Diff line number Diff line
@@ -162,6 +162,12 @@ void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
	}
}

void update_mmu_tlb(struct vm_area_struct *vma,
		    unsigned long address, pte_t *ptep)
{
	local_flush_tlb_page(vma, address);
}

#ifdef CONFIG_DEBUG_TLB_SANITY

static unsigned get_pte_for_vaddr(unsigned vaddr)