cregit-Linux how code gets into the kernel

Release 4.12 include/linux/vmalloc.h

Directory: include/linux
#ifndef _LINUX_VMALLOC_H

#define _LINUX_VMALLOC_H

#include <linux/spinlock.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/llist.h>
#include <asm/page.h>		/* pgprot_t */
#include <linux/rbtree.h>

struct vm_area_struct;		/* vma defining user mapping in mm_types.h */
struct notifier_block;		/* in notifier.h */

/* bits in flags of vmalloc's vm_struct below */

#define VM_IOREMAP		0x00000001	
/* ioremap() and friends */

#define VM_ALLOC		0x00000002	
/* vmalloc() */

#define VM_MAP			0x00000004	
/* vmap()ed pages */

#define VM_USERMAP		0x00000008	
/* suitable for remap_vmalloc_range */

#define VM_UNINITIALIZED	0x00000020	
/* vm_struct is not fully initialized */

#define VM_NO_GUARD		0x00000040      
/* don't add guard page */

#define VM_KASAN		0x00000080      
/* has allocated kasan shadow memory */
/* bits [20..32] reserved for arch specific ioremap internals */

/*
 * Maximum alignment for ioremap() regions.
 * Can be overriden by arch-specific value.
 */
#ifndef IOREMAP_MAX_ORDER

#define IOREMAP_MAX_ORDER	(7 + PAGE_SHIFT)	
/* 128 pages */
#endif


struct vm_struct {
	
struct vm_struct	*next;
	
void			*addr;
	
unsigned long		size;
	
unsigned long		flags;
	
struct page		**pages;
	
unsigned int		nr_pages;
	
phys_addr_t		phys_addr;
	
const void		*caller;
};


struct vmap_area {
	
unsigned long va_start;
	
unsigned long va_end;
	
unsigned long flags;
	
struct rb_node rb_node;         /* address sorted rbtree */
	
struct list_head list;          /* address sorted list */
	
struct llist_node purge_list;    /* "lazy purge" list */
	
struct vm_struct *vm;
	
struct rcu_head rcu_head;
};

/*
 *      Highlevel APIs for driver use
 */
extern void vm_unmap_ram(const void *mem, unsigned int count);
extern void *vm_map_ram(struct page **pages, unsigned int count,
				int node, pgprot_t prot);
extern void vm_unmap_aliases(void);

#ifdef CONFIG_MMU
extern void __init vmalloc_init(void);
#else

static inline void vmalloc_init(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Nicholas Piggin8100.00%1100.00%
Total8100.00%1100.00%

#endif extern void *vmalloc(unsigned long size); extern void *vzalloc(unsigned long size); extern void *vmalloc_user(unsigned long size); extern void *vmalloc_node(unsigned long size, int node); extern void *vzalloc_node(unsigned long size, int node); extern void *vmalloc_exec(unsigned long size); extern void *vmalloc_32(unsigned long size); extern void *vmalloc_32_user(unsigned long size); extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); extern void *__vmalloc_node_range(unsigned long size, unsigned long align, unsigned long start, unsigned long end, gfp_t gfp_mask, pgprot_t prot, unsigned long vm_flags, int node, const void *caller); #ifndef CONFIG_MMU extern void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags);
static inline void *__vmalloc_node_flags_caller(unsigned long size, int node, gfp_t flags, void *caller) { return __vmalloc_node_flags(size, node, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Michal Hocko32100.00%2100.00%
Total32100.00%2100.00%

#else extern void *__vmalloc_node_flags_caller(unsigned long size, int node, gfp_t flags, void *caller); #endif extern void vfree(const void *addr); extern void vfree_atomic(const void *addr); extern void *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot); extern void vunmap(const void *addr); extern int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, void *kaddr, unsigned long size); extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, unsigned long pgoff); void vmalloc_sync_all(void); /* * Lowlevel-APIs (not for driver use!) */
static inline size_t get_vm_area_size(const struct vm_struct *area) { if (!(area->flags & VM_NO_GUARD)) /* return actual size without guard page */ return area->size - PAGE_SIZE; else return area->size; }

Contributors

PersonTokensPropCommitsCommitProp
Jeremy Fitzhardinge2155.26%150.00%
Andrey Ryabinin1744.74%150.00%
Total38100.00%2100.00%

extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); extern struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags, const void *caller); extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, unsigned long start, unsigned long end); extern struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, unsigned long start, unsigned long end, const void *caller); extern struct vm_struct *remove_vm_area(const void *addr); extern struct vm_struct *find_vm_area(const void *addr); extern int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page **pages); #ifdef CONFIG_MMU extern int map_kernel_range_noflush(unsigned long start, unsigned long size, pgprot_t prot, struct page **pages); extern void unmap_kernel_range_noflush(unsigned long addr, unsigned long size); extern void unmap_kernel_range(unsigned long addr, unsigned long size); #else
static inline int map_kernel_range_noflush(unsigned long start, unsigned long size, pgprot_t prot, struct page **pages) { return size >> PAGE_SHIFT; }

