Loading arch/arm/mm/mmu.c +1 −0 Original line number Diff line number Diff line Loading @@ -1463,6 +1463,7 @@ static void __init map_lowmem(void) vm->flags |= VM_ARM_MTYPE(type); vm->caller = map_lowmem; add_static_vm_early(svm++); mark_vmalloc_reserved_area(vm->addr, vm->size); } } Loading include/linux/mm.h +6 −6 Original line number Diff line number Diff line Loading @@ -359,16 +359,16 @@ unsigned long vmalloc_to_pfn(const void *addr); * On nommu, vmalloc/vfree wrap through kmalloc/kfree directly, so there * is no special casing required. */ static inline int is_vmalloc_addr(const void *x) { #ifdef CONFIG_MMU unsigned long addr = (unsigned long)x; return addr >= VMALLOC_START && addr < VMALLOC_END; #ifdef CONFIG_MMU extern int is_vmalloc_addr(const void *x); #else static inline int is_vmalloc_addr(const void *x) { return 0; #endif } #endif #ifdef CONFIG_MMU extern int is_vmalloc_or_module_addr(const void *x); #else Loading include/linux/vmalloc.h +11 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ extern struct list_head vmap_area_list; extern __init void vm_area_add_early(struct vm_struct *vm); extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); extern __init int vm_area_check_early(struct vm_struct *vm); #ifdef CONFIG_ENABLE_VMALLOC_SAVING extern void mark_vmalloc_reserved_area(void *addr, unsigned long size); #else static inline void mark_vmalloc_reserved_area(void *addr, unsigned long size) { }; #endif #ifdef CONFIG_SMP # ifdef CONFIG_MMU Loading Loading @@ -191,7 +197,12 @@ struct vmalloc_info { }; #ifdef CONFIG_MMU #ifdef CONFIG_ENABLE_VMALLOC_SAVING extern unsigned long total_vmalloc_size; #define VMALLOC_TOTAL total_vmalloc_size #else #define VMALLOC_TOTAL (VMALLOC_END - VMALLOC_START) #endif extern void get_vmalloc_info(struct vmalloc_info *vmi); #else Loading mm/vmalloc.c +55 −1 Original line number Diff line number Diff line Loading @@ -284,6 +284,57 @@ static unsigned long cached_align; static unsigned long vmap_area_pcpu_hole; #ifdef CONFIG_ENABLE_VMALLOC_SAVING #define POSSIBLE_VMALLOC_START PAGE_OFFSET #define VMALLOC_BITMAP_SIZE ((VMALLOC_END - PAGE_OFFSET) >> \ PAGE_SHIFT) #define VMALLOC_TO_BIT(addr) ((addr - PAGE_OFFSET) >> PAGE_SHIFT) #define BIT_TO_VMALLOC(i) (PAGE_OFFSET + i * PAGE_SIZE) unsigned long total_vmalloc_size; unsigned long vmalloc_reserved; DECLARE_BITMAP(possible_areas, VMALLOC_BITMAP_SIZE); void mark_vmalloc_reserved_area(void *x, unsigned long size) { unsigned long addr = (unsigned long)x; bitmap_set(possible_areas, VMALLOC_TO_BIT(addr), size >> PAGE_SHIFT); vmalloc_reserved += size; } int is_vmalloc_addr(const void *x) { unsigned long addr = (unsigned long)x; if (addr < POSSIBLE_VMALLOC_START || addr >= VMALLOC_END) return 0; if (test_bit(VMALLOC_TO_BIT(addr), possible_areas)) return 0; return 1; } static void calc_total_vmalloc_size(void) { total_vmalloc_size = VMALLOC_END - POSSIBLE_VMALLOC_START - vmalloc_reserved; } #else int is_vmalloc_addr(const void *x) { unsigned long addr = (unsigned long)x; return addr >= VMALLOC_START && addr < VMALLOC_END; } static void calc_total_vmalloc_size(void) { } #endif EXPORT_SYMBOL(is_vmalloc_addr); static struct vmap_area *__find_vmap_area(unsigned long addr) { struct rb_node *n = vmap_area_root.rb_node; Loading Loading @@ -1230,7 +1281,7 @@ void __init vmalloc_init(void) } vmap_area_pcpu_hole = VMALLOC_END; calc_total_vmalloc_size(); vmap_initialized = true; } Loading Loading @@ -2671,6 +2722,9 @@ static int s_show(struct seq_file *m, void *p) if (v->flags & VM_VPAGES) seq_puts(m, " vpages"); if (v->flags & VM_LOWMEM) seq_puts(m, " lowmem"); show_numa_info(m, v); seq_putc(m, '\n'); return 0; Loading Loading
arch/arm/mm/mmu.c +1 −0 Original line number Diff line number Diff line Loading @@ -1463,6 +1463,7 @@ static void __init map_lowmem(void) vm->flags |= VM_ARM_MTYPE(type); vm->caller = map_lowmem; add_static_vm_early(svm++); mark_vmalloc_reserved_area(vm->addr, vm->size); } } Loading
include/linux/mm.h +6 −6 Original line number Diff line number Diff line Loading @@ -359,16 +359,16 @@ unsigned long vmalloc_to_pfn(const void *addr); * On nommu, vmalloc/vfree wrap through kmalloc/kfree directly, so there * is no special casing required. */ static inline int is_vmalloc_addr(const void *x) { #ifdef CONFIG_MMU unsigned long addr = (unsigned long)x; return addr >= VMALLOC_START && addr < VMALLOC_END; #ifdef CONFIG_MMU extern int is_vmalloc_addr(const void *x); #else static inline int is_vmalloc_addr(const void *x) { return 0; #endif } #endif #ifdef CONFIG_MMU extern int is_vmalloc_or_module_addr(const void *x); #else Loading
include/linux/vmalloc.h +11 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ extern struct list_head vmap_area_list; extern __init void vm_area_add_early(struct vm_struct *vm); extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); extern __init int vm_area_check_early(struct vm_struct *vm); #ifdef CONFIG_ENABLE_VMALLOC_SAVING extern void mark_vmalloc_reserved_area(void *addr, unsigned long size); #else static inline void mark_vmalloc_reserved_area(void *addr, unsigned long size) { }; #endif #ifdef CONFIG_SMP # ifdef CONFIG_MMU Loading Loading @@ -191,7 +197,12 @@ struct vmalloc_info { }; #ifdef CONFIG_MMU #ifdef CONFIG_ENABLE_VMALLOC_SAVING extern unsigned long total_vmalloc_size; #define VMALLOC_TOTAL total_vmalloc_size #else #define VMALLOC_TOTAL (VMALLOC_END - VMALLOC_START) #endif extern void get_vmalloc_info(struct vmalloc_info *vmi); #else Loading
mm/vmalloc.c +55 −1 Original line number Diff line number Diff line Loading @@ -284,6 +284,57 @@ static unsigned long cached_align; static unsigned long vmap_area_pcpu_hole; #ifdef CONFIG_ENABLE_VMALLOC_SAVING #define POSSIBLE_VMALLOC_START PAGE_OFFSET #define VMALLOC_BITMAP_SIZE ((VMALLOC_END - PAGE_OFFSET) >> \ PAGE_SHIFT) #define VMALLOC_TO_BIT(addr) ((addr - PAGE_OFFSET) >> PAGE_SHIFT) #define BIT_TO_VMALLOC(i) (PAGE_OFFSET + i * PAGE_SIZE) unsigned long total_vmalloc_size; unsigned long vmalloc_reserved; DECLARE_BITMAP(possible_areas, VMALLOC_BITMAP_SIZE); void mark_vmalloc_reserved_area(void *x, unsigned long size) { unsigned long addr = (unsigned long)x; bitmap_set(possible_areas, VMALLOC_TO_BIT(addr), size >> PAGE_SHIFT); vmalloc_reserved += size; } int is_vmalloc_addr(const void *x) { unsigned long addr = (unsigned long)x; if (addr < POSSIBLE_VMALLOC_START || addr >= VMALLOC_END) return 0; if (test_bit(VMALLOC_TO_BIT(addr), possible_areas)) return 0; return 1; } static void calc_total_vmalloc_size(void) { total_vmalloc_size = VMALLOC_END - POSSIBLE_VMALLOC_START - vmalloc_reserved; } #else int is_vmalloc_addr(const void *x) { unsigned long addr = (unsigned long)x; return addr >= VMALLOC_START && addr < VMALLOC_END; } static void calc_total_vmalloc_size(void) { } #endif EXPORT_SYMBOL(is_vmalloc_addr); static struct vmap_area *__find_vmap_area(unsigned long addr) { struct rb_node *n = vmap_area_root.rb_node; Loading Loading @@ -1230,7 +1281,7 @@ void __init vmalloc_init(void) } vmap_area_pcpu_hole = VMALLOC_END; calc_total_vmalloc_size(); vmap_initialized = true; } Loading Loading @@ -2671,6 +2722,9 @@ static int s_show(struct seq_file *m, void *p) if (v->flags & VM_VPAGES) seq_puts(m, " vpages"); if (v->flags & VM_LOWMEM) seq_puts(m, " lowmem"); show_numa_info(m, v); seq_putc(m, '\n'); return 0; Loading