summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2018-10-02 10:16:52 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2018-10-08 08:36:58 +0200
commitedf126f64901c6457ff1afd2d2d63234842873b8 (patch)
tree8dbd777a5028282ef7b08285f6b4f94049ef844b /include/linux
parent7324242de921f3820e7da843f19bf49eca9502db (diff)
downloadbarebox-edf126f64901c6457ff1afd2d2d63234842873b8.tar.gz
barebox-edf126f64901c6457ff1afd2d2d63234842873b8.tar.xz
Add linux/slab.h
Move stuff we already have in include/linux/barebox-wrapper.h that really belongs to include/linux/slab.h to there. Also add kmem_cache_* functions. UBIFS uses them in there own implementation, so we have to remove it there. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/barebox-wrapper.h13
-rw-r--r--include/linux/slab.h104
-rw-r--r--include/linux/types.h3
3 files changed, 108 insertions, 12 deletions
diff --git a/include/linux/barebox-wrapper.h b/include/linux/barebox-wrapper.h
index b57c58cfb6..e998932d12 100644
--- a/include/linux/barebox-wrapper.h
+++ b/include/linux/barebox-wrapper.h
@@ -3,16 +3,10 @@
#include <malloc.h>
#include <xfuncs.h>
+#include <linux/slab.h>
-#define kmalloc(len, mode) malloc(len)
-#define kzalloc(len, mode) xzalloc(len)
-#define kcalloc(n, len, mode) xzalloc(n * len)
#define vmalloc(len) malloc(len)
#define __vmalloc(len, mode, pgsz) malloc(len)
-static inline void kfree(const void *block)
-{
- free((void *)block);
-}
#define vzalloc(len) kzalloc(len, 0)
static inline void vfree(const void *addr)
{
@@ -29,11 +23,6 @@ static inline void vfree(const void *addr)
#define KERN_DEBUG "" /* debug-level messages */
#define KERN_CONT ""
-#define GFP_KERNEL ((gfp_t) 0)
-#define GFP_NOFS ((gfp_t) 1)
-
-typedef int gfp_t;
-
#define printk printf
#define pr_warn pr_warning
diff --git a/include/linux/slab.h b/include/linux/slab.h
new file mode 100644
index 0000000000..806d5bfb21
--- /dev/null
+++ b/include/linux/slab.h
@@ -0,0 +1,104 @@
+#ifndef _LINUX_SLAB_H
+#define _LINUX_SLAB_H
+
+#define SLAB_CONSISTENCY_CHECKS 0
+#define SLAB_RED_ZONE 0
+#define SLAB_POISON 0
+#define SLAB_HWCACHE_ALIGN 0
+#define SLAB_CACHE_DMA 0
+#define SLAB_STORE_USER 0
+#define SLAB_PANIC 0
+#define SLAB_TYPESAFE_BY_RCU 0
+#define SLAB_MEM_SPREAD 0
+#define SLAB_TRACE 0
+#define SLAB_DEBUG_OBJECTS 0
+#define SLAB_NOLEAKTRACE 0
+#define SLAB_FAILSLAB 0
+#define SLAB_ACCOUNT 0
+#define SLAB_KASAN 0
+#define SLAB_RECLAIM_ACCOUNT 0
+#define SLAB_TEMPORARY 0
+
+/* unused in barebox, just bogus values */
+#define GFP_KERNEL 0
+#define GFP_NOFS 0
+#define GFP_USER 0
+#define __GFP_NOWARN 0
+
+static inline void *kmalloc(size_t size, gfp_t flags)
+{
+ return malloc(size);
+}
+
+struct kmem_cache {
+ unsigned int size;
+ void (*ctor)(void *);
+};
+
+static inline
+struct kmem_cache *kmem_cache_create(const char *name, unsigned int size,
+ unsigned int align, slab_flags_t flags,
+ void (*ctor)(void *))
+{
+ struct kmem_cache *cache = kmalloc(sizeof(*cache), GFP_KERNEL);
+
+ if (!cache)
+ return NULL;
+
+ cache->size = size;
+ cache->ctor = ctor;
+
+ return cache;
+}
+
+static inline void kmem_cache_destroy(struct kmem_cache *cache)
+{
+ free(cache);
+}
+
+static inline void kfree(const void *mem)
+{
+ free((void *)mem);
+}
+
+static inline void *kmem_cache_alloc(struct kmem_cache *cache, gfp_t flags)
+{
+ void *mem = kmalloc(cache->size, flags);
+
+ if (!mem)
+ return NULL;
+
+ if (cache->ctor)
+ cache->ctor(mem);
+
+ return mem;
+}
+
+
+static inline void kmem_cache_free(struct kmem_cache *cache, void *mem)
+{
+ kfree(mem);
+}
+
+static inline void *kzalloc(size_t size, gfp_t flags)
+{
+ return calloc(size, 1);
+}
+
+/**
+ * kmalloc_array - allocate memory for an array.
+ * @n: number of elements.
+ * @size: element size.
+ * @flags: the type of memory to allocate (see kmalloc).
+ */
+static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
+{
+ return kmalloc(n * size, flags);
+}
+
+static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
+{
+ return calloc(n, size);
+}
+
+#endif /* _LINUX_SLAB_H */
diff --git a/include/linux/types.h b/include/linux/types.h
index f64ec4a814..ed3a5b6e81 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -185,6 +185,9 @@ typedef u64 dma_addr_t;
typedef u32 dma_addr_t;
#endif /* dma_addr_t */
+typedef unsigned __bitwise gfp_t;
+typedef unsigned __bitwise slab_flags_t;
+
#ifdef CONFIG_PHYS_ADDR_T_64BIT
typedef u64 phys_addr_t;
typedef u64 phys_size_t;