MIPS: Ensure pmd_present() returns false after pmd_mknotpresent()
authorHuacai Chen <chenhc@lemote.com>
Thu, 15 Nov 2018 07:53:54 +0000 (15:53 +0800)
committerPaul Burton <paul.burton@mips.com>
Wed, 21 Nov 2018 05:05:39 +0000 (21:05 -0800)
This patch is borrowed from ARM64 to ensure pmd_present() returns false
after pmd_mknotpresent(). This is needed for THP.

References: 5bb1cc0ff9a6 ("arm64: Ensure pmd_present() returns false after pmd_mknotpresent()")
Reviewed-by: James Hogan <jhogan@kernel.org>
Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/21135/
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <james.hogan@mips.com>
Cc: Steven J . Hill <Steven.Hill@cavium.com>
Cc: linux-mips@linux-mips.org
Cc: Fuxin Zhang <zhangfx@lemote.com>
Cc: Zhangjin Wu <wuzhangjin@gmail.com>
Cc: <stable@vger.kernel.org> # 3.8+
arch/mips/include/asm/pgtable-64.h

index 0036ea0c717354b4b79689c896885a1a040e0097..93a9dce31f25526e2f70f379ec3226428ed516ee 100644 (file)
@@ -265,6 +265,11 @@ static inline int pmd_bad(pmd_t pmd)
 
 static inline int pmd_present(pmd_t pmd)
 {
+#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
+       if (unlikely(pmd_val(pmd) & _PAGE_HUGE))
+               return pmd_val(pmd) & _PAGE_PRESENT;
+#endif
+
        return pmd_val(pmd) != (unsigned long) invalid_pte_table;
 }