/* * Based on arch/arm/include/asm/memory.h * * Copyright (C) 2000-2002 Russell King * Copyright (C) 2012 ARM Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Note: this file should not be included by non-asm/.h files */ #ifndef __ASM_MEMORY_H #define __ASM_MEMORY_H #include <linux/compiler.h> #include <linux/const.h> #include <linux/types.h> #include <asm/bug.h> #include <asm/sizes.h> /* * Allow for constants defined here to be used from assembly code * by prepending the UL suffix only with actual C code compilation. */ #define UL(x) _AC(x, UL) /* * Size of the PCI I/O space. This must remain a power of two so that * IO_SPACE_LIMIT acts as a mask for the low bits of I/O addresses. */ #define PCI_IO_SIZE SZ_16M /* * Log2 of the upper bound of the size of a struct page. Used for sizing * the vmemmap region only, does not affect actual memory footprint. * We don't use sizeof(struct page) directly since taking its size here * requires its definition to be available at this point in the inclusion * chain, and it may not be a power of 2 in the first place. */ #define STRUCT_PAGE_MAX_SHIFT 6 /* * VMEMMAP_SIZE - allows the whole linear region to be covered by * a struct page array */ #define VMEMMAP_SIZE (UL(1) << (VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)) /* * PAGE_OFFSET - the virtual address of the start of the linear map (top * (VA_BITS - 1)) * KIMAGE_VADDR - the virtual address of the start of the kernel image * VA_BITS - the maximum number of bits for virtual addresses. * VA_START - the first kernel virtual address. * TASK_SIZE - the maximum size of a user space task. * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area. */ #define VA_BITS (CONFIG_ARM64_VA_BITS) #define VA_START (UL(0xffffffffffffffff) << VA_BITS) #define PAGE_OFFSET (UL(0xffffffffffffffff) << (VA_BITS - 1)) #define KIMAGE_VADDR (MODULES_END) #define MODULES_END (MODULES_VADDR + MODULES_VSIZE) #define MODULES_VADDR (VA_START + KASAN_SHADOW_SIZE) #define MODULES_VSIZE (SZ_128M) #define VMEMMAP_START (PAGE_OFFSET - VMEMMAP_SIZE) #define PCI_IO_END (VMEMMAP_START - SZ_2M) #define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE) #define FIXADDR_TOP (PCI_IO_START - SZ_2M) #define TASK_SIZE_64 (UL(1) << VA_BITS) #ifdef CONFIG_COMPAT #define TASK_SIZE_32 UL(0x100000000) #define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \ TASK_SIZE_32 : TASK_SIZE_64) #define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \ TASK_SIZE_32 : TASK_SIZE_64) #else #define TASK_SIZE TASK_SIZE_64 #endif /* CONFIG_COMPAT */ #define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 4)) #define KERNEL_START _text #define KERNEL_END _end /* * The size of the KASAN shadow region. This should be 1/8th of the * size of the entire kernel virtual address space. */ #ifdef CONFIG_KASAN #define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3)) #else #define KASAN_SHADOW_SIZE (0) #endif /* * Memory types available. */ #define MT_DEVICE_nGnRnE 0 #define MT_DEVICE_nGnRE 1 #define MT_DEVICE_GRE 2 #define MT_NORMAL_NC 3 #define MT_NORMAL 4 #define MT_NORMAL_WT 5 /* * Memory types for Stage-2 translation */ #define MT_S2_NORMAL 0xf #define MT_S2_DEVICE_nGnRE 0x1 #ifdef CONFIG_ARM64_4K_PAGES #define IOREMAP_MAX_ORDER (PUD_SHIFT) #else #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif #ifdef CONFIG_BLK_DEV_INITRD #define __early_init_dt_declare_initrd(__start, __end) \ do { \ initrd_start = (__start); \ initrd_end = (__end); \ } while (0) #endif #ifndef __ASSEMBLY__ #include <linux/bitops.h> #include <linux/mmdebug.h> extern s64 memstart_addr; /* PHYS_OFFSET - the physical address of the start of memory. */ #define PHYS_OFFSET ({ VM_BUG_ON(memstart_addr & 1); memstart_addr; }) /* the virtual base of the kernel image (minus TEXT_OFFSET) */ extern u64 kimage_vaddr; /* the offset between the kernel virtual and physical mappings */ extern u64 kimage_voffset;
static inline unsigned long kaslr_offset(void) { return kimage_vaddr - KIMAGE_VADDR; }Contributors
Person | Tokens | Prop | Commits | CommitProp |
Alexander Popov | 15 | 100.00% | 1 | 100.00% |
Total | 15 | 100.00% | 1 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Catalin Marinas | 25 | 100.00% | 1 | 100.00% |
Total | 25 | 100.00% | 1 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Catalin Marinas | 23 | 100.00% | 1 | 100.00% |
Total | 23 | 100.00% | 1 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Catalin Marinas | 200 | 35.46% | 3 | 8.57% |
Laura Abbott | 144 | 25.53% | 6 | 17.14% |
Ard Biesheuvel | 140 | 24.82% | 12 | 34.29% |
Alexander Popov | 15 | 2.66% | 1 | 2.86% |
Mark Rutland | 14 | 2.48% | 2 | 5.71% |
Marc Zyngier | 9 | 1.60% | 1 | 2.86% |
James Morse | 8 | 1.42% | 1 | 2.86% |
Thierry Reding | 8 | 1.42% | 1 | 2.86% |
Colin Cross | 7 | 1.24% | 1 | 2.86% |
Stefano Stabellini | 6 | 1.06% | 1 | 2.86% |
Andrey Ryabinin | 4 | 0.71% | 1 | 2.86% |
Jonathan (Zhixiong) Zhang | 4 | 0.71% | 1 | 2.86% |
Oleksandr Andrushchenko | 2 | 0.35% | 1 | 2.86% |
Neil Zhang | 1 | 0.18% | 1 | 2.86% |
Mark Salter | 1 | 0.18% | 1 | 2.86% |
Jungseok Lee | 1 | 0.18% | 1 | 2.86% |
Total | 564 | 100.00% | 35 | 100.00% |