summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_zone.h
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1997-09-21 04:24:27 +0000
committerdyson <dyson@FreeBSD.org>1997-09-21 04:24:27 +0000
commite64b1984f97c6d987d7d36b61a3afe5028a08312 (patch)
tree325bcf17de3aad0383fb86548872026a7c3d2599 /sys/vm/vm_zone.h
parent1419fcb42b4e1e5a73f4574739f4c232fde357e2 (diff)
downloadFreeBSD-src-e64b1984f97c6d987d7d36b61a3afe5028a08312.zip
FreeBSD-src-e64b1984f97c6d987d7d36b61a3afe5028a08312.tar.gz
Change the M_NAMEI allocations to use the zone allocator. This change
plus the previous changes to use the zone allocator decrease the useage of malloc by half. The Zone allocator will be upgradeable to be able to use per CPU-pools, and has more intelligent usage of SPLs. Additionally, it has reasonable stats gathering capabilities, while making most calls inline.
Diffstat (limited to 'sys/vm/vm_zone.h')
-rw-r--r--sys/vm/vm_zone.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/sys/vm/vm_zone.h b/sys/vm/vm_zone.h
index fe42f49..6ecc7d2 100644
--- a/sys/vm/vm_zone.h
+++ b/sys/vm/vm_zone.h
@@ -19,7 +19,7 @@
* 5. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $Id: vm_zone.h,v 1.4 1997/08/07 03:52:55 dyson Exp $
+ * $Id: vm_zone.h,v 1.5 1997/08/10 00:12:13 dyson Exp $
*/
#if !defined(_SYS_ZONE_H)
@@ -54,6 +54,7 @@ typedef struct vm_zone {
} *vm_zone_t;
+void zerror __P((int)) __dead2;
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));
@@ -64,6 +65,12 @@ 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 ZENTRY_FREE 0x12342378
/*
* void *zalloc(vm_zone_t zone) --
* Returns an item from a specified zone.
@@ -75,12 +82,23 @@ static __inline__ void *
_zalloc(vm_zone_t z) {
void *item;
+#if defined(DIAGNOSTIC)
+ if (z == 0)
+ zerror(ZONE_ERROR_INVALID);
+#endif
+
if (z->zfreecnt <= z->zfreemin) {
return _zget(z);
}
item = z->zitems;
- z->zitems = *(void **) item;
+ z->zitems = ((void **) item)[0];
+#if defined(DIAGNOSTIC)
+ if (((void **) item)[1] != (void *) ZENTRY_FREE)
+ zerror(ZONE_ERROR_NOTFREE);
+ ((void **) item)[1] = 0;
+#endif
+
z->zfreecnt--;
z->znalloc++;
return item;
@@ -88,14 +106,19 @@ _zalloc(vm_zone_t z) {
static __inline__ void
_zfree(vm_zone_t z, void *item) {
- * (void **) item = z->zitems;
+ ((void **) item)[0] = z->zitems;
+#if defined(DIAGNOSTIC)
+ 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 NCPU > 1
+#if defined(SMP)
return zalloci(z);
#else
return _zalloc(z);
@@ -104,7 +127,7 @@ zalloc(vm_zone_t z) {
static __inline__ void
zfree(vm_zone_t z, void *item) {
-#if NCPU > 1
+#if defined(SMP)
zfreei(z, item);
#else
_zfree(z, item);
OpenPOWER on IntegriCloud