Contributors

PersonTokensPropCommitsCommitProp
Graf Yang29100.00%1100.00%
Total29100.00%1100.00%


static inline void unmap_kernel_range_noflush(unsigned long addr, unsigned long size) { }

Contributors

PersonTokensPropCommitsCommitProp
Graf Yang14100.00%1100.00%
Total14100.00%1100.00%


static inline void unmap_kernel_range(unsigned long addr, unsigned long size) { }

Contributors

PersonTokensPropCommitsCommitProp
Graf Yang14100.00%1100.00%
Total14100.00%1100.00%

#endif /* Allocate/destroy a 'vmalloc' VM area. */ extern struct vm_struct *alloc_vm_area(size_t size, pte_t **ptes); extern void free_vm_area(struct vm_struct *area); /* for /dev/kmem */ extern long vread(char *buf, char *addr, unsigned long count); extern long vwrite(char *buf, char *addr, unsigned long count); /* * Internals. Dont't use.. */ 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); #ifdef CONFIG_SMP # ifdef CONFIG_MMU struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, const size_t *sizes, int nr_vms, size_t align); void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); # else
static inline struct vm_struct ** pcpu_get_vm_areas(const unsigned long *offsets, const size_t *sizes, int nr_vms, size_t align) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Graf Yang30100.00%1100.00%
Total30100.00%1100.00%


static inline void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms) { }

Contributors

PersonTokensPropCommitsCommitProp
Graf Yang15100.00%1100.00%
Total15100.00%1100.00%

# endif #endif #ifdef CONFIG_MMU #define VMALLOC_TOTAL (VMALLOC_END - VMALLOC_START) #else #define VMALLOC_TOTAL 0UL #endif int register_vmap_purge_notifier(struct notifier_block *nb); int unregister_vmap_purge_notifier(struct notifier_block *nb); #endif /* _LINUX_VMALLOC_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Graf Yang11611.08%11.64%
Nicholas Piggin11510.98%23.28%
Tejun Heo918.69%58.20%
Linus Torvalds (pre-git)918.69%813.11%
Michal Hocko757.16%34.92%
Christoph Hellwig666.30%23.28%
Atsushi Kumagai464.39%11.64%
Jeremy Fitzhardinge424.01%23.28%
Andrey Ryabinin413.92%46.56%
Christoph Lameter393.72%34.92%
Benjamin Herrenschmidt353.34%23.28%
Motohiro Kosaki353.34%11.64%
Nico Pitre343.25%23.28%
Chris Wilson262.48%23.28%
David Rientjes232.20%11.64%
Dave Young232.20%11.64%
Daisuke Hatayama222.10%11.64%
Andrew Morton212.01%23.28%
JoonSoo Kim171.62%23.28%
Marek Szyprowski161.53%23.28%
Andi Kleen131.24%23.28%
Deepak Saxena111.05%11.64%
Oleg Nesterov111.05%11.64%
Ingo Molnar100.96%11.64%
David Vrabel50.48%11.64%
Eric Dumazet50.48%11.64%
Tom Rini40.38%11.64%
Rusty Russell40.38%11.64%
Mitsuo Hayasaka30.29%11.64%
Hugh Dickins20.19%11.64%
Al Viro20.19%11.64%
Zhang Yanfei20.19%11.64%
Kenji Kaneshige10.10%11.64%
Total1047100.00%61100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.