diff options
author | phk <phk@FreeBSD.org> | 1997-10-10 14:06:34 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1997-10-10 14:06:34 +0000 |
commit | 7c874af4b84b221f2d71b950c876c07d5cb68c79 (patch) | |
tree | 402c156e21cf199386d5f759b094a4524f1f8972 /sys | |
parent | 59ad45bfebed512b69728730d4d9e57b670fcc38 (diff) | |
download | FreeBSD-src-7c874af4b84b221f2d71b950c876c07d5cb68c79.zip FreeBSD-src-7c874af4b84b221f2d71b950c876c07d5cb68c79.tar.gz |
Make malloc more extensible. The malloc type is now a pointer to
the struct kmemstats that describes the type.
This allows subsystems to declare their malloc types locally
and <sys/malloc.h> doesn't need tweaked everytime somebody
gets an idea. You can even have a type local to a lkm...
I don't know if we really need the longdesc, comments welcome.
TODO: There is a single nit in ext2fs, that will be fixed later,
and I intend to remove all unused malloc types and distribute
the rest closer to their use.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_malloc.c | 100 | ||||
-rw-r--r-- | sys/sys/malloc.h | 293 | ||||
-rw-r--r-- | sys/sys/mbuf.h | 6 |
3 files changed, 148 insertions, 251 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c index 6964dde..fc344cc 100644 --- a/sys/kern/kern_malloc.c +++ b/sys/kern/kern_malloc.c @@ -31,12 +31,13 @@ * SUCH DAMAGE. * * @(#)kern_malloc.c 8.3 (Berkeley) 1/4/94 - * $Id: kern_malloc.c,v 1.29 1997/09/02 20:05:39 bde Exp $ + * $Id: kern_malloc.c,v 1.30 1997/09/16 13:51:58 bde Exp $ */ #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> +#define MALLOC_INSTANTIATE #include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/vmmeter.h> @@ -50,24 +51,14 @@ #include <vm/vm_map.h> static void kmeminit __P((void *)); +static void malloc_init __P((struct kmemstats *)); SYSINIT(kmem, SI_SUB_KMEM, SI_ORDER_FIRST, kmeminit, NULL) -#if defined(KMEMSTATS) || defined(DIAGNOSTIC) -#define MAYBE_STATIC static -#else -#define MAYBE_STATIC -#endif - -MAYBE_STATIC struct kmembuckets bucket[MINBUCKET + 16]; -#ifdef KMEMSTATS -static struct kmemstats kmemstats[M_LAST]; -#endif -MAYBE_STATIC struct kmemusage *kmemusage; -MAYBE_STATIC char *kmembase; +struct kmemstats *kmemstatistics = M_FREE; +static struct kmembuckets bucket[MINBUCKET + 16]; +static struct kmemusage *kmemusage; +static char *kmembase; static char *kmemlimit; -#if defined(KMEMSTATS) || defined(DIAGNOSTIC) -static char *memname[] = INITKMEMNAMES; -#endif #ifdef DIAGNOSTIC /* @@ -95,7 +86,7 @@ static long addrmask[] = { 0, */ struct freelist { long spare0; - short type; + struct kmemstats *type; long spare1; caddr_t next; }; @@ -111,7 +102,8 @@ struct freelist { void * malloc(size, type, flags) unsigned long size; - int type, flags; + struct kmemstats *type; + int flags; { register struct kmembuckets *kbp; register struct kmemusage *kup; @@ -124,16 +116,14 @@ malloc(size, type, flags) int copysize; char *savedtype; #endif -#ifdef KMEMSTATS - register struct kmemstats *ksp = &kmemstats[type]; + register struct kmemstats *ksp = type; + + if (!type->ks_next) + malloc_init(type); - if (((unsigned long)type) > M_LAST) - panic("malloc - bogus type"); -#endif indx = BUCKETINDX(size); kbp = &bucket[indx]; s = splhigh(); -#ifdef KMEMSTATS while (ksp->ks_memuse >= ksp->ks_limit) { if (flags & M_NOWAIT) { splx(s); @@ -141,10 +131,9 @@ malloc(size, type, flags) } if (ksp->ks_limblocks < 65535) ksp->ks_limblocks++; - tsleep((caddr_t)ksp, PSWP+2, memname[type], 0); + tsleep((caddr_t)ksp, PSWP+2, type->ks_shortdesc, 0); } ksp->ks_size |= 1 << indx; -#endif #ifdef DIAGNOSTIC copysize = 1 << indx < MAX_COPY ? 1 << indx : MAX_COPY; #endif @@ -160,24 +149,18 @@ malloc(size, type, flags) splx(s); return ((void *) NULL); } -#ifdef KMEMSTATS kbp->kb_total += kbp->kb_elmpercl; -#endif kup = btokup(va); kup->ku_indx = indx; if (allocsize > MAXALLOCSAVE) { if (npg > 65535) panic("malloc: allocation too large"); kup->ku_pagecnt = npg; -#ifdef KMEMSTATS ksp->ks_memuse += allocsize; -#endif goto out; } -#ifdef KMEMSTATS kup->ku_freecnt = kbp->kb_elmpercl; kbp->kb_totalfree += kbp->kb_elmpercl; -#endif /* * Just in case we blocked while allocating memory, * and someone else also allocated memory for this @@ -210,13 +193,12 @@ malloc(size, type, flags) kbp->kb_next = ((struct freelist *)va)->next; #ifdef DIAGNOSTIC freep = (struct freelist *)va; - savedtype = (unsigned)freep->type < M_LAST ? - memname[freep->type] : "???"; + savedtype = type->ks_shortdesc; #if BYTE_ORDER == BIG_ENDIAN - freep->type = WEIRD_ADDR >> 16; + freep->type = (struct kmemstats *)WEIRD_ADDR >> 16; #endif #if BYTE_ORDER == LITTLE_ENDIAN - freep->type = (short)WEIRD_ADDR; + freep->type = (struct kmemstats *)WEIRD_ADDR; #endif if (((long)(&freep->next)) & 0x2) freep->next = (caddr_t)((WEIRD_ADDR >> 16)|(WEIRD_ADDR << 16)); @@ -233,7 +215,6 @@ malloc(size, type, flags) } freep->spare0 = 0; #endif /* DIAGNOSTIC */ -#ifdef KMEMSTATS kup = btokup(va); if (kup->ku_indx != indx) panic("malloc: wrong bucket"); @@ -248,9 +229,6 @@ out: ksp->ks_calls++; if (ksp->ks_memuse > ksp->ks_maxused) ksp->ks_maxused = ksp->ks_memuse; -#else -out: -#endif splx(s); return ((void *) va); } @@ -261,7 +239,7 @@ out: void free(addr, type) void *addr; - int type; + struct kmemstats *type; { register struct kmembuckets *kbp; register struct kmemusage *kup; @@ -272,17 +250,15 @@ free(addr, type) struct freelist *fp; long *end, *lp, alloc, copysize; #endif -#ifdef KMEMSTATS - register struct kmemstats *ksp = &kmemstats[type]; -#endif + register struct kmemstats *ksp = type; + + if (!type->ks_next) + malloc_init(type); #ifdef DIAGNOSTIC if ((char *)addr < kmembase || (char *)addr >= kmemlimit) { panic("free: address 0x%x out of range", addr); } - if ((u_long)type > M_LAST) { - panic("free: type %d out of range", type); - } #endif kup = btokup(addr); size = 1 << kup->ku_indx; @@ -299,11 +275,10 @@ free(addr, type) alloc = addrmask[kup->ku_indx]; if (((u_long)addr & alloc) != 0) panic("free: unaligned addr 0x%x, size %d, type %s, mask %d", - addr, size, memname[type], alloc); + addr, size, type->ks_shortdesc, alloc); #endif /* DIAGNOSTIC */ if (size > MAXALLOCSAVE) { kmem_free(kmem_map, (vm_offset_t)addr, ctob(kup->ku_pagecnt)); -#ifdef KMEMSTATS size = kup->ku_pagecnt << PAGE_SHIFT; ksp->ks_memuse -= size; kup->ku_indx = 0; @@ -313,7 +288,6 @@ free(addr, type) wakeup((caddr_t)ksp); ksp->ks_inuse--; kbp->kb_total -= 1; -#endif splx(s); return; } @@ -348,7 +322,6 @@ free(addr, type) *lp = WEIRD_ADDR; freep->type = type; #endif /* DIAGNOSTIC */ -#ifdef KMEMSTATS kup->ku_freecnt++; if (kup->ku_freecnt >= kbp->kb_elmpercl) if (kup->ku_freecnt > kbp->kb_elmpercl) @@ -361,7 +334,6 @@ free(addr, type) ksp->ks_memuse < ksp->ks_limit) wakeup((caddr_t)ksp); ksp->ks_inuse--; -#endif #ifdef OLD_MALLOC_MEMORY_POLICY if (kbp->kb_next == NULL) kbp->kb_next = addr; @@ -416,7 +388,6 @@ kmeminit(dummy) (vm_offset_t *)&kmemlimit, (vm_size_t)(npg * PAGE_SIZE), FALSE); kmem_map->system_map = 1; -#ifdef KMEMSTATS for (indx = 0; indx < MINBUCKET + 16; indx++) { if (1 << indx >= PAGE_SIZE) bucket[indx].kb_elmpercl = 1; @@ -424,14 +395,25 @@ kmeminit(dummy) bucket[indx].kb_elmpercl = PAGE_SIZE / (1 << indx); bucket[indx].kb_highwat = 5 * bucket[indx].kb_elmpercl; } +} + +static void +malloc_init(type) + struct kmemstats *type; +{ + int npg; + + printf("%p [%s]", type, type->ks_shortdesc); /* * Limit maximum memory for each type to 60% of malloc area size or * 60% of physical memory, whichever is smaller. */ - for (indx = 0; indx < M_LAST; indx++) { - kmemstats[indx].ks_limit = min(cnt.v_page_count * PAGE_SIZE, - (npg * PAGE_SIZE - nmbclusters * MCLBYTES - - nmbufs * MSIZE)) * 6 / 10; - } -#endif + npg = (nmbufs * MSIZE + nmbclusters * MCLBYTES + VM_KMEM_SIZE) + / PAGE_SIZE; + + type->ks_limit = min(cnt.v_page_count * PAGE_SIZE, + (npg * PAGE_SIZE - nmbclusters * MCLBYTES + - nmbufs * MSIZE)) * 6 / 10; + type->ks_next = kmemstatistics; + kmemstatistics = type; } diff --git a/sys/sys/malloc.h b/sys/sys/malloc.h index 2800861..8a70473 100644 --- a/sys/sys/malloc.h +++ b/sys/sys/malloc.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)malloc.h 8.5 (Berkeley) 5/3/95 - * $Id: malloc.h,v 1.24 1997/09/16 13:52:04 bde Exp $ + * $Id: malloc.h,v 1.25 1997/09/21 04:24:04 dyson Exp $ */ #ifndef _SYS_MALLOC_H_ @@ -46,193 +46,10 @@ #define M_NOWAIT 0x0001 #define M_KERNEL 0x0002 -/* - * Types of memory to be allocated - */ -#define M_FREE 0 /* should be on free list */ -#define M_MBUF 1 /* mbuf */ -#define M_DEVBUF 2 /* device driver memory */ -#define M_SOCKET 3 /* socket structure */ -#define M_PCB 4 /* protocol control block */ -#define M_RTABLE 5 /* routing tables */ -#define M_HTABLE 6 /* IMP host tables */ -#define M_FTABLE 7 /* fragment reassembly header */ -#define M_ZOMBIE 8 /* zombie proc status */ -#define M_IFADDR 9 /* interface address */ -#define M_SOOPTS 10 /* socket options */ -#define M_SONAME 11 /* socket name */ -#define M_NAMEI 12 /* namei path name buffer */ -#define M_GPROF 13 /* kernel profiling buffer */ -#define M_IOCTLOPS 14 /* ioctl data buffer */ -#define M_MAPMEM 15 /* mapped memory descriptors */ -#define M_CRED 16 /* credentials */ -#define M_PGRP 17 /* process group header */ -#define M_SESSION 18 /* session header */ -#define M_IOV 19 /* large iov's */ -#define M_MOUNT 20 /* vfs mount struct */ -#define M_FHANDLE 21 /* network file handle */ -#define M_NFSREQ 22 /* NFS request header */ -#define M_NFSMNT 23 /* NFS mount structure */ -#define M_NFSNODE 24 /* NFS vnode private part */ -#define M_VNODE 25 /* Dynamically allocated vnodes */ -#define M_CACHE 26 /* Dynamically allocated cache entries */ -#define M_DQUOT 27 /* UFS quota entries */ -#define M_UFSMNT 28 /* UFS mount structure */ -#define M_SHM 29 /* SVID compatible shared memory segments */ -#define M_VMMAP 30 /* VM map structures */ -#define M_VMMAPENT 31 /* VM map entry structures */ -#define M_VMOBJ 32 /* VM object structure */ -#define M_VMOBJHASH 33 /* VM object hash structure */ -#define M_VMPMAP 34 /* VM pmap */ -#define M_VMPVENT 35 /* VM phys-virt mapping entry */ -#define M_VMPAGER 36 /* XXX: VM pager struct */ -#define M_VMPGDATA 37 /* XXX: VM pager private data */ -#define M_FILE 38 /* Open file structure */ -#define M_FILEDESC 39 /* Open file descriptor table */ -#define M_LOCKF 40 /* Byte-range locking structures */ -#define M_PROC 41 /* Proc structures */ -#define M_SUBPROC 42 /* Proc sub-structures */ -#define M_SEGMENT 43 /* Segment for LFS */ -#define M_LFSNODE 44 /* LFS vnode private part */ -#define M_FFSNODE 45 /* FFS vnode private part */ -#define M_MFSNODE 46 /* MFS vnode private part */ -#define M_NQLEASE 47 /* Nqnfs lease */ -#define M_NQMHOST 48 /* Nqnfs host address table */ -#define M_NETADDR 49 /* Export host address structure */ -#define M_NFSSVC 50 /* Nfs server structure */ -#define M_NFSUID 51 /* Nfs uid mapping structure */ -#define M_NFSD 52 /* Nfs server daemon structure */ -#define M_IPMOPTS 53 /* internet multicast options */ -#define M_IPMADDR 54 /* internet multicast address */ -#define M_IFMADDR 55 /* link-level multicast address */ -#define M_MRTABLE 56 /* multicast routing tables */ -#define M_ISOFSMNT 57 /* ISOFS mount structure */ -#define M_ISOFSNODE 58 /* ISOFS vnode private part */ -#define M_NFSRVDESC 59 /* NFS server socket descriptor */ -#define M_NFSDIROFF 60 /* NFS directory offset data */ -#define M_NFSBIGFH 61 /* NFS version 3 file handle */ -#define M_MSDOSFSMNT 67 /* MSDOSFS mount structure */ -#define M_MSDOSFSNODE 68 /* MSDOSFS vnode private part */ -#define M_MSDOSFSFAT 69 /* MSDOSFS file allocation table */ -#define M_DEVFSMNT 70 /* DEVFS mount structure */ -#define M_DEVFSBACK 71 /* DEVFS Back node */ -#define M_DEVFSFRONT 72 /* DEVFS Front node */ -#define M_DEVFSNODE 73 /* DEVFS node */ -#define M_TEMP 74 /* misc temporary data buffers */ -#define M_TTYS 75 /* tty data structures */ -#define M_GZIP 76 /* Gzip trees */ -#define M_IPFW 77 /* IpFw/IpAcct chain's */ -#define M_DEVL 78 /* isa_device lists in userconfig() */ -#define M_PKTCLASS 79 /* structures used in packet classifier */ -#define M_SYSCTL 80 /* sysctl internal magic */ -#define M_SECA 81 /* security associations, key management */ -#define M_BIOBUF 82 /* BIO buffer */ -#define M_KTRACE 83 /* KTRACE */ -#define M_SELECT 84 /* select() buffer */ -#define M_GEOM_DEV 85 /* geometry device */ -#define M_GEOM_MOD 86 /* geometry module */ -#define M_GEOM_REQ 87 /* geometry request */ -#define M_GEOM_MISC 88 /* geometry misc */ -#define M_VFSCONF 89 /* vfsconf structure */ -#define M_AIO 90 /* AIO structure(s) */ -#define M_ZONE 91 /* Zone header */ -#define M_HOSTCACHE 92 /* per-host information cache structure */ -#define M_LAST 93 /* Must be last type + 1 */ - -#define INITKMEMNAMES { \ - "free", /* 0 M_FREE */ \ - "mbuf", /* 1 M_MBUF */ \ - "devbuf", /* 2 M_DEVBUF */ \ - "socket", /* 3 M_SOCKET */ \ - "pcb", /* 4 M_PCB */ \ - "routetbl", /* 5 M_RTABLE */ \ - "hosttbl", /* 6 M_HTABLE */ \ - "fragtbl", /* 7 M_FTABLE */ \ - "zombie", /* 8 M_ZOMBIE */ \ - "ifaddr", /* 9 M_IFADDR */ \ - "soopts", /* 10 M_SOOPTS */ \ - "soname", /* 11 M_SONAME */ \ - "namei", /* 12 M_NAMEI */ \ - "gprof", /* 13 M_GPROF */ \ - "ioctlops", /* 14 M_IOCTLOPS */ \ - "mapmem", /* 15 M_MAPMEM */ \ - "cred", /* 16 M_CRED */ \ - "pgrp", /* 17 M_PGRP */ \ - "session", /* 18 M_SESSION */ \ - "iov", /* 19 M_IOV */ \ - "mount", /* 20 M_MOUNT */ \ - "fhandle", /* 21 M_FHANDLE */ \ - "NFS req", /* 22 M_NFSREQ */ \ - "NFS mount", /* 23 M_NFSMNT */ \ - "NFS node", /* 24 M_NFSNODE */ \ - "vnodes", /* 25 M_VNODE */ \ - "namecache", /* 26 M_CACHE */ \ - "UFS quota", /* 27 M_DQUOT */ \ - "UFS mount", /* 28 M_UFSMNT */ \ - "shm", /* 29 M_SHM */ \ - "VM map", /* 30 M_VMMAP */ \ - "VM mapent", /* 31 M_VMMAPENT */ \ - "VM object", /* 32 M_VMOBJ */ \ - "VM objhash", /* 33 M_VMOBJHASH */ \ - "VM pmap", /* 34 M_VMPMAP */ \ - "VM pvmap", /* 35 M_VMPVENT */ \ - "VM pager", /* 36 M_VMPAGER */ \ - "VM pgdata", /* 37 M_VMPGDATA */ \ - "file", /* 38 M_FILE */ \ - "file desc", /* 39 M_FILEDESC */ \ - "lockf", /* 40 M_LOCKF */ \ - "proc", /* 41 M_PROC */ \ - "subproc", /* 42 M_SUBPROC */ \ - "LFS segment", /* 43 M_SEGMENT */ \ - "LFS node", /* 44 M_LFSNODE */ \ - "FFS node", /* 45 M_FFSNODE */ \ - "MFS node", /* 46 M_MFSNODE */ \ - "NQNFS Lease", /* 47 M_NQLEASE */ \ - "NQNFS Host", /* 48 M_NQMHOST */ \ - "Export Host", /* 49 M_NETADDR */ \ - "NFS srvsock", /* 50 M_NFSSVC */ \ - "NFS uid", /* 51 M_NFSUID */ \ - "NFS daemon", /* 52 M_NFSD */ \ - "ip_moptions", /* 53 M_IPMOPTS */ \ - "in_multi", /* 54 M_IPMADDR */ \ - "ether_multi", /* 55 M_IFMADDR */ \ - "mrt", /* 56 M_MRTABLE */ \ - "ISOFS mount", /* 57 M_ISOFSMNT */ \ - "ISOFS node", /* 58 M_ISOFSNODE */ \ - "NFSV3 srvdesc",/* 59 M_NFSRVDESC */ \ - "NFSV3 diroff", /* 60 M_NFSDIROFF */ \ - "NFSV3 bigfh", /* 61 M_NFSBIGFH */ \ - NULL, \ - NULL, NULL, NULL, NULL, \ - "MSDOSFS mount",/* 67 M_MSDOSFSMNT */ \ - "MSDOSFS node", /* 68 M_MSDOSFSNODE */ \ - "MSDOSFS FAT", /* 69 M_MSDOSFSFAR */ \ - "DEVFS mount", /* 70 M_DEVFSMNT */ \ - "DEVFS back", /* 71 M_DEVFSBACK */ \ - "DEVFS front", /* 72 M_DEVFSFRONT */ \ - "DEVFS node", /* 73 M_DEVFSNODE */ \ - "temp", /* 74 M_TEMP */ \ - "ttys", /* 75 M_TTYS */ \ - "Gzip trees", /* 76 M_GZIP */ \ - "IpFw/IpAcct", /* 77 M_IPFW */ \ - "isa_devlist", /* 78 M_DEVL */ \ - "PktClass", /* 79 M_PKTCLASS */ \ - "sysctl", /* 80 M_SYSCTL */ \ - "key mgmt", /* 81 M_SECA */ \ - "BIO buffer", /* 82 M_BIOBUF */ \ - "KTRACE", /* 83 M_KTRACE */ \ - "select", /* 84 M_SELECT */ \ - "GEOM dev", /* 85 M_GEOM_DEV */ \ - "GEOM mod", /* 86 M_GEOM_MOD */ \ - "GEOM req", /* 87 M_GEOM_REQ */ \ - "GEOM misc", /* 88 M_GEOM_MISC */ \ - "VFS conf", /* 89 M_VFSCONF */ \ - "AIO", /* 90 M_AIO */ \ - "ZONE", /* 91 M_ZONE */ \ - "hostcache", /* 92 M_HOSTCACHE */ \ -} - struct kmemstats { + char *ks_shortdesc; /* Short description */ + char *ks_longdesc; /* Long description */ + struct kmemstats *ks_next; /* Next pointer */ long ks_inuse; /* # of packets of this type currently in use */ long ks_calls; /* total packets of this type ever allocated */ long ks_memuse; /* total memory held in bytes */ @@ -244,6 +61,104 @@ struct kmemstats { long ks_spare; }; +typedef struct kmemstats malloc_type_t[1]; + +#ifdef MALLOC_INSTANTIATE +#define MALLOC_MAKE_TYPE(type, short, long) \ + malloc_type_t type = {{short, long}} +#else +#define MALLOC_MAKE_TYPE(type, short, long) extern malloc_type_t type; +#endif + +MALLOC_MAKE_TYPE(M_FREE, "free", "should be on free list"); +MALLOC_MAKE_TYPE(M_MBUF, "mbuf", "mbuf"); +MALLOC_MAKE_TYPE(M_DEVBUF, "devbuf", "device driver memory"); +MALLOC_MAKE_TYPE(M_SOCKET, "socket", "socket structure"); +MALLOC_MAKE_TYPE(M_PCB, "pcb", "protocol control block"); +MALLOC_MAKE_TYPE(M_RTABLE, "routetbl", "routing tables"); + MALLOC_MAKE_TYPE(M_HTABLE, "hosttbl", "IMP host tables"); +MALLOC_MAKE_TYPE(M_FTABLE, "fragtbl", "fragment reassembly header"); +MALLOC_MAKE_TYPE(M_ZOMBIE, "zombie", "zombie proc status"); +MALLOC_MAKE_TYPE(M_IFADDR, "ifaddr", "interface address"); +MALLOC_MAKE_TYPE(M_SOOPTS, "soopts", "socket options"); +MALLOC_MAKE_TYPE(M_SONAME, "soname", "socket name"); + MALLOC_MAKE_TYPE(M_NAMEI, "namei", "namei path name buffer"); +MALLOC_MAKE_TYPE(M_GPROF, "gprof", "kernel profiling buffer"); +MALLOC_MAKE_TYPE(M_IOCTLOPS, "ioctlops", "ioctl data buffer"); + MALLOC_MAKE_TYPE(M_MAPMEM, "mapmem", "mapped memory descriptors"); +MALLOC_MAKE_TYPE(M_CRED, "cred", "credentials"); +MALLOC_MAKE_TYPE(M_PGRP, "pgrp", "process group header"); +MALLOC_MAKE_TYPE(M_SESSION, "session", "session header"); +MALLOC_MAKE_TYPE(M_IOV, "iov", "large iov's"); +MALLOC_MAKE_TYPE(M_MOUNT, "mount", "vfs mount struct"); + MALLOC_MAKE_TYPE(M_FHANDLE, "fhandle", "network file handle"); +MALLOC_MAKE_TYPE(M_NFSREQ, "NFS req", "NFS request header"); +MALLOC_MAKE_TYPE(M_NFSMNT, "NFS mount", "NFS mount structure"); +MALLOC_MAKE_TYPE(M_NFSNODE, "NFS node", "NFS vnode private part"); +MALLOC_MAKE_TYPE(M_VNODE, "vnodes", "Dynamically allocated vnodes"); +MALLOC_MAKE_TYPE(M_CACHE, "namecache", "Dynamically allocated cache entries"); +MALLOC_MAKE_TYPE(M_DQUOT, "UFS quota", "UFS quota entries"); +MALLOC_MAKE_TYPE(M_UFSMNT, "UFS mount", "UFS mount structure"); +MALLOC_MAKE_TYPE(M_SHM, "shm", "SVID compatible shared memory segments"); +MALLOC_MAKE_TYPE(M_VMMAP, "VM map", "VM map structures"); + MALLOC_MAKE_TYPE(M_VMMAPENT, "VM mapent", "VM map entry structures"); + MALLOC_MAKE_TYPE(M_VMOBJ, "VM object", "VM object structure"); + MALLOC_MAKE_TYPE(M_VMOBJHASH, "VM objhash", "VM object hash structure"); +MALLOC_MAKE_TYPE(M_VMPMAP, "VM pmap", "VM pmap"); /* XXX */ + MALLOC_MAKE_TYPE(M_VMPVENT, "VM pvmap", "VM phys-virt mapping entry"); + MALLOC_MAKE_TYPE(M_VMPAGER, "VM pager", "XXX: VM pager struct"); +MALLOC_MAKE_TYPE(M_VMPGDATA, "VM pgdata", "XXX: VM pager private data"); +MALLOC_MAKE_TYPE(M_FILE, "file", "Open file structure"); +MALLOC_MAKE_TYPE(M_FILEDESC, "file desc", "Open file descriptor table"); +MALLOC_MAKE_TYPE(M_LOCKF, "lockf", "Byte-range locking structures"); +MALLOC_MAKE_TYPE(M_PROC, "proc", "Proc structures"); +MALLOC_MAKE_TYPE(M_SUBPROC, "subproc", "Proc sub-structures"); +MALLOC_MAKE_TYPE(M_SEGMENT, "LFS segment", "Segment for LFS"); +MALLOC_MAKE_TYPE(M_LFSNODE, "LFS node", "LFS vnode private part"); +MALLOC_MAKE_TYPE(M_FFSNODE, "FFS node", "FFS vnode private part"); +MALLOC_MAKE_TYPE(M_MFSNODE, "MFS node", "MFS vnode private part"); +MALLOC_MAKE_TYPE(M_NQLEASE, "NQNFS Lease", "Nqnfs lease"); +MALLOC_MAKE_TYPE(M_NQMHOST, "NQNFS Host", "Nqnfs host address table"); +MALLOC_MAKE_TYPE(M_NETADDR, "Export Host", "Export host address structure"); +MALLOC_MAKE_TYPE(M_NFSSVC, "NFS srvsock", "Nfs server structure"); +MALLOC_MAKE_TYPE(M_NFSUID, "NFS uid", "Nfs uid mapping structure"); +MALLOC_MAKE_TYPE(M_NFSD, "NFS daemon", "Nfs server daemon structure"); +MALLOC_MAKE_TYPE(M_IPMOPTS, "ip_moptions", "internet multicast options"); +MALLOC_MAKE_TYPE(M_IPMADDR, "in_multi", "internet multicast address"); +MALLOC_MAKE_TYPE(M_IFMADDR, "ether_multi", "link-level multicast address"); +MALLOC_MAKE_TYPE(M_MRTABLE, "mrt", "multicast routing tables"); +MALLOC_MAKE_TYPE(M_ISOFSMNT, "ISOFS mount", "ISOFS mount structure"); +MALLOC_MAKE_TYPE(M_ISOFSNODE, "ISOFS node", "ISOFS vnode private part"); +MALLOC_MAKE_TYPE(M_NFSRVDESC, "NFSV3 srvdesc", "NFS server socket descriptor"); +MALLOC_MAKE_TYPE(M_NFSDIROFF, "NFSV3 diroff", "NFS directory offset data"); +MALLOC_MAKE_TYPE(M_NFSBIGFH, "NFSV3 bigfh", "NFS version 3 file handle"); +MALLOC_MAKE_TYPE(M_MSDOSFSMNT, "MSDOSFS mount", "MSDOSFS mount structure"); +MALLOC_MAKE_TYPE(M_MSDOSFSNODE, "MSDOSFS node", "MSDOSFS vnode private part"); +MALLOC_MAKE_TYPE(M_MSDOSFSFAT, "MSDOSFS FAT", "MSDOSFS file allocation table"); +MALLOC_MAKE_TYPE(M_DEVFSMNT, "DEVFS mount", "DEVFS mount structure"); +MALLOC_MAKE_TYPE(M_DEVFSBACK, "DEVFS back", "DEVFS Back node"); + MALLOC_MAKE_TYPE(M_DEVFSFRONT, "DEVFS front", "DEVFS Front node"); +MALLOC_MAKE_TYPE(M_DEVFSNODE, "DEVFS node", "DEVFS node"); +MALLOC_MAKE_TYPE(M_TEMP, "temp", "misc temporary data buffers"); +MALLOC_MAKE_TYPE(M_TTYS, "ttys", "tty data structures"); +MALLOC_MAKE_TYPE(M_GZIP, "Gzip trees", "Gzip trees"); +MALLOC_MAKE_TYPE(M_IPFW, "IpFw/IpAcct", "IpFw/IpAcct chain's"); +MALLOC_MAKE_TYPE(M_DEVL, "isa_devlist", "isa_device lists in userconfig()"); +MALLOC_MAKE_TYPE(M_PKTCLASS, "PktClass", "structures used in packet classifier"); +MALLOC_MAKE_TYPE(M_SYSCTL, "sysctl", "sysctl internal magic"); +MALLOC_MAKE_TYPE(M_SECA, "key mgmt", "security associations, key management"); +MALLOC_MAKE_TYPE(M_BIOBUF, "BIO buffer", "BIO buffer"); +MALLOC_MAKE_TYPE(M_KTRACE, "KTRACE", "KTRACE"); +MALLOC_MAKE_TYPE(M_SELECT, "select", "select() buffer"); +MALLOC_MAKE_TYPE(M_GEOM_DEV, "GEOM dev", "geometry device"); +MALLOC_MAKE_TYPE(M_GEOM_MOD, "GEOM mod", "geometry module"); +MALLOC_MAKE_TYPE(M_GEOM_REQ, "GEOM req", "geometry request"); +MALLOC_MAKE_TYPE(M_GEOM_MISC, "GEOM misc", "geometry misc"); +MALLOC_MAKE_TYPE(M_VFSCONF, "VFS conf", "vfsconf structure"); +MALLOC_MAKE_TYPE(M_AIO, "AIO", "AIO structure(s)"); +MALLOC_MAKE_TYPE(M_ZONE, "ZONE", "Zone header"); +MALLOC_MAKE_TYPE(M_HOSTCACHE, "hostcache", "per-host information cache structure"); + /* * Array of descriptors that describe the contents of each page */ @@ -366,8 +281,8 @@ extern struct kmembuckets bucket[]; void *contigmalloc __P((unsigned long size, int type, int flags, unsigned long low, unsigned long high, unsigned long alignment, unsigned long boundary)); -void free __P((void *addr, int type)); -void *malloc __P((unsigned long size, int type, int flags)); +void free __P((void *addr, struct kmemstats *type)); +void *malloc __P((unsigned long size, struct kmemstats *type, int flags)); #endif /* KERNEL */ #endif /* !_SYS_MALLOC_H_ */ diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 9053c4c..67891e0 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)mbuf.h 8.5 (Berkeley) 2/19/95 - * $Id: mbuf.h,v 1.21 1997/02/24 20:32:07 wollman Exp $ + * $Id: mbuf.h,v 1.22 1997/08/16 19:16:11 wollman Exp $ */ #ifndef _SYS_MBUF_H_ @@ -395,7 +395,7 @@ extern int max_linkhdr; /* largest link-level header */ extern int max_protohdr; /* largest protocol header */ extern int max_hdr; /* largest link+protocol header */ extern int max_datalen; /* MHLEN - max_hdr */ -extern int mbtypes[]; /* XXX */ +extern struct kmemstats *mbtypes[]; /* XXX */ struct mbuf *m_copym __P((struct mbuf *, int, int, int)); struct mbuf *m_copypacket __P((struct mbuf *, int)); @@ -419,7 +419,7 @@ void m_copydata __P((struct mbuf *,int,int,caddr_t)); void m_freem __P((struct mbuf *)); #ifdef MBTYPES -int mbtypes[] = { /* XXX */ +struct kmemstats *mbtypes[] = { /* XXX */ M_FREE, /* MT_FREE 0 should be on free list */ M_MBUF, /* MT_DATA 1 dynamic (data) allocation */ M_MBUF, /* MT_HEADER 2 packet header */ |