diff --git a/common/utils/itti/memory_pools.c b/common/utils/itti/memory_pools.c index 2b8653f8f8..e82bcf9d48 100644 --- a/common/utils/itti/memory_pools.c +++ b/common/utils/itti/memory_pools.c @@ -34,6 +34,9 @@ #include "assertions.h" #include "memory_pools.h" +#if defined(OAI_EMU) || defined(RTAI) +# include "vcd_signal_dumper.h" +#endif /*------------------------------------------------------------------------------*/ const static int mp_debug = 0; @@ -50,6 +53,11 @@ const static int mp_debug = 0; while(0) #endif +#if defined(OAI_EMU) || defined(RTAI) +uint64_t vcd_mp_alloc; +uint64_t vcd_mp_free; +#endif + /*------------------------------------------------------------------------------*/ #define CHARS_TO_UINT32(c1, c2, c3, c4) (((c1) << 24) | ((c2) << 16) | ((c3) << 8) | (c4)) @@ -399,6 +407,11 @@ memory_pool_item_handle_t memory_pools_allocate (memory_pools_handle_t memory_po pool_id_t pool; items_group_index_t item_index = ITEMS_GROUP_INDEX_INVALID; +#if defined(OAI_EMU) || defined(RTAI) + vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC, + __sync_or_and_fetch (&vcd_mp_alloc, 1L << info_0)); +#endif + /* Recover memory_pools */ memory_pools = memory_pools_from_handler (memory_pools_handle); @@ -450,10 +463,15 @@ memory_pool_item_handle_t memory_pools_allocate (memory_pools_handle_t memory_po MP_DEBUG(" Alloc [--][------]{------}, %3u %3u, %6u, failed!\n", info_0, info_1, item_size); } +#if defined(OAI_EMU) || defined(RTAI) + vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC, + __sync_and_and_fetch (&vcd_mp_alloc, ~(1L << info_0))); +#endif + return memory_pool_item_handle; } -void memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_item_handle_t memory_pool_item_handle, uint16_t info) +void memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_item_handle_t memory_pool_item_handle, uint16_t info_0) { memory_pools_t *memory_pools; memory_pool_item_t *memory_pool_item; @@ -461,11 +479,19 @@ void memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_i items_group_index_t item_index; uint32_t item_size; uint32_t pool_item_size; + uint16_t info_1; /* Recover memory_pools */ memory_pools = memory_pools_from_handler (memory_pools_handle); /* Recover memory pool item */ memory_pool_item = memory_pool_item_from_handler (memory_pool_item_handle); + info_1 = memory_pool_item->start.info[1]; + +#if defined(OAI_EMU) || defined(RTAI) + vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, + __sync_or_and_fetch (&vcd_mp_free, 1L << info_1)); +#endif + /* Recover pool index */ pool = memory_pool_item->start.pool_id; AssertFatal (pool < memory_pools->pools_defined, "Pool index is invalid (%u/%u)\n", pool, memory_pools->pools_defined); @@ -476,7 +502,7 @@ void memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_i MP_DEBUG(" Free [%2u][%6d]{%6d}, %3u %3u, %p, %p, %p, %lu\n", pool, item_index, memory_pools->pools[pool].items_group_free.current, - memory_pool_item->start.info[0], memory_pool_item->start.info[1], + memory_pool_item->start.info[0], info_1, memory_pool_item_handle, memory_pool_item, memory_pools->pools[pool].items, item_size * sizeof(memory_pool_data_t)); @@ -492,4 +518,9 @@ void memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_i memory_pool_item->start.item_status = ITEM_STATUS_FREE; items_group_put_free_item(&memory_pools->pools[pool].items_group_free, item_index); + +#if defined(OAI_EMU) || defined(RTAI) + vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, + __sync_and_and_fetch (&vcd_mp_free, ~(1L << info_1))); +#endif } diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 25916ec563..542fc042ef 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -83,7 +83,9 @@ const char* eurecomVariablesNames[] = { "itti_send_msg", "itti_poll_msg", "itti_recv_msg", - "itti_alloc_msg" + "itti_alloc_msg", + "mp_alloc", + "mp_free", }; const char* eurecomFunctionsNames[] = { diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 800be262b2..ee19868b98 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -55,6 +55,8 @@ typedef enum VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG, + VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC, + VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, } vcd_signal_dump_variables;