riscv: add ARCH_SUPPORTS_DEBUG_PAGEALLOC support
authorZong Li <zong.li@sifive.com>
Mon, 9 Mar 2020 16:55:38 +0000 (00:55 +0800)
committerPalmer Dabbelt <palmerdabbelt@google.com>
Thu, 26 Mar 2020 16:24:36 +0000 (09:24 -0700)
ARCH_SUPPORTS_DEBUG_PAGEALLOC provides a hook to map and unmap
pages for debugging purposes. Implement the __kernel_map_pages
functions to fill the poison pattern.

Signed-off-by: Zong Li <zong.li@sifive.com>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
arch/riscv/Kconfig
arch/riscv/mm/pageattr.c

index 34fc745..31fbc6e 100644 (file)
@@ -131,6 +131,9 @@ config ARCH_SELECT_MEMORY_MODEL
 config ARCH_WANT_GENERAL_HUGETLB
        def_bool y
 
+config ARCH_SUPPORTS_DEBUG_PAGEALLOC
+       def_bool y
+
 config SYS_SUPPORTS_HUGETLBFS
        def_bool y
 
index 7be6cd6..728759e 100644 (file)
@@ -172,3 +172,16 @@ int set_direct_map_default_noflush(struct page *page)
 
        return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
 }
+
+void __kernel_map_pages(struct page *page, int numpages, int enable)
+{
+       if (!debug_pagealloc_enabled())
+               return;
+
+       if (enable)
+               __set_memory((unsigned long)page_address(page), numpages,
+                            __pgprot(_PAGE_PRESENT), __pgprot(0));
+       else
+               __set_memory((unsigned long)page_address(page), numpages,
+                            __pgprot(0), __pgprot(_PAGE_PRESENT));
+}