Added headers and macros to support IB core on RHEL7.4
[compat-rdma/compat.git] / include / linux / mm.h
1 #ifndef _COMPAT_LINUX_MM_H
2 #define _COMPAT_LINUX_MM_H
3
4 #include "../../compat/config.h"
5
6 #include_next <linux/mm.h>
7
8 #ifndef HAVE_KVZALLOC
9 #include <linux/vmalloc.h>
10 #include <linux/slab.h>
11
12 static inline void *kvzalloc(unsigned long size,...) {
13         void *rtn;
14
15         rtn = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
16         if (!rtn)
17                 rtn = vzalloc(size);
18         return rtn;
19 }
20 #endif
21
22 #ifndef HAVE_KVMALLOC_ARRAY
23 #include <linux/vmalloc.h>
24 #include <linux/slab.h>
25
26 static inline void *kvmalloc_array(size_t n, size_t size,...) {
27         void *rtn;
28
29         rtn = kcalloc(n, size, GFP_KERNEL | __GFP_NOWARN);
30         if (!rtn)
31                 rtn = vzalloc(n * size);
32         return rtn;
33 }
34 #endif
35
36 #ifndef HAVE_KVMALLOC_NODE
37 #include <linux/vmalloc.h>
38 #include <linux/slab.h>
39
40 static inline void *kvmalloc_node(size_t size, gfp_t flags, int node) {
41         void *rtn;
42
43         rtn = kmalloc_node(size, GFP_KERNEL | __GFP_NOWARN, node);
44         if (!rtn)
45                 rtn = vmalloc(size);
46         return rtn;
47 }
48 #endif
49
50 #ifndef HAVE_KVZALLOC_NODE
51 #include <linux/vmalloc.h>
52 #include <linux/slab.h>
53
54 static inline void *kvzalloc_node(size_t size, gfp_t flags, int node)
55 {
56         void *p = kvmalloc_node(size, flags, node);
57         if (p)
58                 memset(p, 0, size);
59         return p;
60 }
61 #endif
62
63 #endif /* _COMPAT_LINUX_MM_H */