From 1ba8fc533ab0b510028d26bd9f8bd96f7ceac8fe Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Wed, 14 Jan 2004 18:57:18 +0000 Subject: [PATCH] Move memory_pool to src/add-ons/kernel/generic. Place a Jamfile to build the userland version of this module. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6075 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kits/net/new_stack/memory_pool/Jamfile | 9 + .../net/new_stack/memory_pool/memory_pool.c | 295 ------------------ .../memory_pool/memory_pool_module_x86.proj | Bin 11936 -> 0 bytes 3 files changed, 9 insertions(+), 295 deletions(-) create mode 100644 src/tests/kits/net/new_stack/memory_pool/Jamfile delete mode 100644 src/tests/kits/net/new_stack/memory_pool/memory_pool.c delete mode 100644 src/tests/kits/net/new_stack/memory_pool/memory_pool_module_x86.proj diff --git a/src/tests/kits/net/new_stack/memory_pool/Jamfile b/src/tests/kits/net/new_stack/memory_pool/Jamfile new file mode 100644 index 0000000000..16086b6727 --- /dev/null +++ b/src/tests/kits/net/new_stack/memory_pool/Jamfile @@ -0,0 +1,9 @@ +SubDir OBOS_TOP src tests kits net new_stack memory_pool ; + +SEARCH_SOURCE += [ FDirName $(OBOS_TOP) src add-ons kernel generic memory_pool ] ; + +Addon memory_pool : userland generic : + memory_pool.c +; + +LinkSharedOSLibs memory_pool : stack_tester ; diff --git a/src/tests/kits/net/new_stack/memory_pool/memory_pool.c b/src/tests/kits/net/new_stack/memory_pool/memory_pool.c deleted file mode 100644 index 82f2f370d4..0000000000 --- a/src/tests/kits/net/new_stack/memory_pool/memory_pool.c +++ /dev/null @@ -1,295 +0,0 @@ -#include // for the hack using malloc() / free() -#include -#include - -#include "memory_pool.h" - -// Keep in mind that pools size are rounded to B_PAGE_SIZE, and -// node_size are align to 32 bits boundaries... - -struct memory_pool { - struct memory_pool * next; // for dynamic pool expansion/shrinking... - size_t node_size; // in byte, rounded to 32 bits boundary - uint32 node_count; - // struct memory_pool_block blocks[1]; -}; - -typedef struct memory_pool_block { - uint32 nb_max; // in this pool only, may vary from pool to another for same pools chain - uint32 nb_free; // in this pool only, if 0 try 'next' one... - void * first; // address of first node, just next to freemap - void * last; // address of last node in this pool - // the uint32 freemap[] follow, aligned to 32 bits boundary - // then the nodes data follow... -} memory_pool_block; - -#define BITMAPSIZE(nb_nodes) (nb_nodes / 8) - -status_t std_ops(int32 op, ...); - -memory_pool * new_pool(size_t node_size, uint32 node_count); -status_t delete_pool(memory_pool * pool); -void * new_pool_node(memory_pool * pool); -status_t delete_pool_node(memory_pool * pool, void * node); -status_t for_each_pool_node(memory_pool * pool, pool_iterate_func iterate, void * cookie); - -// Keep in mind that pools size are rounded to B_PAGE_SIZE... - -#define ROUND(x, y) (((x) + (y) - 1) & ~((y) - 1)) - -#define DEBUG 1 - - - -#ifdef CODEWARRIOR - #pragma mark [Public functions] -#endif - -// ------------------------------- -memory_pool * new_pool(size_t node_size, uint32 node_count) -{ - // TODO! - return (memory_pool *) node_size; // quick hack -} - - -// ------------------------------- -status_t delete_pool(memory_pool * pool) -{ - // TODO! - - return 0; // return B_OK; -} - - -// ------------------------------- -void * new_pool_node(memory_pool * pool) -{ - // TODO! - - return malloc((size_t) pool); // quick hack -} - - -// ------------------------------- -status_t delete_pool_node(memory_pool * pool, void * node) -{ - // TODO! - - free(node); // quick hack - return 0; // return B_OK; -} - - -// ------------------------------- -status_t for_each_pool_node(memory_pool * pool, pool_iterate_func iterate, void * cookie) -{ - // TODO! - return 0; // return B_OK; -} - - -#if 0 - -// ------------------------------- -memory_pool * new_pool2(size_t node_size, uint32 node_count) -{ - memory_pool * pool; - size_t size; - size_t freemap_size; - uint8 * ptr; - - - node_size = ROUND(node_size, 4); // aligned to 32 bits - - freemap_size = ROUND(node_count, 32) / 8; // aligned to 32 bits - - size = sizeof(memory_pool); - - size += freemap_size; - size += node_size * node_count; - - pool = (memory_pool *) malloc(size); - - pool->next = NULL; // no secondary pool for the moment... - - pool->node_size = node_size; // aligned to 32 bits - pool->nb_max = node_count; - pool->nb_free = node_count; - - ptr = (uint8 *) (pool + 1); - ptr += freemap_size; - - pool->first = ptr; - - ptr += (node_count-1) * node_size; - - pool->last = ptr; - - return pool; -} - - - -// ------------------------------- -status_t delete_pool2(memory_pool * pool) -{ - memory_pool * next; - - while (pool) { - next = pool->next; - - my_free2("delete_pool: ", pool); - - pool = next; - }; - - return 0; // return B_OK; -} - - -// ------------------------------- -void * new_pool_node2(memory_pool * pool) -{ - memory_pool * p; - size_t slot; - sizet nb_slots; - uint32* freemap; - uint8 * ptr; - - // seaching pools list for one with at least one free node - p = pool; - while (p->nb_free == 0) { - p = p->next; - }; - - if (! p) { - // need to add a new pool - p = new_pool2(pool->node_size, pool->nb_max); - if (!p) - return NULL; // argh, no more memory!?! - - p->next = pool->next; - pool->next = p; - }; - - // okay, now find the first free slot of this pool - slot = 0; - nb_slots = ROUND(p->nb_max, 32); // aligned to 32 bits - freemap = (uint32 *) (p + 1); - - // fast lookup over 32 contiguous slots already in use (if any) - while (slot < nb_slots) { - if (*freemap != 0xFFFFFFFF) - break; - - freemap++; // all 32 contiguous slots used - slot += 32; - }; - - // find the first free slot of these next 32 ones - while(slot < nb_slots) { - if ( *freemap & (1 << (31 - (slot % 32))) == 0) - // free slot found :-) - break; - - slot++; - }; - - if (slot >= nb_slots) - // oh oh, should never happend! ;-) - return NULL; - - *freemap |= (1 << (31 - (slot % 32))); - p->nb_free--; - - ptr = (uint8 *) p->first; - ptr += slot * p->node_size; - - return ptr; -} - - -// ------------------------------- -status_t delete_pool_node2(memory_pool * pool, void * node) -{ - memory_pool * p; - size_t slot; - size_t nb_slots; - uint32* freemap; - uint8 * ptr; - - // seaching pools list for the one who host this node - p = pool; - while (pool) { - if (node >= pool->first && node <= pool->last) - break; // node's hosting pool found - pool = pool->next; - }; - - if (! pool) - return -1; // return B_BAD_VALUE; - - // find node slot number on this pool - slot = (node - pool->first); - if (slot % pool->node_size) - // oh oh, not a valid, starting node address value! - return -1; // return B_BAD_VALUE; - - nb_slots = ROUND(p->nb_max, 32); // aligned to 32 bits - slot /= pool->node_size; - if (slot >= nb_slots) - // oh oh, node slot out of range!!! - // something go wrong with pool->last value!?! - return -1; // return B_BAD_VALUE; - - freemap = (uint32 *) (pool + 1); - - pool->nb_free++; - if (pool->nb_free == pool->nb_max) - // free this pool_block - - return 0; // return B_OK; -} - -#endif - -// #pragma mark - - -memory_pool_module_info mpmi = { - { - MEMORY_POOL_MODULE_NAME, - 0, - std_ops - }, - - new_pool, - delete_pool, - new_pool_node, - delete_pool_node, - for_each_pool_node -}; - -status_t std_ops(int32 op, ...) -{ - switch(op) { - case B_MODULE_INIT: - printf("memory_pool: B_MODULE_INIT\n"); - break; - - case B_MODULE_UNINIT: - printf("memory_pool: B_MODULE_UNINIT\n"); - break; - - default: - return B_ERROR; - } - return B_OK; -} - - -_EXPORT module_info *modules[] = { - (module_info *) &mpmi, // memory_pool_module_info - NULL -}; - diff --git a/src/tests/kits/net/new_stack/memory_pool/memory_pool_module_x86.proj b/src/tests/kits/net/new_stack/memory_pool/memory_pool_module_x86.proj deleted file mode 100644 index 19ff9627e1ef5758202fc254eb3f448614aab650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11936 zcmeHN-ESO467R_l$=W3GhS+Dv0kXs*;Unt>ArKHmyv{l%5IZBU`8afUoAGSh9z0*n zjAKU;(nuhL_;^5yPw z;=xwO!|=Qo0RwJc1|FUpn2W7~$PeIQnNzKT!m^*M;4#JBpctG8LT(pZ4ijy8JPwT8{t#Sc(q!q0S`qP94wOmrO8q`Lm#ZJiOF$I?F@XQx?nmrcj3J+m8c7};cV8h zOk=LS?Jk^q>RawZO@#qnC)6{$zx=uhJ$z+agRiAs-iK@+mfIBnXuQpDy z1$>V`d4J5VS1+>U6FEeB-?$;N_H@S7qz`a6>f&oB_fh{&5bi=H+N3`-!&t{=G|8r1 z?%xB^jA2wQ)0snmZG~)Kr=oivfY(FQb&87xd!Zm7;mcN^S>|lkua&kOcWQ&fyuht# zzQ~RFP@l4XEHL?*Z5h=4g6r&Rmme97= z!(aW&1D8Mo^Gp9mqav5F^IxOf8HR7g zu}3w^WAv3gZ=`01uCGxTC*mcF8qc3U|7|D66$O8|Bx33=!!Qt9sVdw#=-QrXasQ}C zflRcZx>>z}B4uDj-l zUfP;Z!XmaAVbKxYnVHvTcxtEcT=EqpUw0Bd*{<`b?mMP4BbYDEFiD}k4ML6VLb13c zf|C6f$(|E))Hul87rCYtlaNdzq28QGsA{Q(ND#4{ZjBy1xLSC(JY~DpMxc#At05ql znEoWZV_916M0mHf*vTbjZyEruSW?=dV5>baZGYPc{15_iLFt|d%GiWt>I4tUdZ?3# zBFFAP97x%`YY_(;*ey&mRUnB2HI$-a+wyfG!-N_c*f2+mK96C@lt2 zaiQySIK}qJS#vU23s#?1x|ecqE}Maly-*uFZZa1K{aKoT)JyJxRQIUmPU#j>Zvi<*YEF$pL@SE9zy%tKkbSC@l8I?f3YW~2ZH+SRBuEz7-8(} zmV7tDt`d^V|RHj%keeV)S=nEQY>^?&%S9;uW$a zFZt;H#rTe>GOPQ~pUTGS13>m8m64x;>^D8i>QC;Z^It%k3PU$>2E`NQhB-yo57>y z^7X^}d*a(x8=y&~Wq+wAd-_!LW^^<&0pTU&Y_*}Bn{n2}{ZOM1& z`Ht`4Id^;Vz7Ri+!_~xh^x4-v(KFaHxex6u9=IHQNPXXo_Rw>{1oT%R^B^jn^>_eu z+!$<8V4w0k^uPN3mMF4zM3cWAFVTBIJV#J9)Z5rN(s|sVmw#L&;({Ej`(@CO{6L&>O00rQuY;$~4y$PUl?i z(VRp>1<5l~iHdhCDas)P0K#O(p832tI=gfCMLO+#ZeKE9>)(CxkM@?x1HC&p5D^cx zY4jV6?MMC%DsD&j1=PQz-h@h~vk3LTKi~Q5m}ygt(TloW>~=2}0(agwc)@UMoQ+iu zSs2=lDhdIK1|1~Z+K`zWG+4!N;KUT)$2rUBWre&c6gFHU*_I~lMR#B&tg9Y;k|y@2 tn&iZ^FS;=~;3g-e)8Q*hBztR{P@J