[BACK]Return to mallocvar.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / sys

File: [cvs.NetBSD.org] / src / sys / sys / mallocvar.h (download)

Revision 1.6, Thu Mar 29 16:29:08 2007 UTC (17 years ago) by pooka
Branch: MAIN
CVS Tags: yamt-x86pmap-base4, yamt-x86pmap-base3, yamt-x86pmap-base2, yamt-x86pmap-base, yamt-x86pmap, yamt-idlelwp-base8, vmlocking-base, thorpej-atomic-base, thorpej-atomic, nick-csl-alignment-base5, nick-csl-alignment-base, nick-csl-alignment, mjf-ufs-trans-base, matt-mips64-base, matt-mips64, jmcneill-base, hpcarm-cleanup
Branch point for: mjf-devfs, matt-armv6, jmcneill-pm, bouyer-xenamd64
Changes since 1.5: +10 -4 lines

Introduce MALLOC_JUSTDEFINE{,_LIMIT} which act like their JUSTless
counterparts apart from not adding the new type to the link set and
hence not registering automatically at boot time.  This can be used
to avoid a separate #ifdef _LKM path in some cases.

/*	$NetBSD: mallocvar.h,v 1.6 2007/03/29 16:29:08 pooka Exp $	*/

/*
 * Copyright (c) 1987, 1993
 *	The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	@(#)malloc.h	8.5 (Berkeley) 5/3/95
 */

#ifndef _SYS_MALLOCVAR_H_
#define	_SYS_MALLOCVAR_H_

#include <sys/types.h>

#define	M_MAGIC		877983977

/*
 * This structure describes a type of malloc'd memory and carries
 * allocation statistics for that memory.
 */
struct malloc_type {
	struct malloc_type *ks_next;	/* next in list */
	u_long	ks_magic;	 /* indicates valid structure */
	const char *ks_shortdesc;/* short description */

	/* Statistics */
	u_long	ks_inuse;	/* # of packets of this type currently in use */
	u_long	ks_calls;	/* total packets of this type ever allocated */
	u_long 	ks_memuse;	/* total memory held in bytes */
	u_short	ks_limblocks;	/* number of times blocked for hitting limit */
	u_short	ks_mapblocks;	/* number of times blocked for kernel map */
	u_long	ks_maxused;	/* maximum number ever used */
	u_long	ks_limit;	/* most that are allowed to exist */
	u_long	ks_size;	/* sizes of this thing that are allocated */
	u_long	ks_spare;
};

#ifdef _KERNEL
#define	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit)	\
struct malloc_type type[1] = {						\
	{ NULL, M_MAGIC, shortdesc,					\
	  0, /* ks_inuse */						\
	  0, /* ks_calls */						\
	  0, /* ks_memuse */						\
	  0, /* ks_limblocks */						\
	  0, /* ks_mapblocks */						\
	  0, /* ks_maxused */						\
	  limit, /* ks_limit */						\
	  0, /* ks_size */						\
	  0, /* ks_spare */ }						\
};

#define	MALLOC_JUSTDEFINE(type, shortdesc, longdesc)			\
	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, 0)

#define	MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, limit)		\
	MALLOC_JUSTDEFINE_LIMIT(type, shortdesc, longdesc, limit)	\
	__link_set_add_data(malloc_types, type)

#define	MALLOC_DEFINE(type, shortdesc, longdesc)			\
	MALLOC_DEFINE_LIMIT(type, shortdesc, longdesc, 0)

#define	MALLOC_DECLARE(type)						\
	extern struct malloc_type type[1]

void	malloc_type_attach(struct malloc_type *);
void	malloc_type_detach(struct malloc_type *);

void	malloc_type_setlimit(struct malloc_type *, u_long);
#endif /* _KERNEL */

#endif /* _SYS_MALLOCVAR_H_ */