To keep balance in future, remember to pte_unmap() after a successful
pte_offset_map().  And act as if get_pte_for_vaddr() really needs a map
there, to read the pteval before "unmapping", to be sure page table is
not removed.

Signed-off-by: Hugh Dickins <hu...@google.com>
---
 arch/xtensa/mm/tlb.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/xtensa/mm/tlb.c b/arch/xtensa/mm/tlb.c
index 27a477dae232..0a11fc5f185b 100644
--- a/arch/xtensa/mm/tlb.c
+++ b/arch/xtensa/mm/tlb.c
@@ -179,6 +179,7 @@ static unsigned get_pte_for_vaddr(unsigned vaddr)
        pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
+       unsigned int pteval;
 
        if (!mm)
                mm = task->active_mm;
@@ -197,7 +198,9 @@ static unsigned get_pte_for_vaddr(unsigned vaddr)
        pte = pte_offset_map(pmd, vaddr);
        if (!pte)
                return 0;
-       return pte_val(*pte);
+       pteval = pte_val(*pte);
+       pte_unmap(pte);
+       return pteval;
 }
 
 enum {
-- 
2.35.3

Reply via email to