#ifndef _LINUX_SLAB_H_
#define _LINUX_SLAB_H_
#include <linux/gfp.h>
#include <linux/types.h>
MALLOC_DECLARE(M_DRM);
#define kzalloc(size, flags) kmalloc(size, M_DRM, flags | M_ZERO)
#define kvzalloc(size, flags) kmalloc(size, M_DRM, (flags) | M_ZERO)
#undef kfree
#define kfree(ptr) do { \
if (ptr != NULL) \
_kfree((void *)ptr, M_DRM); \
} while (0)
#define kcalloc(n, size, flags) kzalloc((n) * (size), flags)
static inline void *
kmalloc_array(size_t n, size_t size, gfp_t flags)
{
return kmalloc(n * size, M_DRM, flags);
}
#include <linux/kasan.h>
struct kmem_cache {
unsigned int size;
};
#define SLAB_HWCACHE_ALIGN 0x01UL
#define SLAB_RECLAIM_ACCOUNT 0x02UL
#define SLAB_TYPESAFE_BY_RCU 0x04UL
#define KMEM_CACHE(__struct, flags) \
kmem_cache_create(#__struct, sizeof(struct __struct), \
__alignof(struct __struct), (flags), NULL)
static inline struct kmem_cache *
kmem_cache_create(const char *name, size_t size, size_t align,
unsigned long flags, void (*ctor)(void *))
{
struct kmem_cache *kc;
kc = kzalloc(sizeof(struct kmem_cache), flags);
kc->size = size;
return kc;
}
static inline void
kmem_cache_destroy(struct kmem_cache *kc)
{
kfree(kc);
}
static inline void *
kmem_cache_alloc(struct kmem_cache *kc, gfp_t flags)
{
return kmalloc(kc->size, M_DRM, flags);
}
static inline void *
kmem_cache_zalloc(struct kmem_cache *kc, gfp_t flags)
{
return kzalloc(kc->size, flags);
}
static inline void
kmem_cache_free(struct kmem_cache *kc, void *ptr)
{
kfree(ptr);
}
static inline int
kmem_cache_shrink(struct kmem_cache *c)
{
return 0;
}
#endif