]>
Commit | Line | Data |
---|---|---|
959ef981 | 1 | // SPDX-License-Identifier: GPL-2.0 |
5e656dbb BN |
2 | /* |
3 | * Copyright (c) 2008 Silicon Graphics, Inc. | |
4 | * All Rights Reserved. | |
5e656dbb BN |
5 | */ |
6 | #ifndef __KMEM_H__ | |
7 | #define __KMEM_H__ | |
8 | ||
5e656dbb BN |
9 | #define KM_NOFS 0x0004u |
10 | #define KM_MAYFAIL 0x0008u | |
11 | #define KM_LARGE 0x0010u | |
db8c0218 | 12 | #define KM_NOLOCKDEP 0x0020u |
5e656dbb | 13 | |
5c35b317 | 14 | struct kmem_cache { |
2e1394fc | 15 | int cache_unitsize; /* Size in bytes of cache unit */ |
7d10d094 DW |
16 | int allocated; /* debug: How many allocated? */ |
17 | unsigned int align; | |
2e1394fc | 18 | const char *cache_name; /* tag name */ |
7d10d094 | 19 | void (*ctor)(void *); |
5c35b317 | 20 | }; |
5e656dbb | 21 | |
d7faa18a CM |
22 | typedef unsigned int __bitwise gfp_t; |
23 | ||
24 | #define GFP_KERNEL ((__force gfp_t)0) | |
17e074de | 25 | #define GFP_NOFS ((__force gfp_t)0) |
d7faa18a | 26 | #define __GFP_NOFAIL ((__force gfp_t)0) |
5cb09fa6 | 27 | #define __GFP_NOLOCKDEP ((__force gfp_t)0) |
d7faa18a | 28 | |
17e074de CM |
29 | #define __GFP_ZERO (__force gfp_t)1 |
30 | ||
5c35b317 | 31 | struct kmem_cache * kmem_cache_create(const char *name, unsigned int size, |
7d10d094 DW |
32 | unsigned int align, unsigned int slab_flags, |
33 | void (*ctor)(void *)); | |
34 | ||
5c35b317 | 35 | static inline struct kmem_cache * |
2e1394fc | 36 | kmem_cache_init(unsigned int size, const char *name) |
7d10d094 DW |
37 | { |
38 | return kmem_cache_create(name, size, 0, 0, NULL); | |
39 | } | |
40 | ||
5c35b317 DW |
41 | extern void *kmem_cache_alloc(struct kmem_cache *, gfp_t); |
42 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | |
2e1394fc | 43 | extern int kmem_cache_destroy(struct kmem_cache *); |
5e656dbb | 44 | |
7d10d094 | 45 | static inline void |
2e1394fc | 46 | kmem_cache_free(struct kmem_cache *cache, void *ptr) |
7d10d094 | 47 | { |
2e1394fc | 48 | cache->allocated--; |
5e656dbb BN |
49 | free(ptr); |
50 | } | |
51 | ||
52 | extern void *kmem_alloc(size_t, int); | |
5cb09fa6 | 53 | extern void *kvmalloc(size_t, gfp_t); |
5e656dbb BN |
54 | extern void *kmem_zalloc(size_t, int); |
55 | ||
f8149110 | 56 | static inline void |
339c7931 BF |
57 | kmem_free(const void *ptr) { |
58 | free((void *)ptr); | |
5e656dbb BN |
59 | } |
60 | ||
8a21dbae | 61 | extern void *krealloc(void *, size_t, int); |
5e656dbb | 62 | |
7accbcd0 DW |
63 | static inline void *kmalloc(size_t size, gfp_t flags) |
64 | { | |
65 | return kvmalloc(size, flags); | |
66 | } | |
67 | ||
68 | static inline void kfree(const void *ptr) | |
69 | { | |
70 | return kmem_free(ptr); | |
71 | } | |
72 | ||
5e656dbb | 73 | #endif |