#include <sys/kmem.h>
#include <sys/debug.h>
#include <sys/ksynch.h>
#include <sys/systm.h>
#include <umem.h>
void abort(void) __NORETURN;
static int
kmem_failed_cb(void)
{
abort();
return (UMEM_CALLBACK_RETRY);
}
#pragma init(_kmem_init)
static int
_kmem_init(void)
{
umem_nofail_callback(kmem_failed_cb);
return (0);
}
static int
kmem2umem_flags(int kmflags)
{
int umflags = UMEM_NOFAIL;
if (kmflags & KM_NOSLEEP)
umflags = UMEM_DEFAULT;
return (umflags);
}
int
kmem_debugging(void)
{
return (0);
}
void *
kmem_alloc(size_t size, int kmflags)
{
return (umem_alloc(size, kmem2umem_flags(kmflags)));
}
void *
kmem_zalloc(size_t size, int kmflags)
{
return (umem_zalloc(size, kmem2umem_flags(kmflags)));
}
void
kmem_free(void *buf, size_t size)
{
umem_free(buf, size);
}
kmem_cache_t *
kmem_cache_create(
char *name,
size_t bufsize,
size_t align,
int (*constructor)(void *, void *, int),
void (*destructor)(void *, void *),
void (*reclaim)(void *),
void *private,
vmem_t *vmp,
int kcflags)
{
umem_cache_t *uc;
int ucflags = 0;
if (kcflags & KMC_NODEBUG)
ucflags |= UMC_NODEBUG;
if (kcflags & KMC_NOMAGAZINE)
ucflags |= UMC_NOMAGAZINE;
if (kcflags & KMC_NOHASH)
ucflags |= UMC_NOHASH;
uc = umem_cache_create(name, bufsize, align,
constructor, destructor, reclaim,
private, vmp, ucflags);
return ((kmem_cache_t *)uc);
}
void
kmem_cache_destroy(kmem_cache_t *kc)
{
umem_cache_destroy((umem_cache_t *)kc);
}
void *
kmem_cache_alloc(kmem_cache_t *kc, int kmflags)
{
return (umem_cache_alloc((umem_cache_t *)kc,
kmem2umem_flags(kmflags)));
}
void
kmem_cache_free(kmem_cache_t *kc, void *p)
{
umem_cache_free((umem_cache_t *)kc, p);
}
void
kmem_cache_set_move(kmem_cache_t *kc,
kmem_cbrc_t (*fun)(void *, void *, size_t, void *))
{
}
boolean_t
kmem_cache_reap_active(void)
{
return (B_FALSE);
}
void
kmem_cache_reap_soon(kmem_cache_t *kc)
{
}
void
vmem_qcache_reap(struct vmem *vmp)
{
}
void
strfree(char *str)
{
ASSERT(str != NULL);
kmem_free(str, strlen(str) + 1);
}