Annotation of libaitio/inc/ampool.h, revision 1.1.2.1
1.1.2.1 ! misho 1: #ifndef __AMPOOL_H
! 2: #define __AMPOOL_H
! 3:
! 4:
! 5: /* Memory pool */
! 6:
! 7: #define MEM_BUCKETS 28 /* 32 bits - 4 bits = 28 items in bucket array */
! 8:
! 9: struct tagAlloc {
! 10: char alloc_name[MAX_ATTRIBUTE];
! 11:
! 12: unsigned int *alloc_mem;
! 13:
! 14: TAILQ_ENTRY(tagAlloc) alloc_node;
! 15: };
! 16: typedef TAILQ_HEAD(, tagAlloc) mpool_bucket_t;
! 17:
! 18: typedef struct _tagMPool {
! 19: pthread_mutex_t pool_mtx;
! 20:
! 21: struct {
! 22: unsigned long alloc;
! 23: unsigned long free;
! 24: unsigned long cache;
! 25: } pool_calls;
! 26: struct {
! 27: unsigned long alloc;
! 28: unsigned long free;
! 29: unsigned long cache;
! 30: } pool_bytes;
! 31: struct {
! 32: unsigned long max;
! 33: unsigned long curr;
! 34: } pool_quota;
! 35:
! 36: /* pool buckets */
! 37: mpool_bucket_t pool_active[MEM_BUCKETS];
! 38: mpool_bucket_t pool_inactive[MEM_BUCKETS];
! 39: } mpool_t;
! 40: #define mpool_lock(x) (assert((x)), pthread_mutex_lock(&(x)->pool_mtx))
! 41: #define mpool_unlock(x) (assert((x)), pthread_mutex_unlock(&(x)->pool_mtx))
! 42:
! 43: typedef void (*mpool_stat_cb)(unsigned int, unsigned int, unsigned int);
! 44:
! 45: /* mpool functions */
! 46:
! 47: /*
! 48: * mpool_init() - Init memory pool
! 49: *
! 50: * @maxmem = If !=0 set maximum memory quota
! 51: * return: =NULL error or !=NULL new allocated pool
! 52: */
! 53: mpool_t *mpool_init(unsigned long maxmem);
! 54: /*
! 55: * mpool_destroy() - Destroy memory pool
! 56: *
! 57: * @mp = Memory pool
! 58: * return: none
! 59: */
! 60: void mpool_destroy(mpool_t ** __restrict mp);
! 61: /*
! 62: * mpool_purge() - Purge memory block cache and release resources
! 63: *
! 64: * @mp = Memory pool
! 65: * @atmost = Free at most in buckets
! 66: * return: -1 error or 0 ok
! 67: */
! 68: int mpool_purge(mpool_t * __restrict mp, unsigned int atmost);
! 69: /*
! 70: * mpool_malloc() - Memory allocation
! 71: *
! 72: * @mp = Memory pool
! 73: * @size = Size
! 74: * @memname = Optional memory block name
! 75: * return: NULL error or !=NULL ok allocated memory
! 76: */
! 77: void *mpool_malloc(mpool_t * __restrict mp, unsigned int size, const char *memname);
! 78: /*
! 79: * mpool_free() Free allocated memory with mpool_alloc()
! 80: *
! 81: * @mp = Memory pool
! 82: * @data = Allocated memory data
! 83: * @purge = if !=0 force release memory block
! 84: * return: <0 error or 0 ok released memory block
! 85: */
! 86: int mpool_free(mpool_t * __restrict mp, void * __restrict data, int purge);
! 87: /*
! 88: * mpool_free2() Free allocated memory with mpool_alloc() by size and memory name
! 89: *
! 90: * @mp = Memory pool
! 91: * @size = Allocated memory data size
! 92: * @memname = Memory name
! 93: * @purge = if !=0 force release memory block
! 94: * return: <0 error or 0 ok released memory block
! 95: */
! 96: int mpool_free2(mpool_t * __restrict mp, unsigned int size, const char *memname, int purge);
! 97: /*
! 98: * mpool_realloc() Reallocate memory block with new size
! 99: *
! 100: * @mp = Memory pool
! 101: * @data = Allocated memory data
! 102: * @newsize = New size of memory block
! 103: * @memname = Optional new memory block name
! 104: * return: NULL error or !=NULL new reallocated memory block
! 105: */
! 106: void *mpool_realloc(mpool_t * __restrict mp, void * __restrict data,
! 107: unsigned int newsize, const char *memname);
! 108: /*
! 109: * mpool_getmembynam() Find allocated memory block by size and memory name
! 110: *
! 111: * @mp = Memory pool
! 112: * @size = Memory size
! 113: * @memname = Memory name
! 114: * return: NULL error or not found and !=NULL allocated memory
! 115: */
! 116: inline struct tagAlloc *mpool_getmembynam(mpool_t * __restrict mp, unsigned int size, const char *memname);
! 117: /*
! 118: * mpool_getsizebyaddr() - Get size of allocated memory block by address
! 119: *
! 120: * @data = allocated memory from mpool_malloc()
! 121: * return: usable size of allocated memory block
! 122: */
! 123: inline unsigned int mpool_getsizebyaddr(void * __restrict data);
! 124: /*
! 125: * mpool_chkaddr() - Check validity of given address
! 126: *
! 127: * @data = allocated memory from mpool_malloc()
! 128: * return: -1 bad address, 1 corrupted address or 0 ok
! 129: */
! 130: inline int mpool_chkaddr(void * __restrict data);
! 131: /*
! 132: * mpool_setquota() - Change maximum memory quota
! 133: *
! 134: * @mp = Memory pool
! 135: * @maxmem = New max quota size
! 136: * return: old maximum memory quota size
! 137: */
! 138: inline unsigned long mpool_setquota(mpool_t * __restrict mp, unsigned long maxmem);
! 139: /*
! 140: * mpool_getquota() - Get memory quota
! 141: *
! 142: * @mp = Memory pool
! 143: * @currmem = Return current memory
! 144: * @maxmem = Return max quota size
! 145: * return: none
! 146: */
! 147: inline void mpool_getquota(mpool_t * __restrict mp, unsigned long *currmem,
! 148: unsigned long *maxmem);
! 149: /*
! 150: * mpool_statistics() - Dump statistics from memory pool buckets
! 151: *
! 152: * @mp = Memory pool
! 153: * @cb = Export statistics to callback
! 154: * return: none
! 155: */
! 156: void mpool_statistics(mpool_t * __restrict mp, mpool_stat_cb cb);
! 157:
! 158:
! 159: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>