Blame view
include/linux/vmalloc.h
3.97 KB
1da177e4c
|
1 2 3 4 |
#ifndef _LINUX_VMALLOC_H #define _LINUX_VMALLOC_H #include <linux/spinlock.h> |
db64fe022
|
5 |
#include <linux/init.h> |
1da177e4c
|
6 |
#include <asm/page.h> /* pgprot_t */ |
605d9288b
|
7 |
struct vm_area_struct; /* vma defining user mapping in mm_types.h */ |
833423143
|
8 |
|
a0d40c802
|
9 |
extern bool vmap_lazy_unmap; |
605d9288b
|
10 |
/* bits in flags of vmalloc's vm_struct below */ |
1da177e4c
|
11 12 13 |
#define VM_IOREMAP 0x00000001 /* ioremap() and friends */ #define VM_ALLOC 0x00000002 /* vmalloc() */ #define VM_MAP 0x00000004 /* vmap()ed pages */ |
833423143
|
14 |
#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */ |
8757d5fa6
|
15 |
#define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */ |
1da177e4c
|
16 |
/* bits [20..32] reserved for arch specific ioremap internals */ |
fd195c49f
|
17 18 19 20 21 22 23 |
/* * 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 |
1da177e4c
|
24 |
struct vm_struct { |
2b4ac44e7
|
25 |
struct vm_struct *next; |
1da177e4c
|
26 27 28 29 30 |
void *addr; unsigned long size; unsigned long flags; struct page **pages; unsigned int nr_pages; |
ffa71f33a
|
31 |
phys_addr_t phys_addr; |
230169693
|
32 |
void *caller; |
1da177e4c
|
33 34 35 36 37 |
}; /* * Highlevel APIs for driver use */ |
db64fe022
|
38 39 40 41 42 43 44 45 46 47 48 49 |
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) { } #endif |
1da177e4c
|
50 |
extern void *vmalloc(unsigned long size); |
833423143
|
51 |
extern void *vmalloc_user(unsigned long size); |
930fc45a4
|
52 |
extern void *vmalloc_node(unsigned long size, int node); |
1da177e4c
|
53 54 |
extern void *vmalloc_exec(unsigned long size); extern void *vmalloc_32(unsigned long size); |
833423143
|
55 |
extern void *vmalloc_32_user(unsigned long size); |
dd0fc66fb
|
56 |
extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); |
930fc45a4
|
57 58 |
extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask, pgprot_t prot); |
b3bdda02a
|
59 |
extern void vfree(const void *addr); |
1da177e4c
|
60 61 62 |
extern void *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot); |
b3bdda02a
|
63 |
extern void vunmap(const void *addr); |
833423143
|
64 65 66 |
extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, unsigned long pgoff); |
1eeb66a1b
|
67 |
void vmalloc_sync_all(void); |
1da177e4c
|
68 69 70 71 |
/* * Lowlevel-APIs (not for driver use!) */ |
9585116ba
|
72 73 74 75 76 77 |
static inline size_t get_vm_area_size(const struct vm_struct *area) { /* return actual size without guard page */ return area->size - PAGE_SIZE; } |
1da177e4c
|
78 |
extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); |
230169693
|
79 80 |
extern struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags, void *caller); |
1da177e4c
|
81 82 |
extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, unsigned long start, unsigned long end); |
c29686129
|
83 84 85 86 |
extern struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, unsigned long start, unsigned long end, void *caller); |
930fc45a4
|
87 |
extern struct vm_struct *get_vm_area_node(unsigned long size, |
52fd24ca1
|
88 89 |
unsigned long flags, int node, gfp_t gfp_mask); |
b3bdda02a
|
90 |
extern struct vm_struct *remove_vm_area(const void *addr); |
c19c03fc7
|
91 |
|
1da177e4c
|
92 93 |
extern int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages); |
8fc489850
|
94 95 96 |
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); |
c19c03fc7
|
97 |
extern void unmap_kernel_range(unsigned long addr, unsigned long size); |
1da177e4c
|
98 |
|
5f4352fbf
|
99 100 101 |
/* Allocate/destroy a 'vmalloc' VM area. */ extern struct vm_struct *alloc_vm_area(size_t size); extern void free_vm_area(struct vm_struct *area); |
69beeb1d3
|
102 103 104 |
/* for /dev/kmem */ extern long vread(char *buf, char *addr, unsigned long count); extern long vwrite(char *buf, char *addr, unsigned long count); |
1da177e4c
|
105 106 107 108 109 |
/* * Internals. Dont't use.. */ extern rwlock_t vmlist_lock; extern struct vm_struct *vmlist; |
c0c0a2937
|
110 |
extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
1da177e4c
|
111 |
|
ca23e405e
|
112 113 114 115 116 |
struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, const size_t *sizes, int nr_vms, size_t align, gfp_t gfp_mask); void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); |
1da177e4c
|
117 |
#endif /* _LINUX_VMALLOC_H */ |