]> git.sesse.net Git - bcachefs-tools-debian/blob - include/linux/slab.h
bcache in userspace; userspace fsck
[bcachefs-tools-debian] / include / linux / slab.h
1 #ifndef __TOOLS_LINUX_SLAB_H
2 #define __TOOLS_LINUX_SLAB_H
3
4 #include <malloc.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 #include <linux/kernel.h>
9 #include <linux/page.h>
10 #include <linux/types.h>
11
12 #define ARCH_KMALLOC_MINALIGN           16
13 #define KMALLOC_MAX_SIZE                SIZE_MAX
14
15 static inline void *kmalloc(size_t size, gfp_t flags)
16 {
17         void *p = malloc(size);
18
19         if (p && (flags & __GFP_ZERO))
20                 memset(p, 0, size);
21
22         return p;
23 }
24
25 static inline void *krealloc(void *old, size_t size, gfp_t flags)
26 {
27         void *new = kmalloc(size, flags);
28
29         if (new && (flags & __GFP_ZERO))
30                 memset(new, 0, size);
31
32         if (new) {
33                 memcpy(new, old,
34                        min(malloc_usable_size(old),
35                            malloc_usable_size(new)));
36                 free(old);
37         }
38
39         return new;
40 }
41
42 #define kzalloc(size, flags)            calloc(1, size)
43 #define kcalloc(n, size, flags)         calloc(n, size)
44 #define kmalloc_array(n, size, flags)   calloc(n, size)
45
46 #define vmalloc(size)                   malloc(size)
47 #define vzalloc(size)                   calloc(1, size)
48
49 #define kfree(p)                        free(p)
50 #define kvfree(p)                       free(p)
51 #define kzfree(p)                       free(p)
52
53 static inline struct page *alloc_pages(gfp_t flags, unsigned int order)
54 {
55         size_t size = PAGE_SIZE << order;
56         void *p = memalign(PAGE_SIZE, size);
57
58         if (p && (flags & __GFP_ZERO))
59                 memset(p, 0, size);
60
61         return p;
62 }
63
64 #define alloc_page(gfp)                 alloc_pages(gfp, 0)
65
66 #define __get_free_pages(gfp, order)    ((unsigned long) alloc_pages(gfp, order))
67 #define __get_free_page(gfp)            __get_free_pages(gfp, 0)
68
69 #define __free_pages(page, order)                       \
70 do {                                                    \
71         (void) order;                                   \
72         free(page);                                     \
73 } while (0)
74
75 #define free_pages(addr, order)                         \
76 do {                                                    \
77         (void) order;                                   \
78         free((void *) (addr));                          \
79 } while (0)
80
81 #define __free_page(page) __free_pages((page), 0)
82 #define free_page(addr) free_pages((addr), 0)
83
84 #define VM_IOREMAP              0x00000001      /* ioremap() and friends */
85 #define VM_ALLOC                0x00000002      /* vmalloc() */
86 #define VM_MAP                  0x00000004      /* vmap()ed pages */
87 #define VM_USERMAP              0x00000008      /* suitable for remap_vmalloc_range */
88 #define VM_UNINITIALIZED        0x00000020      /* vm_struct is not fully initialized */
89 #define VM_NO_GUARD             0x00000040      /* don't add guard page */
90 #define VM_KASAN                0x00000080      /* has allocated kasan shadow memory */
91
92 #define PAGE_KERNEL             0
93
94 static inline void vunmap(const void *addr) {}
95
96 static inline void *vmap(struct page **pages, unsigned int count,
97                          unsigned long flags, unsigned prot)
98 {
99         return page_address(pages[0]);
100 }
101
102 #define is_vmalloc_addr(page)           0
103
104 #define vmalloc_to_page(addr)           ((struct page *) (addr))
105
106 #endif /* __TOOLS_LINUX_SLAB_H */