Commit 1af1e8a3 authored by Max Filippov's avatar Max Filippov

xtensa: move fixmap and kmap just above the KSEG

The virtual address space between the page table and the VMALLOC region
is big enough to host KASAN shadow map and there's enough space between
the VMALLOC area and KSEG for the fixmap and kmap.
Move fixmap and kmap to the gap between VMALLOC area and KSEG, just
above the KSEG. Reorder entries in the kernel memory layout printing
code. Drop duplicate PGTABLE_START definition, use
XCHAL_PAGE_TABLE_VADDR instead.
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent d4e337fe
...@@ -69,19 +69,8 @@ Default MMUv2-compatible layout. ...@@ -69,19 +69,8 @@ Default MMUv2-compatible layout.
| Userspace | 0x00000000 TASK_SIZE | Userspace | 0x00000000 TASK_SIZE
+------------------+ 0x40000000 +------------------+ 0x40000000
+------------------+ +------------------+
| Page table | 0x80000000 | Page table | XCHAL_PAGE_TABLE_VADDR 0x80000000 XCHAL_PAGE_TABLE_SIZE
+------------------+ 0x80400000
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0xbffff000
+------------------+ +------------------+
| VMALLOC area | VMALLOC_START 0xc0000000 128MB - 64KB | VMALLOC area | VMALLOC_START 0xc0000000 128MB - 64KB
+------------------+ VMALLOC_END +------------------+ VMALLOC_END
...@@ -92,6 +81,17 @@ Default MMUv2-compatible layout. ...@@ -92,6 +81,17 @@ Default MMUv2-compatible layout.
| remap area 2 | | remap area 2 |
+------------------+ +------------------+
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0xcffff000
+------------------+
| Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xd0000000 128MB | Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xd0000000 128MB
+------------------+ +------------------+
| Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xd8000000 128MB | Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xd8000000 128MB
...@@ -109,19 +109,8 @@ Default MMUv2-compatible layout. ...@@ -109,19 +109,8 @@ Default MMUv2-compatible layout.
| Userspace | 0x00000000 TASK_SIZE | Userspace | 0x00000000 TASK_SIZE
+------------------+ 0x40000000 +------------------+ 0x40000000
+------------------+ +------------------+
| Page table | 0x80000000 | Page table | XCHAL_PAGE_TABLE_VADDR 0x80000000 XCHAL_PAGE_TABLE_SIZE
+------------------+ 0x80400000
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0x9ffff000
+------------------+ +------------------+
| VMALLOC area | VMALLOC_START 0xa0000000 128MB - 64KB | VMALLOC area | VMALLOC_START 0xa0000000 128MB - 64KB
+------------------+ VMALLOC_END +------------------+ VMALLOC_END
...@@ -132,6 +121,17 @@ Default MMUv2-compatible layout. ...@@ -132,6 +121,17 @@ Default MMUv2-compatible layout.
| remap area 2 | | remap area 2 |
+------------------+ +------------------+
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0xaffff000
+------------------+
| Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xb0000000 256MB | Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xb0000000 256MB
+------------------+ +------------------+
| Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xc0000000 256MB | Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xc0000000 256MB
...@@ -150,19 +150,8 @@ Default MMUv2-compatible layout. ...@@ -150,19 +150,8 @@ Default MMUv2-compatible layout.
| Userspace | 0x00000000 TASK_SIZE | Userspace | 0x00000000 TASK_SIZE
+------------------+ 0x40000000 +------------------+ 0x40000000
+------------------+ +------------------+
| Page table | 0x80000000 | Page table | XCHAL_PAGE_TABLE_VADDR 0x80000000 XCHAL_PAGE_TABLE_SIZE
+------------------+ 0x80400000
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0x8ffff000
+------------------+ +------------------+
| VMALLOC area | VMALLOC_START 0x90000000 128MB - 64KB | VMALLOC area | VMALLOC_START 0x90000000 128MB - 64KB
+------------------+ VMALLOC_END +------------------+ VMALLOC_END
...@@ -173,6 +162,17 @@ Default MMUv2-compatible layout. ...@@ -173,6 +162,17 @@ Default MMUv2-compatible layout.
| remap area 2 | | remap area 2 |
+------------------+ +------------------+
+------------------+ +------------------+
| KMAP area | PKMAP_BASE PTRS_PER_PTE *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
| | (4MB * DCACHE_N_COLORS)
+------------------+
| Atomic KMAP area | FIXADDR_START KM_TYPE_NR *
| | NR_CPUS *
| | DCACHE_N_COLORS *
| | PAGE_SIZE
+------------------+ FIXADDR_TOP 0x9ffff000
+------------------+
| Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xa0000000 512MB | Cached KSEG | XCHAL_KSEG_CACHED_VADDR 0xa0000000 512MB
+------------------+ +------------------+
| Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xc0000000 512MB | Uncached KSEG | XCHAL_KSEG_BYPASS_VADDR 0xc0000000 512MB
......
...@@ -44,7 +44,7 @@ enum fixed_addresses { ...@@ -44,7 +44,7 @@ enum fixed_addresses {
__end_of_fixed_addresses __end_of_fixed_addresses
}; };
#define FIXADDR_TOP (VMALLOC_START - PAGE_SIZE) #define FIXADDR_TOP (XCHAL_KSEG_CACHED_VADDR - PAGE_SIZE)
#define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
#define FIXADDR_START ((FIXADDR_TOP - FIXADDR_SIZE) & PMD_MASK) #define FIXADDR_START ((FIXADDR_TOP - FIXADDR_SIZE) & PMD_MASK)
...@@ -63,7 +63,7 @@ static __always_inline unsigned long fix_to_virt(const unsigned int idx) ...@@ -63,7 +63,7 @@ static __always_inline unsigned long fix_to_virt(const unsigned int idx)
* table. * table.
*/ */
BUILD_BUG_ON(FIXADDR_START < BUILD_BUG_ON(FIXADDR_START <
XCHAL_PAGE_TABLE_VADDR + XCHAL_PAGE_TABLE_SIZE); TLBTEMP_BASE_1 + TLBTEMP_SIZE);
BUILD_BUG_ON(idx >= __end_of_fixed_addresses); BUILD_BUG_ON(idx >= __end_of_fixed_addresses);
return __fix_to_virt(idx); return __fix_to_virt(idx);
} }
......
...@@ -72,7 +72,7 @@ static inline void *kmap(struct page *page) ...@@ -72,7 +72,7 @@ static inline void *kmap(struct page *page)
* page table. * page table.
*/ */
BUILD_BUG_ON(PKMAP_BASE < BUILD_BUG_ON(PKMAP_BASE <
XCHAL_PAGE_TABLE_VADDR + XCHAL_PAGE_TABLE_SIZE); TLBTEMP_BASE_1 + TLBTEMP_SIZE);
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
if (!PageHighMem(page)) if (!PageHighMem(page))
return page_address(page); return page_address(page);
......
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
#define MAX_LOW_PFN PHYS_PFN(0xfffffffful) #define MAX_LOW_PFN PHYS_PFN(0xfffffffful)
#endif #endif
#define PGTABLE_START 0x80000000
/* /*
* Cache aliasing: * Cache aliasing:
* *
......
...@@ -100,23 +100,23 @@ void __init mem_init(void) ...@@ -100,23 +100,23 @@ void __init mem_init(void)
mem_init_print_info(NULL); mem_init_print_info(NULL);
pr_info("virtual kernel memory layout:\n" pr_info("virtual kernel memory layout:\n"
#ifdef CONFIG_MMU
" vmalloc : 0x%08lx - 0x%08lx (%5lu MB)\n"
#endif
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
" pkmap : 0x%08lx - 0x%08lx (%5lu kB)\n" " pkmap : 0x%08lx - 0x%08lx (%5lu kB)\n"
" fixmap : 0x%08lx - 0x%08lx (%5lu kB)\n" " fixmap : 0x%08lx - 0x%08lx (%5lu kB)\n"
#endif
#ifdef CONFIG_MMU
" vmalloc : 0x%08lx - 0x%08lx (%5lu MB)\n"
#endif #endif
" lowmem : 0x%08lx - 0x%08lx (%5lu MB)\n", " lowmem : 0x%08lx - 0x%08lx (%5lu MB)\n",
#ifdef CONFIG_MMU
VMALLOC_START, VMALLOC_END,
(VMALLOC_END - VMALLOC_START) >> 20,
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
PKMAP_BASE, PKMAP_BASE + LAST_PKMAP * PAGE_SIZE, PKMAP_BASE, PKMAP_BASE + LAST_PKMAP * PAGE_SIZE,
(LAST_PKMAP*PAGE_SIZE) >> 10, (LAST_PKMAP*PAGE_SIZE) >> 10,
FIXADDR_START, FIXADDR_TOP, FIXADDR_START, FIXADDR_TOP,
(FIXADDR_TOP - FIXADDR_START) >> 10, (FIXADDR_TOP - FIXADDR_START) >> 10,
#endif #endif
#ifdef CONFIG_MMU
VMALLOC_START, VMALLOC_END,
(VMALLOC_END - VMALLOC_START) >> 20,
PAGE_OFFSET, PAGE_OFFSET + PAGE_OFFSET, PAGE_OFFSET +
(max_low_pfn - min_low_pfn) * PAGE_SIZE, (max_low_pfn - min_low_pfn) * PAGE_SIZE,
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment