146 lines
4.8 KiB
Diff
146 lines
4.8 KiB
Diff
From 5433a5c4594266e044e5def48275f2cb493709e0 Mon Sep 17 00:00:00 2001
|
||
From: Atish Patra <atish.patra@wdc.com>
|
||
Date: Mon, 24 Feb 2020 11:34:36 -0800
|
||
Subject: [PATCH] RISC-V: Move all address space definition macros to one place
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
If both CONFIG_KASAN and CONFIG_SPARSEMEM_VMEMMAP are set, we get the
|
||
following compilation error.
|
||
|
||
---------------------------------------------------------------
|
||
./arch/riscv/include/asm/pgtable-64.h: In function ‘pud_page’:
|
||
./include/asm-generic/memory_model.h:54:29: error: ‘vmemmap’ undeclared
|
||
(first use in this function); did you mean ‘mem_map’?
|
||
#define __pfn_to_page(pfn) (vmemmap + (pfn))
|
||
^~~~~~~
|
||
./include/asm-generic/memory_model.h:82:21: note: in expansion of
|
||
macro ‘__pfn_to_page’
|
||
|
||
#define pfn_to_page __pfn_to_page
|
||
^~~~~~~~~~~~~
|
||
./arch/riscv/include/asm/pgtable-64.h:70:9: note: in expansion of macro
|
||
‘pfn_to_page’
|
||
return pfn_to_page(pud_val(pud) >> _PAGE_PFN_SHIFT);
|
||
---------------------------------------------------------------
|
||
|
||
Fix the compliation errors by moving all the address space definition
|
||
macros before including pgtable-64.h.
|
||
|
||
Cc: stable@vger.kernel.org
|
||
Fixes: 8ad8b72721d0 (riscv: Add KASAN support)
|
||
|
||
Signed-off-by: Atish Patra <atish.patra@wdc.com>
|
||
Reviewed-by: Anup Patel <anup@brainfault.org>
|
||
---
|
||
arch/riscv/include/asm/pgtable.h | 78 +++++++++++++++++---------------
|
||
1 file changed, 41 insertions(+), 37 deletions(-)
|
||
|
||
diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
|
||
index e430415..393f201 100644
|
||
--- a/arch/riscv/include/asm/pgtable.h
|
||
+++ b/arch/riscv/include/asm/pgtable.h
|
||
@@ -19,6 +19,47 @@
|
||
#include <asm/tlbflush.h>
|
||
#include <linux/mm_types.h>
|
||
|
||
+#ifdef CONFIG_MMU
|
||
+
|
||
+#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
|
||
+#define VMALLOC_END (PAGE_OFFSET - 1)
|
||
+#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
|
||
+
|
||
+#define BPF_JIT_REGION_SIZE (SZ_128M)
|
||
+#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
|
||
+#define BPF_JIT_REGION_END (VMALLOC_END)
|
||
+
|
||
+/*
|
||
+ * Roughly size the vmemmap space to be large enough to fit enough
|
||
+ * struct pages to map half the virtual address space. Then
|
||
+ * position vmemmap directly below the VMALLOC region.
|
||
+ */
|
||
+#define VMEMMAP_SHIFT \
|
||
+ (CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
|
||
+#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
|
||
+#define VMEMMAP_END (VMALLOC_START - 1)
|
||
+#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
|
||
+
|
||
+/*
|
||
+ * Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
|
||
+ * is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
|
||
+ */
|
||
+#define vmemmap ((struct page *)VMEMMAP_START)
|
||
+
|
||
+#define PCI_IO_SIZE SZ_16M
|
||
+#define PCI_IO_END VMEMMAP_START
|
||
+#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
|
||
+
|
||
+#define FIXADDR_TOP PCI_IO_START
|
||
+#ifdef CONFIG_64BIT
|
||
+#define FIXADDR_SIZE PMD_SIZE
|
||
+#else
|
||
+#define FIXADDR_SIZE PGDIR_SIZE
|
||
+#endif
|
||
+#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
|
||
+
|
||
+#endif
|
||
+
|
||
#ifdef CONFIG_64BIT
|
||
#include <asm/pgtable-64.h>
|
||
#else
|
||
@@ -90,31 +131,6 @@ extern pgd_t swapper_pg_dir[];
|
||
#define __S110 PAGE_SHARED_EXEC
|
||
#define __S111 PAGE_SHARED_EXEC
|
||
|
||
-#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
|
||
-#define VMALLOC_END (PAGE_OFFSET - 1)
|
||
-#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
|
||
-
|
||
-#define BPF_JIT_REGION_SIZE (SZ_128M)
|
||
-#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
|
||
-#define BPF_JIT_REGION_END (VMALLOC_END)
|
||
-
|
||
-/*
|
||
- * Roughly size the vmemmap space to be large enough to fit enough
|
||
- * struct pages to map half the virtual address space. Then
|
||
- * position vmemmap directly below the VMALLOC region.
|
||
- */
|
||
-#define VMEMMAP_SHIFT \
|
||
- (CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
|
||
-#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
|
||
-#define VMEMMAP_END (VMALLOC_START - 1)
|
||
-#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
|
||
-
|
||
-/*
|
||
- * Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
|
||
- * is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
|
||
- */
|
||
-#define vmemmap ((struct page *)VMEMMAP_START)
|
||
-
|
||
static inline int pmd_present(pmd_t pmd)
|
||
{
|
||
return (pmd_val(pmd) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
|
||
@@ -432,18 +448,6 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
|
||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
|
||
#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
|
||
|
||
-#define PCI_IO_SIZE SZ_16M
|
||
-#define PCI_IO_END VMEMMAP_START
|
||
-#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
|
||
-
|
||
-#define FIXADDR_TOP PCI_IO_START
|
||
-#ifdef CONFIG_64BIT
|
||
-#define FIXADDR_SIZE PMD_SIZE
|
||
-#else
|
||
-#define FIXADDR_SIZE PGDIR_SIZE
|
||
-#endif
|
||
-#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
|
||
-
|
||
/*
|
||
* Task size is 0x4000000000 for RV64 or 0x9fc00000 for RV32.
|
||
* Note that PGDIR_SIZE must evenly divide TASK_SIZE.
|
||
--
|
||
2.26.0.rc2
|
||
|