From 16ec886a24778f518047beefef08877e4e65ce81 Mon Sep 17 00:00:00 2001 From: assar Date: Wed, 27 Dec 2000 02:54:37 +0000 Subject: Make zalloc and zfree non-inline functions. This avoids having to have the code calling these be compiled with the same setting for INVARIANTS and SMP. Reviewed by: dillon --- sys/vm/vm_zone.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++-- sys/vm/vm_zone.h | 79 +++----------------------------------------------------- 2 files changed, 77 insertions(+), 78 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_zone.c b/sys/vm/vm_zone.c index b5ade30..bc843e0 100644 --- a/sys/vm/vm_zone.c +++ b/sys/vm/vm_zone.c @@ -32,6 +32,59 @@ static MALLOC_DEFINE(M_ZONE, "ZONE", "Zone header"); +#define ZONE_ERROR_INVALID 0 +#define ZONE_ERROR_NOTFREE 1 +#define ZONE_ERROR_ALREADYFREE 2 + +#define ZONE_ROUNDING 32 + +#define ZENTRY_FREE 0x12342378 +/* + * void *zalloc(vm_zone_t zone) -- + * Returns an item from a specified zone. + * + * void zfree(vm_zone_t zone, void *item) -- + * Frees an item back to a specified zone. + */ +static __inline__ void * +_zalloc(vm_zone_t z) +{ + void *item; + +#ifdef INVARIANTS + if (z == 0) + zerror(ZONE_ERROR_INVALID); +#endif + + if (z->zfreecnt <= z->zfreemin) + return _zget(z); + + item = z->zitems; + z->zitems = ((void **) item)[0]; +#ifdef INVARIANTS + if (((void **) item)[1] != (void *) ZENTRY_FREE) + zerror(ZONE_ERROR_NOTFREE); + ((void **) item)[1] = 0; +#endif + + z->zfreecnt--; + z->znalloc++; + return item; +} + +static __inline__ void +_zfree(vm_zone_t z, void *item) +{ + ((void **) item)[0] = z->zitems; +#ifdef INVARIANTS + if (((void **) item)[1] == (void *) ZENTRY_FREE) + zerror(ZONE_ERROR_ALREADYFREE); + ((void **) item)[1] = (void *) ZENTRY_FREE; +#endif + z->zitems = item; + z->zfreecnt++; +} + /* * This file comprises a very simple zone allocator. This is used * in lieu of the malloc allocator, where needed or more optimal. @@ -253,10 +306,29 @@ zunlock(vm_zone_t z, int s) * */ +void * +zalloc(vm_zone_t z) +{ +#if defined(SMP) + return zalloci(z); +#else + return _zalloc(z); +#endif +} + +void +zfree(vm_zone_t z, void *item) +{ +#ifdef SMP + zfreei(z, item); +#else + _zfree(z, item); +#endif +} + /* * Zone allocator/deallocator. These are interrupt / (or potentially SMP) - * safe. The raw zalloc/zfree routines are in the vm_zone header file, - * and are not interrupt safe, but are fast. + * safe. The raw zalloc/zfree routines are not interrupt safe, but are fast. */ void * zalloci(vm_zone_t z) diff --git a/sys/vm/vm_zone.h b/sys/vm/vm_zone.h index b8aa933..2b21586 100644 --- a/sys/vm/vm_zone.h +++ b/sys/vm/vm_zone.h @@ -49,85 +49,12 @@ vm_zone_t zinit __P((char *name, int size, int nentries, int flags, int zalloc)); int zinitna __P((vm_zone_t z, struct vm_object *obj, char *name, int size, int nentries, int flags, int zalloc)); -static void * zalloc __P((vm_zone_t z)); -static void zfree __P((vm_zone_t z, void *item)); +void * zalloc __P((vm_zone_t z)); +void zfree __P((vm_zone_t z, void *item)); void * zalloci __P((vm_zone_t z)); void zfreei __P((vm_zone_t z, void *item)); void zbootinit __P((vm_zone_t z, char *name, int size, void *item, int nitems)); void * _zget __P((vm_zone_t z)); -#define ZONE_ERROR_INVALID 0 -#define ZONE_ERROR_NOTFREE 1 -#define ZONE_ERROR_ALREADYFREE 2 - -#define ZONE_ROUNDING 32 - -#define ZENTRY_FREE 0x12342378 -/* - * void *zalloc(vm_zone_t zone) -- - * Returns an item from a specified zone. - * - * void zfree(vm_zone_t zone, void *item) -- - * Frees an item back to a specified zone. - */ -static __inline__ void * -_zalloc(vm_zone_t z) -{ - void *item; - -#ifdef INVARIANTS - if (z == 0) - zerror(ZONE_ERROR_INVALID); -#endif - - if (z->zfreecnt <= z->zfreemin) - return _zget(z); - - item = z->zitems; - z->zitems = ((void **) item)[0]; -#ifdef INVARIANTS - if (((void **) item)[1] != (void *) ZENTRY_FREE) - zerror(ZONE_ERROR_NOTFREE); - ((void **) item)[1] = 0; -#endif - - z->zfreecnt--; - z->znalloc++; - return item; -} - -static __inline__ void -_zfree(vm_zone_t z, void *item) -{ - ((void **) item)[0] = z->zitems; -#ifdef INVARIANTS - if (((void **) item)[1] == (void *) ZENTRY_FREE) - zerror(ZONE_ERROR_ALREADYFREE); - ((void **) item)[1] = (void *) ZENTRY_FREE; -#endif - z->zitems = item; - z->zfreecnt++; -} - -static __inline__ void * -zalloc(vm_zone_t z) -{ -#if defined(SMP) - return zalloci(z); -#else - return _zalloc(z); -#endif -} - -static __inline__ void -zfree(vm_zone_t z, void *item) -{ -#ifdef SMP - zfreei(z, item); -#else - _zfree(z, item); -#endif -} - -#endif +#endif /* _SYS_ZONE_H */ -- cgit v1.1