diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 387c23e1ccb5c34ec9c9b1fcc8c635d4cc4acac5..28267900af58f195988ae35aed5a98cc66e2349e 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -81,13 +81,13 @@ #define ITTI_DEBUG_ISSUES (1<<5) #define ITTI_DEBUG_MP_STATISTICS (1<<6) -const int itti_debug = ITTI_DEBUG_ISSUES | ITTI_DEBUG_MP_STATISTICS; +const int itti_debug = (ITTI_DEBUG_ISSUES | ITTI_DEBUG_MP_STATISTICS); /* Don't flush if using RTAI */ #ifdef RTAI # define ITTI_DEBUG(m, x, args...) do { if ((m) & itti_debug) rt_log_debug (x, ##args); } while(0); #else -# define ITTI_DEBUG(m, x, args...) do { if ((m) & itti_debug) fprintf(stdout, "[ITTI][D]"x, ##args); fflush (stdout); } while(0); +# define ITTI_DEBUG(m, x, args...) do { if ((m) & itti_debug) {fprintf(stdout, "[ITTI][D]"x, ##args); fflush (stdout);} } while(0); #endif #define ITTI_ERROR(x, args...) do { fprintf(stdout, "[ITTI][E]"x, ##args); fflush (stdout); } while(0); diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 846e0be1bafb184f270fdd1b9d8dd8ab690e3505..d1ac2d5f6174d1e605037b2665159bc601fb6db3 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -347,6 +347,8 @@ typedef struct eNB_proc_t_s { /// Context data structure for RX/TX portion of subframe processing typedef struct { + /// index of the current UE RX/TX proc + int proc_id; /// Component Carrier index uint8_t CC_id; /// timestamp transmitted to HW diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 859842ce658b523f59d9f8cdf1cea930428cd5e0..bc5f48a658a272c70ad38549028d64a1d5b88439 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1638,6 +1638,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin if(ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag) { LOG_D(PHY,"PUSCH is programmed on this subframe [pid %d] AbsSuframe %d.%d ==> Skip PUCCH transmission \n",harq_pid,frame_tx,subframe_tx); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_OUT); return; } @@ -1948,6 +1949,9 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ue->generate_ul_signal[eNB_id] = 1; } } + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_OUT); + } void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type) { diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index 2ff2d90de96660627be67b0c79711cfc5e4635bf..792c9de70a4a1e94342c636ae3919070fdb253f2 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -28,6 +28,8 @@ */ #define PDCP_C +//#define DEBUG_PDCP_FIFO_FLUSH_SDU + #ifndef USER_MODE #include <rtai_fifos.h> #endif @@ -160,7 +162,7 @@ boolean_t pdcp_data_req( if (modeP == PDCP_TRANSMISSION_MODE_TRANSPARENT) { LOG_D(PDCP, " [TM] Asking for a new mem_block of size %d\n",sdu_buffer_sizeP); - pdcp_pdu_p = get_free_mem_block(sdu_buffer_sizeP); + pdcp_pdu_p = get_free_mem_block(sdu_buffer_sizeP, __func__); if (pdcp_pdu_p != NULL) { memcpy(&pdcp_pdu_p->data[0], sdu_buffer_pP, sdu_buffer_sizeP); @@ -201,7 +203,7 @@ boolean_t pdcp_data_req( /* * Allocate a new block for the new PDU (i.e. PDU header and SDU payload) */ - pdcp_pdu_p = get_free_mem_block(pdcp_pdu_size); + pdcp_pdu_p = get_free_mem_block(pdcp_pdu_size, __func__); if (pdcp_pdu_p != NULL) { /* @@ -260,7 +262,7 @@ boolean_t pdcp_data_req( PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_p), current_sn); - free_mem_block(pdcp_pdu_p); + free_mem_block(pdcp_pdu_p, __func__); if (ctxt_pP->enb_flag == ENB_FLAG_NO) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_req); @@ -510,7 +512,7 @@ pdcp_data_ind( PROTOCOL_CTXT_FMT"Could not get PDCP instance key 0x%"PRIx64"\n", PROTOCOL_CTXT_ARGS(ctxt_pP), key); - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_OUT); return FALSE; } @@ -567,7 +569,7 @@ pdcp_data_ind( PROTOCOL_PDCP_CTXT_FMT"Incoming (from RLC) SDU is short of size (size:%d)! Ignoring...\n", PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p), sdu_buffer_sizeP); - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); if (ctxt_pP->enb_flag) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind); @@ -598,7 +600,7 @@ pdcp_data_ind( */ #if 0 LOG_D(PDCP, "Ignoring PDU...\n"); - free_mem_block(sdu_buffer); + free_mem_block(sdu_buffer, __func__); return FALSE; #else //LOG_W(PDCP, "Delivering out-of-order SDU to upper layer...\n"); @@ -645,9 +647,9 @@ pdcp_data_ind( rb_id, sdu_buffer_sizeP - pdcp_header_len - pdcp_tailer_len, (uint8_t*)&sdu_buffer_pP->data[pdcp_header_len]); - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); - // free_mem_block(new_sdu); + // free_mem_block(new_sdu, __func__); if (ctxt_pP->enb_flag) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind); } else { @@ -722,7 +724,7 @@ pdcp_data_ind( ctime, (const char*)(&sdu_buffer_pP->data[payload_offset]), sdu_buffer_sizeP - payload_offset ) == 0 ) { - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); if (ctxt_pP->enb_flag) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind); @@ -739,7 +741,7 @@ pdcp_data_ind( if (otg_enabled==1) { LOG_D(OTG,"Discarding received packed\n"); - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); if (ctxt_pP->enb_flag) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind); @@ -794,7 +796,7 @@ pdcp_data_ind( #endif if (FALSE == packet_forwarded) { - new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t)); + new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t), __func__); if (new_sdu_p) { if (pdcp_p->rlc_mode == RLC_MODE_AM ) { @@ -806,6 +808,7 @@ pdcp_data_ind( */ memset(new_sdu_p->data, 0, sizeof (pdcp_data_ind_header_t)); ((pdcp_data_ind_header_t *) new_sdu_p->data)->data_size = sdu_buffer_sizeP - payload_offset; + AssertFatal((sdu_buffer_sizeP - payload_offset >= 0), "invalid PDCP SDU size!"); // Here there is no virtualization possible // set ((pdcp_data_ind_header_t *) new_sdu_p->data)->inst for IP layer here @@ -820,6 +823,11 @@ pdcp_data_ind( ((pdcp_data_ind_header_t*) new_sdu_p->data)->inst = ctxt_pP->module_id - oai_emulation.info.first_enb_local; #endif } +#ifdef DEBUG_PDCP_FIFO_FLUSH_SDU + static uint32_t pdcp_inst = 0; + ((pdcp_data_ind_header_t*) new_sdu_p->data)->inst = pdcp_inst++; + LOG_D(PDCP, "inst=%d size=%d\n", ((pdcp_data_ind_header_t*) new_sdu_p->data)->inst, ((pdcp_data_ind_header_t *) new_sdu_p->data)->data_size); +#endif memcpy(&new_sdu_p->data[sizeof (pdcp_data_ind_header_t)], \ &sdu_buffer_pP->data[payload_offset], \ @@ -856,7 +864,7 @@ pdcp_data_ind( #endif - free_mem_block(sdu_buffer_pP); + free_mem_block(sdu_buffer_pP, __func__); if (ctxt_pP->enb_flag) { stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind); diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c index d584cb1e64561167f84bc43c7e2a90888e68e33b..795cb2e80aa3056a6581bc56470a6fb31039a818 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c @@ -44,7 +44,7 @@ configure_pdcp_req (struct pdcp_entity *pdcpP, void *rlcP, uint8_t rlc_sap_typeP //----------------------------------------------------------------------------- mem_block *mb; - mb = get_free_mem_block (sizeof (struct cpdcp_primitive)); + mb = get_free_mem_block (sizeof (struct cpdcp_primitive), __func__); ((struct cpdcp_primitive *) mb->data)->type = CPDCP_CONFIG_REQ; ((struct cpdcp_primitive *) mb->data)->primitive.config_req.rlc_sap = rlcP; ((struct cpdcp_primitive *) mb->data)->primitive.config_req.rlc_type_sap = rlc_sap_typeP; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index eb78a4ca7c493c9e354fc174b41005d464d8ae3a..8a73c36728c2fb5229e902d9cd36b6c5052c9b1d 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -31,6 +31,7 @@ #define PDCP_FIFO_C #define PDCP_DEBUG 1 +//#define DEBUG_PDCP_FIFO_FLUSH_SDU #ifndef OAI_EMU extern int otg_enabled; @@ -40,6 +41,7 @@ extern int otg_enabled; #include "pdcp_primitives.h" #ifdef USER_MODE +#include <pthread.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -59,6 +61,7 @@ extern int otg_enabled; #include "UTIL/LOG/log.h" #include "UTIL/OTG/otg_tx.h" #include "UTIL/FIFO/pad_list.h" +#include "UTIL/LOG/vcd_signal_dumper.h" #include "platform_constants.h" #include "msc.h" @@ -88,6 +91,21 @@ extern Packet_OTG_List_t *otg_pdcp_buffer; # include "gtpv1u_eNB_task.h" #endif +/* Prevent de-queueing the same PDCP SDU from the queue twice + * by multiple threads. This has happened in TDD when thread-odd + * is flushing a PDCP SDU after UE_RX() processing; whereas + * thread-even is at a special-subframe, skips the UE_RX() process + * and goes straight to the PDCP SDU flushing. The 2nd flushing + * dequeues the same SDU again causing unexpected behavior. + * + * comment out the MACRO below to disable this protection + */ +#define PDCP_SDU_FLUSH_LOCK + +#ifdef PDCP_SDU_FLUSH_LOCK +static pthread_mutex_t mtex = PTHREAD_MUTEX_INITIALIZER; +#endif + pdcp_data_req_header_t pdcp_read_header_g; //----------------------------------------------------------------------------- @@ -95,6 +113,42 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) { //----------------------------------------------------------------------------- +//#if defined(PDCP_USE_NETLINK) && defined(LINUX) + int ret = 0; +//#endif + +#ifdef DEBUG_PDCP_FIFO_FLUSH_SDU +#define THREAD_NAME_LEN 16 + static char threadname[THREAD_NAME_LEN]; + ret = pthread_getname_np(pthread_self(), threadname, THREAD_NAME_LEN); + if (ret != 0) + { + perror("pthread_getname_np : "); + exit_fun("Error getting thread name"); + } +#undef THREAD_NAME_LEN +#endif + +#ifdef PDCP_SDU_FLUSH_LOCK + ret = pthread_mutex_trylock(&mtex); + if (ret == EBUSY) { +#ifdef DEBUG_PDCP_FIFO_FLUSH_SDU + LOG_W(PDCP, "[%s] at SFN/SF=%d/%d wait for PDCP FIFO to be unlocked\n", + threadname, ctxt_pP->frame, ctxt_pP->subframe); +#endif + if (pthread_mutex_lock(&mtex)) { + exit_fun("PDCP_SDU_FLUSH_LOCK lock error!"); + } +#ifdef DEBUG_PDCP_FIFO_FLUSH_SDU + LOG_I(PDCP, "[%s] at SFN/SF=%d/%d PDCP FIFO is unlocked\n", + threadname, ctxt_pP->frame, ctxt_pP->subframe); +#endif + } else if (ret != 0) { + exit_fun("PDCP_SDU_FLUSH_LOCK trylock error!"); + } + +#endif + mem_block_t *sdu_p = list_get_head (&pdcp_sdu_list); int bytes_wrote = 0; int pdcp_nb_sdu_sent = 0; @@ -103,15 +157,19 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) //MessageDef *message_p = NULL; #endif -#if defined(PDCP_USE_NETLINK) && defined(LINUX) - int ret = 0; -#endif - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH, 1 ); while (sdu_p && cont) { +#ifdef DEBUG_PDCP_FIFO_FLUSH_SDU + LOG_D(PDCP, "[%s] SFN/SF=%d/%d inst=%d size=%d\n", + threadname, ctxt_pP->frame, ctxt_pP->subframe, + ((pdcp_data_ind_header_t*) sdu_p->data)->inst, + ((pdcp_data_ind_header_t *) sdu_p->data)->data_size); +#else #if ! defined(OAI_EMU) ((pdcp_data_ind_header_t *)(sdu_p->data))->inst = 0; #endif +#endif #if defined(LINK_ENB_PDCP_TO_GTPV1U) @@ -126,7 +184,7 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) ((pdcp_data_ind_header_t *)(sdu_p->data))->data_size); list_remove_head (&pdcp_sdu_list); - free_mem_block (sdu_p); + free_mem_block (sdu_p, __func__); cont = 1; pdcp_nb_sdu_sent += 1; sdu_p = list_get_head (&pdcp_sdu_list); @@ -175,6 +233,7 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) if (!pdcp_output_header_bytes_to_write) { // continue with sdu pdcp_output_sdu_bytes_to_write = ((pdcp_data_ind_header_t *) sdu_p->data)->data_size; + AssertFatal(pdcp_output_sdu_bytes_to_write >= 0, "invalid data_size!"); #ifdef PDCP_USE_RT_FIFO bytes_wrote = rtf_put (PDCP2PDCP_USE_RT_FIFO, &(sdu->data[sizeof (pdcp_data_ind_header_t)]), pdcp_output_sdu_bytes_to_write); @@ -184,7 +243,11 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) #ifdef LINUX memcpy(NLMSG_DATA(nas_nlh_tx)+sizeof(pdcp_data_ind_header_t), &(sdu_p->data[sizeof (pdcp_data_ind_header_t)]), pdcp_output_sdu_bytes_to_write); nas_nlh_tx->nlmsg_len += pdcp_output_sdu_bytes_to_write; + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE_PDCP_FLUSH_SIZE, pdcp_output_sdu_bytes_to_write); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH_BUFFER, 1 ); ret = sendmsg(nas_sock_fd,&nas_msg_tx,0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH_BUFFER, 0 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE_PDCP_FLUSH_ERR, ret ); if (ret<0) { LOG_E(PDCP, "[PDCP_FIFOS] sendmsg returns %d (errno: %d)\n", ret, errno); @@ -238,17 +301,22 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id); list_remove_head (&pdcp_sdu_list); - free_mem_block (sdu_p); + free_mem_block (sdu_p, __func__); cont = 1; pdcp_nb_sdu_sent += 1; sdu_p = list_get_head (&pdcp_sdu_list); + } else { + LOG_D(PDCP, "1 skip free_mem_block: pdcp_output_sdu_bytes_to_write = %d\n", pdcp_output_sdu_bytes_to_write); + AssertFatal(pdcp_output_sdu_bytes_to_write > 0, "pdcp_output_sdu_bytes_to_write cannot be negative!"); } } else { - LOG_W(PDCP, "RADIO->IP SEND SDU CONGESTION!\n"); + LOG_W(PDCP, "2: RADIO->IP SEND SDU CONGESTION!\n"); } } else { - LOG_W(PDCP, "RADIO->IP SEND SDU CONGESTION!\n"); + LOG_W(PDCP, "3: RADIO->IP SEND SDU CONGESTION!\n"); } + } else { + LOG_D(PDCP, "4 skip free_mem_block: bytes_wrote = %d\n", bytes_wrote); } } else { // continue writing sdu @@ -266,15 +334,20 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) if (!pdcp_output_sdu_bytes_to_write) { // OK finish with this SDU //PRINT_RB_SEND_OUTPUT_SDU ("[PDCP] RADIO->IP SEND SDU\n"); list_remove_head (&pdcp_sdu_list); - free_mem_block (sdu_p); + free_mem_block (sdu_p, __func__); cont = 1; pdcp_nb_sdu_sent += 1; sdu_p = list_get_head (&pdcp_sdu_list); // LOG_D(PDCP, "rb sent a sdu from rab\n"); + } else { + LOG_D(PDCP, "5 skip free_mem_block: pdcp_output_sdu_bytes_to_write = %d\n", pdcp_output_sdu_bytes_to_write); } + } else { + LOG_D(PDCP, "6 skip free_mem_block: bytes_wrote = %d\n", bytes_wrote); } } } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH, 0 ); #ifdef PDCP_USE_RT_FIFO @@ -295,6 +368,10 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) #endif //PDCP_USE_RT_FIFO +#ifdef PDCP_SDU_FLUSH_LOCK + if (pthread_mutex_unlock(&mtex)) exit_fun("PDCP_SDU_FLUSH_LOCK unlock error!"); +#endif + return pdcp_nb_sdu_sent; } @@ -429,7 +506,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) int rlc_data_req_flag = 3; while ((len > 0) && (rlc_data_req_flag !=0)) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ, 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ_BUFFER, 1 ); len = recvmsg(nas_sock_fd, &nas_msg_rx, 0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ_BUFFER, 0 ); if (len<=0) { // nothing in pdcp NAS socket @@ -707,6 +787,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) } } } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ, 0 ); } return len; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c index ded7dc078393adc116d0c0e1ddf5861da94872b9..1dea4ced9fc3db3d315a4c5e3ed29ecf3cac3335 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c @@ -1280,7 +1280,7 @@ rlc_am_data_req ( l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].mem_block, l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].flags.segmented); l_rlc_p->stat_tx_pdcp_sdu_discarded += 1; l_rlc_p->stat_tx_pdcp_bytes_discarded += ((struct rlc_am_data_req *) (sdu_pP->data))->data_size; - free_mem_block (sdu_pP); + free_mem_block (sdu_pP, __func__); #if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_AM_CTXT_FMT" RLC_AM_DATA_REQ size %d Bytes, SDU DROPPED, INPUT BUFFER OVERFLOW NB SDU %d current_sdu_index=%d next_sdu_index=%d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,l_rlc_p), diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c index a767e94dc7b43224814161dafd8a7a5a711a3bd5..0f0b0e75e1b70f24862309c86ac5c48ccfe5bde0 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c @@ -42,7 +42,7 @@ void rlc_am_free_in_sdu( { if (index_in_bufferP <= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { if (rlcP->input_sdus[index_in_bufferP].mem_block != NULL) { - free_mem_block(rlcP->input_sdus[index_in_bufferP].mem_block); + free_mem_block(rlcP->input_sdus[index_in_bufferP].mem_block, __func__); rlcP->input_sdus[index_in_bufferP].mem_block = NULL; rlcP->nb_sdu_no_segmented -= 1; rlcP->input_sdus[index_in_bufferP].sdu_remaining_size = 0; @@ -81,7 +81,7 @@ rlc_am_free_in_sdu_data( { if (index_in_bufferP <= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { if (rlcP->input_sdus[index_in_bufferP].mem_block != NULL) { - free_mem_block(rlcP->input_sdus[index_in_bufferP].mem_block); + free_mem_block(rlcP->input_sdus[index_in_bufferP].mem_block, __func__); rlcP->input_sdus[index_in_bufferP].mem_block = NULL; rlcP->input_sdus[index_in_bufferP].sdu_remaining_size = 0; rlcP->nb_sdu_no_segmented -= 1; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c index a7cf302d06758ee5f41f6631c817960ba8b4759c..74a1cd5390e4b2984addeed408879d91b760e921 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c @@ -152,7 +152,7 @@ rlc_am_cleanup( if (rlc_pP->output_sdu_in_construction != NULL) { - free_mem_block(rlc_pP->output_sdu_in_construction); + free_mem_block(rlc_pP->output_sdu_in_construction, __func__); rlc_pP->output_sdu_in_construction = NULL; } @@ -161,7 +161,7 @@ rlc_am_cleanup( if (rlc_pP->input_sdus != NULL) { for (i=0; i < RLC_AM_SDU_CONTROL_BUFFER_SIZE; i++) { if (rlc_pP->input_sdus[i].mem_block != NULL) { - free_mem_block(rlc_pP->input_sdus[i].mem_block); + free_mem_block(rlc_pP->input_sdus[i].mem_block, __func__); rlc_pP->input_sdus[i].mem_block = NULL; } } @@ -175,7 +175,7 @@ rlc_am_cleanup( if (rlc_pP->pdu_retrans_buffer != NULL) { for (i=0; i < RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE; i++) { if (rlc_pP->pdu_retrans_buffer[i].mem_block != NULL) { - free_mem_block(rlc_pP->pdu_retrans_buffer[i].mem_block); + free_mem_block(rlc_pP->pdu_retrans_buffer[i].mem_block, __func__); rlc_pP->pdu_retrans_buffer[i].mem_block = NULL; } } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c index d13b89f1dcadfd864e98d99586695ae3c39613a4..873e51fbfe395c0e6aa48909a11c46830d682a59 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c @@ -55,7 +55,7 @@ rlc_am_reassembly ( lengthP); if (rlc_pP->output_sdu_in_construction == NULL) { - rlc_pP->output_sdu_in_construction = get_free_mem_block (RLC_SDU_MAX_SIZE); + rlc_pP->output_sdu_in_construction = get_free_mem_block (RLC_SDU_MAX_SIZE, __func__); rlc_pP->output_sdu_size_to_write = 0; assert(rlc_pP->output_sdu_in_construction != NULL); } @@ -197,7 +197,7 @@ rlc_am_send_sdu ( LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND_SDU] ERROR SIZE <= 0 ... DO NOTHING, SET SDU SIZE TO 0\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); //msg("[RLC_AM][MOD %d] Freeing mem_block ...\n", rlc_pP->module_id); - //free_mem_block (rlc_pP->output_sdu_in_construction); + //free_mem_block (rlc_pP->output_sdu_in_construction, __func__); AssertFatal(3==4, PROTOCOL_RLC_AM_CTXT_FMT" SEND SDU REQUESTED %d bytes", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -397,5 +397,5 @@ rlc_am_reassemble_pdu( } } - free_mem_block(tb_pP); + free_mem_block(tb_pP, __func__); } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c index d0b023833ad24b7fa9fe877d41b6cf446c7740bf..d783684893565fa74cf32aef762d604823d706a9 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c @@ -346,7 +346,7 @@ rlc_am_receive_process_data_pdu ( if (rlc_am_rx_list_insert_pdu(ctxt_pP, rlc_pP,tb_pP) < 0) { rlc_pP->stat_rx_data_pdu_dropped += 1; rlc_pP->stat_rx_data_bytes_dropped += tb_size_in_bytesP; - free_mem_block (tb_pP); + free_mem_block (tb_pP, __func__); LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[PROCESS RX PDU] PDU DISCARDED, STATUS REQUESTED:\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); rlc_pP->status_requested = 1; @@ -437,12 +437,12 @@ rlc_am_receive_process_data_pdu ( } else { rlc_pP->stat_rx_data_pdu_out_of_window += 1; rlc_pP->stat_rx_data_bytes_out_of_window += tb_size_in_bytesP; - free_mem_block (tb_pP); + free_mem_block (tb_pP, __func__); LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[PROCESS RX PDU] PDU OUT OF RX WINDOW, DISCARDED, STATUS REQUESTED:\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); rlc_pP->status_requested = 1; } } else { - free_mem_block (tb_pP); + free_mem_block (tb_pP, __func__); } } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c index 445014c62cee82613eb65feb872548445fba69c2..f7f900fa657edebf8d148f758b3286c37b2f8cd4 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c @@ -143,7 +143,7 @@ void rlc_am_ack_pdu ( if ((rlc_pP->pdu_retrans_buffer[snP].flags.ack == 0) && (mb_p != NULL)) { //if (mb_pP != NULL) { - free_mem_block(mb_p); + free_mem_block(mb_p, __func__); rlc_pP->pdu_retrans_buffer[snP].mem_block = NULL; LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[ACK-PDU] ACK PDU SN %05d previous retx_count %d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -235,7 +235,7 @@ void rlc_am_ack_pdu ( snP); if (mb_p != NULL) { - free_mem_block(mb_p); + free_mem_block(mb_p, __func__); rlc_pP->pdu_retrans_buffer[snP].mem_block = NULL; } @@ -275,7 +275,7 @@ mem_block_t* rlc_am_retransmit_get_copy ( rlc_am_tx_data_pdu_management_t *pdu_mngt = &rlc_pP->pdu_retrans_buffer[snP % RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE]; int size = pdu_mngt->header_and_payload_size + sizeof(struct mac_tb_req); - mem_block_t* mb_copy = get_free_mem_block(size); + mem_block_t* mb_copy = get_free_mem_block(size, __func__); memcpy(mb_copy->data, mb_original_p->data, size); rlc_am_pdu_sn_10_t *pdu_p = (rlc_am_pdu_sn_10_t*) (&mb_copy->data[sizeof(struct mac_tb_req)]); @@ -343,7 +343,7 @@ mem_block_t* rlc_am_retransmit_get_subsegment( mem_block_t* mb_original_p = rlc_pP->pdu_retrans_buffer[snP].mem_block; if (mb_original_p != NULL) { - mem_block_t* mb_sub_segment_p = get_free_mem_block(*sizeP + sizeof(struct mac_tb_req)); + mem_block_t* mb_sub_segment_p = get_free_mem_block(*sizeP + sizeof(struct mac_tb_req), __func__); rlc_am_pdu_sn_10_t* pdu_original_p = (rlc_am_pdu_sn_10_t*) (&mb_original_p->data[sizeof(struct mac_tb_req)]); rlc_am_pdu_sn_10_t* pdu_sub_segment_p = (rlc_am_pdu_sn_10_t*) (&mb_sub_segment_p->data[sizeof(struct mac_tb_req)]); rlc_am_pdu_info_t pdu_info; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c index f2a12112c490b5d15564718952055ed2289a1391..893588d65e28fbc7651b7ef36bfec7e424309a67 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c @@ -197,7 +197,7 @@ void rlc_am_segment_10 ( data_pdu_size); } - if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req)))) { + if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req), __func__))) { LOG_C(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); RLC_AM_MUTEX_UNLOCK(&rlc_pP->lock_input_sdus); @@ -366,7 +366,7 @@ void rlc_am_segment_10 ( // free SDU rlc_pP->sdu_buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; rlc_am_free_in_sdu_data(ctxt_pP, rlc_pP, rlc_pP->current_sdu_index); - //free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index]); + //free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index], __func__); //rlc_pP->input_sdus[rlc_pP->current_sdu_index] = NULL; //rlc_pP->nb_sdu -= 1; rlc_pP->current_sdu_index = (rlc_pP->current_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; @@ -445,7 +445,7 @@ void rlc_am_segment_10 ( sdu_mngt_p->sdu_remaining_size = 0; rlc_am_free_in_sdu_data(ctxt_pP, rlc_pP, rlc_pP->current_sdu_index); - //free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index]); + //free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index], __func__); //rlc_pP->input_sdus[rlc_pP->current_sdu_index] = NULL; //rlc_pP->nb_sdu -= 1; rlc_pP->current_sdu_index = (rlc_pP->current_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c index efbd29350cf925269bcf027d5bcf2203f9a61a8d..d687bf8606f31ad4ec3b3c8bad31886e49286f53 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c @@ -370,7 +370,7 @@ rlc_am_receive_process_control_pdu( *first_byte_ppP = (uint8_t*)((uint64_t)*first_byte_ppP + initial_pdu_size - *tb_size_in_bytes_pP); - free_mem_block(tb_pP); + free_mem_block(tb_pP, __func__); rlc_am_tx_buffer_display(ctxt_pP, rlc_pP, NULL); } //----------------------------------------------------------------------------- @@ -730,7 +730,7 @@ end_push_nack: __LINE__, pdu_size); #endif - tb_p = get_free_mem_block(sizeof(struct mac_tb_req) + pdu_size); + tb_p = get_free_mem_block(sizeof(struct mac_tb_req) + pdu_size, __func__); memset(tb_p->data, 0, sizeof(struct mac_tb_req) + pdu_size); //estimation only ((struct mac_tb_req*)(tb_p->data))->tb_size = pdu_size; ((struct mac_tb_req*)(tb_p->data))->data_ptr = (uint8_t*)&(tb_p->data[sizeof(struct mac_tb_req)]); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c index e03741707e838a4bf74c796d949d29f24d6495b1..8e201a949b84796288ee65a9b5797d4528495131 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c @@ -516,7 +516,7 @@ void rlc_am_v9_3_0_test_send_sdu(rlc_am_entity_t *am_txP, int sdu_indexP) //----------------------------------------------------------------------------- { mem_block_t *sdu; - sdu = get_free_mem_block (strlen(g_sdus[sdu_indexP]) + 1 + sizeof (struct rlc_am_data_req_alloc)); + sdu = get_free_mem_block (strlen(g_sdus[sdu_indexP]) + 1 + sizeof (struct rlc_am_data_req_alloc), __func__); if (sdu != NULL) { // PROCESS OF COMPRESSION HERE: @@ -561,7 +561,7 @@ void rlc_am_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct ma *tx_packetsP = *tx_packetsP + 1; if (*drop_countP == 0) { - tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size); + tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size, __func__); if (tb_dst != NULL) { ((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0; @@ -585,7 +585,7 @@ void rlc_am_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct ma *dropped_tx_packetsP = *dropped_tx_packetsP + 1; } - free_mem_block(tb_src); + free_mem_block(tb_src, __func__); if (data_indP->no_tb > 0) { printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb); @@ -673,13 +673,13 @@ void rlc_am_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_si assert(g_send_sdu_ids[g_send_id_read_index[rb_idP]][rb_idP^1] == i); g_send_id_read_index[rb_idP] += 1; - free_mem_block(sduP); + free_mem_block(sduP, __func__); return; } } printf("[FRAME %05d][RLC][MOD %d][RB %d] RX UNKNOWN SDU %04d bytes\n",g_frame,module_idP, rb_idP, sizeP); - free_mem_block(sduP); + free_mem_block(sduP, __func__); assert(1==2); } //----------------------------------------------------------------------------- diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c index d854e435e1b316914222d9eba4565fc42185f042..6e495bcefff56c3f43faec496998e2d6e49844f8 100644 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c @@ -51,7 +51,7 @@ rlc_tm_send_sdu ( length_in_bytes = (length_in_bitsP + 7) >> 3; if (rlc_pP->output_sdu_in_construction == NULL) { - rlc_pP->output_sdu_in_construction = get_free_mem_block (length_in_bytes); + rlc_pP->output_sdu_in_construction = get_free_mem_block (length_in_bytes, __func__); } if ((rlc_pP->output_sdu_in_construction)) { @@ -97,7 +97,7 @@ rlc_tm_no_segment ( sdu_mngt_p = ((struct rlc_tm_tx_sdu_management *) (rlc_pP->input_sdus[rlc_pP->current_sdu_index]->data)); - if (!(pdu_p = get_free_mem_block (((rlc_pP->rlc_pdu_size + 7) >> 3) + sizeof (struct rlc_tm_tx_data_pdu_struct) + GUARD_CRC_LIH_SIZE))) { + if (!(pdu_p = get_free_mem_block (((rlc_pP->rlc_pdu_size + 7) >> 3) + sizeof (struct rlc_tm_tx_data_pdu_struct) + GUARD_CRC_LIH_SIZE, __func__))) { LOG_D(RLC, PROTOCOL_RLC_TM_CTXT_FMT"[SEGMENT] ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_TM_CTXT_ARGS(ctxt_pP, rlc_pP)); return; @@ -116,7 +116,7 @@ rlc_tm_no_segment ( list_add_tail_eurecom (pdu_p, &rlc_pP->pdus_to_mac_layer); rlc_pP->buffer_occupancy -= (sdu_mngt_p->sdu_size >> 3); - free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index]); + free_mem_block (rlc_pP->input_sdus[rlc_pP->current_sdu_index], __func__); rlc_pP->input_sdus[rlc_pP->current_sdu_index] = NULL; rlc_pP->current_sdu_index = (rlc_pP->current_sdu_index + 1) % rlc_pP->size_input_sdus_buffer; rlc_pP->nb_sdu -= 1; @@ -142,7 +142,7 @@ rlc_tm_rx ( ((struct rlc_tm_rx_pdu_management *) (tb_p->data))->first_byte = first_byte_p; rlc_tm_send_sdu (ctxt_pP, rlc_p, (((struct mac_tb_ind *) (tb_p->data))->error_indication), first_byte_p, data_indP.tb_size); - free_mem_block (tb_p); + free_mem_block (tb_p, __func__); } } @@ -235,6 +235,6 @@ rlc_tm_data_req ( rlc_p->input_sdus[rlc_p->next_sdu_index] = sdu_pP; rlc_p->next_sdu_index = (rlc_p->next_sdu_index + 1) % rlc_p->size_input_sdus_buffer; } else { - free_mem_block (sdu_pP); + free_mem_block (sdu_pP, __func__); } } diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c index 4d75f3ee30cbd24b086d9728715f886945bb35eb..8ddea705cdc5acfb0949653089e7c81245688bbd 100644 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c @@ -82,7 +82,7 @@ void rlc_tm_init ( rlcP->size_input_sdus_buffer = 16; if ((rlcP->input_sdus_alloc == NULL) && (rlcP->size_input_sdus_buffer > 0)) { - rlcP->input_sdus_alloc = get_free_mem_block (rlcP->size_input_sdus_buffer * sizeof (void *)); + rlcP->input_sdus_alloc = get_free_mem_block (rlcP->size_input_sdus_buffer * sizeof (void *), __func__); rlcP->input_sdus = (mem_block_t **) (rlcP->input_sdus_alloc->data); memset (rlcP->input_sdus, 0, rlcP->size_input_sdus_buffer * sizeof (void *)); } @@ -114,17 +114,17 @@ rlc_tm_cleanup ( if (rlcP->input_sdus_alloc) { for (index = 0; index < rlcP->size_input_sdus_buffer; index++) { if (rlcP->input_sdus[index]) { - free_mem_block (rlcP->input_sdus[index]); + free_mem_block (rlcP->input_sdus[index], __func__); } } - free_mem_block (rlcP->input_sdus_alloc); + free_mem_block (rlcP->input_sdus_alloc, __func__); rlcP->input_sdus_alloc = NULL; } // RX SIDE if ((rlcP->output_sdu_in_construction)) { - free_mem_block (rlcP->output_sdu_in_construction); + free_mem_block (rlcP->output_sdu_in_construction, __func__); } memset(rlcP, 0, sizeof(rlc_tm_entity_t)); diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c index 057be0000d45125d1cb9c454d98df2ae2de92b39..d0e9e28ef0267ab3bea0c3f36b6423910acaa9f8 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c @@ -334,13 +334,13 @@ rlc_um_cleanup ( list_free (&rlc_pP->pdus_from_mac_layer); if ((rlc_pP->output_sdu_in_construction)) { - free_mem_block (rlc_pP->output_sdu_in_construction); + free_mem_block (rlc_pP->output_sdu_in_construction, __func__); } if (rlc_pP->dar_buffer) { for (index = 0; index < 1024; index++) { if (rlc_pP->dar_buffer[index]) { - free_mem_block (rlc_pP->dar_buffer[index]); + free_mem_block (rlc_pP->dar_buffer[index], __func__); } } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c index fb83446e63bab8a41b1dad84d832b941f3d12050..bffac3db7abcca2df5c560c675e9e51fd31968de 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c @@ -273,6 +273,7 @@ rlc_um_try_reassembly( __LINE__); #endif } + AssertFatal(size >= 0, "invalid size!"); if (e == RLC_E_FIXED_PART_DATA_FIELD_FOLLOW) { switch (fi) { @@ -544,7 +545,7 @@ rlc_um_try_reassembly( __FILE__, __LINE__); #endif - free_mem_block(rlc_pP->dar_buffer[sn]); + free_mem_block(rlc_pP->dar_buffer[sn], __func__); rlc_pP->dar_buffer[sn] = NULL; } else { rlc_pP->last_reassemblied_missing_sn = sn; @@ -957,7 +958,7 @@ rlc_um_receive_process_dar ( } else if (rlc_pP->rx_sn_length == 5) { sn = pdu_pP->b1 & 0x1F; } else { - free_mem_block(pdu_mem_pP); + free_mem_block(pdu_mem_pP, __func__); } RLC_UM_MUTEX_LOCK(&rlc_pP->lock_dar_buffer, ctxt_pP, rlc_pP); @@ -982,7 +983,7 @@ rlc_um_receive_process_dar ( #endif rlc_pP->stat_rx_data_pdu_out_of_window += 1; rlc_pP->stat_rx_data_bytes_out_of_window += tb_sizeP; - free_mem_block(pdu_mem_pP); + free_mem_block(pdu_mem_pP, __func__); pdu_mem_pP = NULL; RLC_UM_MUTEX_UNLOCK(&rlc_pP->lock_dar_buffer); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_UM_RECEIVE_PROCESS_DAR, VCD_FUNCTION_OUT); @@ -1001,7 +1002,7 @@ rlc_um_receive_process_dar ( //discard the PDU rlc_pP->stat_rx_data_pdus_duplicate += 1; rlc_pP->stat_rx_data_bytes_duplicate += tb_sizeP; - free_mem_block(pdu_mem_pP); + free_mem_block(pdu_mem_pP, __func__); pdu_mem_pP = NULL; RLC_UM_MUTEX_UNLOCK(&rlc_pP->lock_dar_buffer); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_UM_RECEIVE_PROCESS_DAR, VCD_FUNCTION_OUT); @@ -1017,7 +1018,7 @@ rlc_um_receive_process_dar ( sn); #endif mem_block_t *pdu = rlc_um_remove_pdu_from_dar_buffer(ctxt_pP, rlc_pP, sn); - free_mem_block(pdu); + free_mem_block(pdu, __func__); } rlc_um_store_pdu_in_dar_buffer(ctxt_pP, rlc_pP, pdu_mem_pP, sn); diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c index f8c6fdeabe50c364b2a65e05e1bba864b1f26afe..0805d708ca99fb01cb5eaea8197c52d52755a4a1 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c @@ -69,7 +69,7 @@ rlc_um_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP if (rlc_pP->output_sdu_in_construction == NULL) { // msg("[RLC_UM_LITE] Getting mem_block ...\n"); - rlc_pP->output_sdu_in_construction = get_free_mem_block (sdu_max_size); + rlc_pP->output_sdu_in_construction = get_free_mem_block (sdu_max_size, __func__); rlc_pP->output_sdu_size_to_write = 0; } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c index 5ce681723e729e475104dcb45e6ad80dc5c722dd..bae9bd8d80535e3bfc253b7f272e99b3ff96f81c 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c @@ -115,7 +115,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP #endif } - if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req)))) { + if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req), __func__))) { #if TRACE_RLC_UM_SEGMENT LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); @@ -291,7 +291,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; @@ -356,7 +356,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; @@ -380,7 +380,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; @@ -503,7 +503,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) #endif } - if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req)))) { + if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req), __func__))) { #if TRACE_RLC_UM_SEGMENT LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); @@ -679,7 +679,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; @@ -743,7 +743,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; @@ -765,7 +765,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) // free SDU rlc_pP->buffer_occupancy -= sdu_mngt_p->sdu_remaining_size; sdu_in_buffer = list_remove_head(&rlc_pP->input_sdus); - free_mem_block (sdu_in_buffer); + free_mem_block (sdu_in_buffer, __func__); sdu_in_buffer = list_get_head(&rlc_pP->input_sdus); sdu_mngt_p = NULL; } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c index 92f18e72d7629e228aa4627dc850b3493d7888d5..fced6efbf92bff76713c998974b19897185dd659 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c @@ -301,7 +301,7 @@ void rlc_um_v9_3_0_test_send_sdu(rlc_um_entity_t *um_txP, int sdu_indexP) //----------------------------------------------------------------------------- { mem_block_t *sdu; - sdu = get_free_mem_block (strlen(g_sdus[sdu_indexP]) + 1 + sizeof (struct rlc_um_data_req_alloc)); + sdu = get_free_mem_block (strlen(g_sdus[sdu_indexP]) + 1 + sizeof (struct rlc_um_data_req_alloc), __func__); if (sdu != NULL) { // PROCESS OF COMPRESSION HERE: @@ -405,12 +405,12 @@ void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind* data_indP, struct ma *tx_packetsP = *tx_packetsP + 1; if (*drop_countP == 0) { - tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size); + tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size, __func__); memset(tb_dst->data, 0, sizeof (mac_rlc_max_rx_header_size_t) + tb_size); if (tb_dst != NULL) { //printf("[RLC-LOOP] Testing tb_dst (1)\n"); - check_free_mem_block(tb_dst); + check_free_mem_block(tb_dst, __func__); tb_dst->next = NULL; ((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0; ((struct mac_tb_ind *) (tb_dst->data))->data_ptr = &tb_dst->data[sizeof (mac_rlc_max_rx_header_size_t)]; @@ -424,7 +424,7 @@ void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind* data_indP, struct ma list_add_tail_eurecom(tb_dst, &data_indP->data); data_indP->no_tb += 1; //printf("[RLC-LOOP] Testing tb_dst (2)\n"); - check_free_mem_block(tb_dst); + check_free_mem_block(tb_dst, __func__); } else { printf("Out of memory error\n"); exit(-1); @@ -437,9 +437,9 @@ void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind* data_indP, struct ma //printf("[RLC-LOOP] Testing tb_src\n"); - check_free_mem_block(tb_src); + check_free_mem_block(tb_src, __func__); - free_mem_block(tb_src); + free_mem_block(tb_src, __func__); if (data_indP->no_tb > 0) { printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb); @@ -578,13 +578,13 @@ void rlc_um_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_si assert(g_send_sdu_ids[g_send_id_read_index[rb_idP]][rb_idP^1] == i); g_send_id_read_index[rb_idP] += 1; - free_mem_block(sduP); + free_mem_block(sduP, __func__); return; } } printf("[FRAME %05d][RLC][MOD %d][RB %d] RX UNKNOWN SDU %04d bytes\n",g_frame,module_idP, rb_idP, sizeP); - free_mem_block(sduP); + free_mem_block(sduP, __func__); assert(1==2); } else { for (i = 0; i < 37; i++) { @@ -592,13 +592,13 @@ void rlc_um_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_si printf("[FRAME %05d][RLC][MOD %02d][RB %02d] RX SDU %d %04d bytes\n",g_frame,module_idP, rb_idP, i, sizeP); assert(TEST_MAX_SEND_SDU > g_send_id_read_index[rb_idP]); g_send_id_read_index[rb_idP] += 1; - free_mem_block(sduP); + free_mem_block(sduP, __func__); return; } } printf("[FRAME %05d][RLC][MOD %d][RB %d] RX UNKNOWN SDU %04d bytes\n",g_frame,module_idP, rb_idP, sizeP); - free_mem_block(sduP); + free_mem_block(sduP, __func__); return; } } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c index ef6ca75be90435a9d9001dd49e2c9007dd48901d..9934fd3a588e2d7f921005a0226ba9fa18ae2322 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c @@ -44,7 +44,7 @@ rlc_um_test_send_sdu (rlc_um_entity_t* rlcP, uint32_t frame, unsigned int s switch (sdu_typeP) { case RLC_UM_TEST_SDU_TYPE_TCPIP: - sdu_mem = get_free_mem_block (strlen(tcip_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc)); + sdu_mem = get_free_mem_block (strlen(tcip_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc), __func__); if (sdu_mem != NULL) { memset (sdu_mem->data, 0, sizeof (struct rlc_um_data_req_alloc)); @@ -59,7 +59,7 @@ rlc_um_test_send_sdu (rlc_um_entity_t* rlcP, uint32_t frame, unsigned int s break; case RLC_UM_TEST_SDU_TYPE_VOIP: - sdu_mem = get_free_mem_block (strlen(voip_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc)); + sdu_mem = get_free_mem_block (strlen(voip_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc), __func__); if (sdu_mem != NULL) { memset (sdu_mem->data, 0, sizeof (struct rlc_um_data_req_alloc)); @@ -74,7 +74,7 @@ rlc_um_test_send_sdu (rlc_um_entity_t* rlcP, uint32_t frame, unsigned int s break; case RLC_UM_TEST_SDU_TYPE_SMALL: - sdu_mem = get_free_mem_block (strlen(very_small_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc)); + sdu_mem = get_free_mem_block (strlen(very_small_sdu)+ 1 + sizeof (struct rlc_um_data_req_alloc), __func__); if (sdu_mem != NULL) { memset (sdu_mem->data, 0, sizeof (struct rlc_um_data_req_alloc)); diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index 3fe5c6cb41619508e4f615898b1b38a475062163..1073d3ded3f16cef6e3642863f172d1bae81005c 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -413,7 +413,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, switch (rlc_mode) { case RLC_MODE_NONE: - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); LOG_E(RLC, PROTOCOL_CTXT_FMT" Received RLC_MODE_NONE as rlc_type for rb_id %u\n", PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); @@ -424,7 +424,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, #ifdef DEBUG_RLC_DATA_REQ msg("RLC_MODE_AM\n"); #endif - new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_am_data_req_alloc)); + new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_am_data_req_alloc), __func__); if (new_sdu_p != NULL) { // PROCESS OF COMPRESSION HERE: @@ -435,7 +435,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, ((struct rlc_am_data_req *) (new_sdu_p->data))->conf = confirmP; ((struct rlc_am_data_req *) (new_sdu_p->data))->mui = muiP; ((struct rlc_am_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_am_data_req_alloc); - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); rlc_am_data_req(ctxt_pP, &rlc_union_p->rlc.am, new_sdu_p); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); return RLC_OP_STATUS_OK; @@ -447,7 +447,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, break; case RLC_MODE_UM: - new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_um_data_req_alloc)); + new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_um_data_req_alloc), __func__); if (new_sdu_p != NULL) { // PROCESS OF COMPRESSION HERE: @@ -456,11 +456,11 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, ((struct rlc_um_data_req *) (new_sdu_p->data))->data_size = sdu_sizeP; ((struct rlc_um_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_um_data_req_alloc); - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); rlc_um_data_req(ctxt_pP, &rlc_union_p->rlc.um, new_sdu_p); - //free_mem_block(new_sdu); + //free_mem_block(new_sdu, __func__); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); return RLC_OP_STATUS_OK; } else { @@ -471,7 +471,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, break; case RLC_MODE_TM: - new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_tm_data_req_alloc)); + new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_tm_data_req_alloc), __func__); if (new_sdu_p != NULL) { // PROCESS OF COMPRESSION HERE: @@ -480,7 +480,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, ((struct rlc_tm_data_req *) (new_sdu_p->data))->data_size = sdu_sizeP; ((struct rlc_tm_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_tm_data_req_alloc); - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); rlc_tm_data_req(ctxt_pP, &rlc_union_p->rlc.tm, new_sdu_p); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); return RLC_OP_STATUS_OK; @@ -493,7 +493,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, break; default: - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); return RLC_OP_STATUS_INTERNAL_ERROR; @@ -505,7 +505,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, if (sdu_pP != NULL) { if (sdu_sizeP > 0) { LOG_I(RLC,"received a packet with size %d for MBMS \n", sdu_sizeP); - new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_um_data_req_alloc)); + new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_um_data_req_alloc), __func__); if (new_sdu_p != NULL) { // PROCESS OF COMPRESSION HERE: @@ -513,10 +513,10 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, memcpy (&new_sdu_p->data[sizeof (struct rlc_um_data_req_alloc)], &sdu_pP->data[0], sdu_sizeP); ((struct rlc_um_data_req *) (new_sdu_p->data))->data_size = sdu_sizeP; ((struct rlc_um_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_um_data_req_alloc); - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); rlc_um_data_req(ctxt_pP, &rlc_union_p->rlc.um, new_sdu_p); - //free_mem_block(new_sdu); + //free_mem_block(new_sdu, __func__); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); return RLC_OP_STATUS_OK; } else { @@ -537,7 +537,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, } else /* MBMS_flag != 0 */ { - free_mem_block(sdu_pP); + free_mem_block(sdu_pP, __func__); LOG_E(RLC, "MBMS_flag != 0 while Rel10 is not defined...\n"); //handle_event(ERROR,"FILE %s FONCTION rlc_data_req() LINE %s : parameter module_id out of bounds :%d\n", __FILE__, __LINE__, module_idP); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index d59b187dc763ea19dca362597393309fb1e03969..d43a90ed6a5d5d982f3a9d26ec094d9597182fd1 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -57,7 +57,7 @@ struct mac_data_ind mac_rlc_deserialize_tb ( list_init(&data_ind.data, NULL); while (num_tbP > 0) { - tb_p = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_sizeP); + tb_p = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_sizeP, __func__); if (tb_p != NULL) { ((struct mac_tb_ind *) (tb_p->data))->first_bit = 0; @@ -110,7 +110,7 @@ tbs_size_t mac_rlc_serialize_tb (char* buffer_pP, list_t transport_blocksP) #endif memcpy(&buffer_pP[tbs_size], &((struct mac_tb_req *) (tb_p->data))->data_ptr[0], tb_size); tbs_size = tbs_size + tb_size; - free_mem_block(tb_p); + free_mem_block(tb_p, __func__); } } diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c index 9ef8bd87005280f712203fb4ac8ce9780ade675a..0b0073d807ff50c8bd36a6ceca675beb4ba44dc9 100644 --- a/openair2/LAYER2/RLC/rlc_rrc.c +++ b/openair2/LAYER2/RLC/rlc_rrc.c @@ -786,7 +786,7 @@ rlc_op_status_t rrc_rlc_data_req ( //----------------------------------------------------------------------------- mem_block_t* sdu; - sdu = get_free_mem_block(sdu_sizeP); + sdu = get_free_mem_block(sdu_sizeP, __func__); if (sdu != NULL) { memcpy (sdu->data, sduP, sdu_sizeP); diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 38d7121860b5c06c7bb8357623c1e8d769b4ea4e..1b22ae5d0bd5e6db7fc4ee8245fead9ea9c69bde 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -98,7 +98,7 @@ extern UE_MAC_INST *UE_mac_inst; extern void *bigphys_malloc(int); #endif -#define XER_PRINT +//#define XER_PRINT extern int8_t dB_fixed2(uint32_t x,uint32_t y); diff --git a/openair2/UTIL/LISTS/list.c b/openair2/UTIL/LISTS/list.c index 33b880d297d036bb65073c57b61b23a439c05732..7040aeeef7fa6221f21ecf85e2976b09bf0628fa 100644 --- a/openair2/UTIL/LISTS/list.c +++ b/openair2/UTIL/LISTS/list.c @@ -59,7 +59,7 @@ list_free (list_t * listP) mem_block_t *le; while ((le = list_remove_head (listP))) { - free_mem_block (le); + free_mem_block (le, __func__); } } //----------------------------------------------------------------------------- diff --git a/openair2/UTIL/LISTS/list2.c b/openair2/UTIL/LISTS/list2.c index 4a8de24b513a402a72586b6b86cd9cd15734a529..abd9d2aacce6b139df6ef993ec70cf4a82ff3137 100644 --- a/openair2/UTIL/LISTS/list2.c +++ b/openair2/UTIL/LISTS/list2.c @@ -75,7 +75,7 @@ list2_free (list2_t * listP) mem_block_t *le; while ((le = list2_remove_head (listP))) { - free_mem_block (le); + free_mem_block (le, __func__); } } diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 34fc8e97b8a8ede096c68451f891725ff7c91cd3..3f9128a6645ea98e78b8f750fea5253a3f13a867 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -174,8 +174,12 @@ const char* eurecomVariablesNames[] = { "ue0_SFN5", "ue0_SFN6", "ue0_SFN7", + "ue_pdcp_flush_size", + "ue_pdcp_flush_err", "ue0_trx_read_ns", "ue0_trx_write_ns", + "ue0_trx_read_ns_missing", + "ue0_trx_write_ns_missing" }; const char* eurecomFunctionsNames[] = { @@ -192,7 +196,8 @@ const char* eurecomFunctionsNames[] = { "ue_thread_rxtx1", "trx_read_sf9", "trx_write_sf9", - "ue_signal_cond_rxtx", + "ue_signal_cond_rxtx0", + "ue_signal_cond_rxtx1", "ue_wait_cond_rxtx0", "ue_wait_cond_rxtx1", "ue_lock_mutex_rxtx_for_cond_wait0", @@ -338,6 +343,10 @@ const char* eurecomFunctionsNames[] = { "pdcp_data_ind", "pdcp_apply_security", "pdcp_validate_security", + "pdcp_fifo_read", + "pdcp_fifo_read_buffer", + "pdcp_fifo_flush", + "pdcp_fifo_flush_buffer", /* RRC signals */ "rrc_rx_tx", "rrc_mac_config_req", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 0d1c507b749b5b5583c5f40e3957571f843327e8..29358cb51bd3b767a188475010c4b118e4dab1a6 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -146,8 +146,12 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7, + VCD_SIGNAL_DUMPER_VARIABLES_UE_PDCP_FLUSH_SIZE, + VCD_SIGNAL_DUMPER_VARIABLES_UE_PDCP_FLUSH_ERR, VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, + VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, + VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS_MISSING, VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, } vcd_signal_dump_variables; @@ -166,7 +170,8 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX1, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, - VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX0, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX1, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX1, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0, @@ -311,6 +316,10 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND, VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_APPLY_SECURITY, VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_VALIDATE_SECURITY, + VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ, + VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_READ_BUFFER, + VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH, + VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_FIFO_FLUSH_BUFFER, /* RRC signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX, diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c index 8a5f5fd22314d286a14cc17dbb2ff8178348c789..150f19b71c631c8911133c6723e773014e30e4a8 100644 --- a/openair2/UTIL/MEM/mem_block.c +++ b/openair2/UTIL/MEM/mem_block.c @@ -55,7 +55,7 @@ static pthread_mutex_t mtex = PTHREAD_MUTEX_INITIALIZER; //#define DEBUG_MEM_MNGT_ALLOC //----------------------------------------------------------------------------- #if defined(USER_MODE) && defined(DEBUG_MEM_MNGT_ALLOC) -uint32_t counters[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +uint32_t counters[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; #endif //----------------------------------------------------------------------------- /* @@ -173,7 +173,7 @@ pool_buffer_clean (void *arg) } //----------------------------------------------------------------------------- void -free_mem_block (mem_block_t * leP) +free_mem_block (mem_block_t * leP, const char* caller) { //----------------------------------------------------------------------------- @@ -197,6 +197,11 @@ free_mem_block (mem_block_t * leP) list_add_tail_eurecom (leP, &mem_block_var.mem_lists[leP->pool_id]); #ifdef DEBUG_MEM_MNGT_ALLOC counters[leP->pool_id] -= 1; + msg ("[%s][MEM_MNGT][INFO] after pool[%2d] freed: counters = {%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d}\n", + caller, leP->pool_id, + counters[0],counters[1],counters[2],counters[3],counters[4], + counters[5],counters[6],counters[7],counters[8],counters[9], + counters[10],counters[11]); #endif leP = NULL; // this prevent from freeing the block twice } else { @@ -210,7 +215,7 @@ free_mem_block (mem_block_t * leP) //----------------------------------------------------------------------------- mem_block_t * -get_free_mem_block (uint32_t sizeP) +get_free_mem_block (uint32_t sizeP, const char* caller) { //----------------------------------------------------------------------------- mem_block_t *le = NULL; @@ -242,11 +247,19 @@ get_free_mem_block (uint32_t sizeP) if ((le = list_remove_head (&mem_block_var.mem_lists[pool_selected]))) { #ifdef DEBUG_MEM_MNGT_ALLOC counters[pool_selected] += 1; + msg ("[%s][MEM_MNGT][INFO] after pool[%2d] allocated: counters = {%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d}\n", + caller, + pool_selected, + counters[0],counters[1],counters[2],counters[3],counters[4], + counters[5],counters[6],counters[7],counters[8],counters[9], + counters[10],counters[11]); #endif #ifdef DEBUG_MEM_MNGT_ALLOC_SIZE msg ("[MEM_MNGT][INFO] ALLOC MEM_BLOCK SIZE %d bytes pool %d (%p)\n", sizeP, pool_selected,le); #endif + AssertFatal(le->pool_id == pool_selected, "Unexpected pool ID!"); + #ifdef MEMBLOCK_BIG_LOCK if (pthread_mutex_unlock(&mtex)) abort(); #endif @@ -263,6 +276,7 @@ get_free_mem_block (uint32_t sizeP) #endif } while (pool_selected++ < 12); + LOG_E(PHY, "[MEM_MNGT][ERROR][FATAL] failed allocating MEM_BLOCK size %d byes (pool_selected=%d size=%d)\n", sizeP, pool_selected, size); display_mem_load(); mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed"); @@ -287,6 +301,13 @@ get_free_copy_mem_block (void) if ((le = list_remove_head (&mem_block_var.mem_lists[MEM_MNGT_POOL_ID_COPY]))) { #ifdef DEBUG_MEM_MNGT_ALLOC_SIZE msg ("[MEM_MNGT][INFO] ALLOC COPY MEM BLOCK (%p)\n",le); +#endif +#ifdef DEBUG_MEM_MNGT_ALLOC + counters[MEM_MNGT_POOL_ID_COPY] += 1; + msg ("[MEM_MNGT][INFO] pool counters = {%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d %2d}\n", + counters[0],counters[1],counters[2],counters[3],counters[4], + counters[5],counters[6],counters[7],counters[8],counters[9], + counters[10],counters[11]); #endif return le; } else { diff --git a/openair2/UTIL/MEM/mem_block.h b/openair2/UTIL/MEM/mem_block.h index 8164dcf51cae3a007d19b60f684b889d07bcf7d3..c3a2f5dff21735e286c2cbb9f85bfcb174ab7b67 100644 --- a/openair2/UTIL/MEM/mem_block.h +++ b/openair2/UTIL/MEM/mem_block.h @@ -55,8 +55,8 @@ typedef struct mem_block_t { public_mem_block(void *pool_buffer_init (void);) public_mem_block(void *pool_buffer_clean (void *arg);) -public_mem_block(void free_mem_block (mem_block_t * leP);) -public_mem_block(mem_block_t* get_free_mem_block (uint32_t sizeP);) +public_mem_block(void free_mem_block (mem_block_t * leP, const char* caller);) +public_mem_block(mem_block_t* get_free_mem_block (uint32_t sizeP, const char* caller);) public_mem_block(mem_block_t *get_free_copy_mem_block (void);) public_mem_block(mem_block_t *get_free_copy_mem_block_up (void);) public_mem_block(mem_block_t *copy_mem_block (mem_block_t * leP, mem_block_t * destP);) diff --git a/openair2/UTIL/MEM/mem_mngt.c b/openair2/UTIL/MEM/mem_mngt.c index 64503d8cb7b7a4f7d4991a803be406ab23bdd84c..9f4f57cdd2c77332e5fc9f24b98e6a0d5f37b586 100644 --- a/openair2/UTIL/MEM/mem_mngt.c +++ b/openair2/UTIL/MEM/mem_mngt.c @@ -161,7 +161,7 @@ pool_buffer_clean (void *arg) } //----------------------------------------------------------------------------- void -free_mem_block (mem_block_t * leP) +free_mem_block (mem_block_t * leP, __func__) { //----------------------------------------------------------------------------- @@ -171,10 +171,10 @@ free_mem_block (mem_block_t * leP) } #ifdef DEBUG_MEM_MNGT_FREE - msg ("[MEM_MNGT][FREE] free_mem_block() %p pool: %d\n", leP, leP->pool_id); + msg ("[MEM_MNGT][FREE] free_mem_block() %p pool: %d\n", leP, leP->pool_id, __func__); #endif #ifdef DEBUG_MEM_MNGT_ALLOC - check_free_mem_block (leP); + check_free_mem_block (leP, __func__); #endif if (leP->pool_id <= MEM_MNGT_POOL_ID_COPY) { @@ -184,14 +184,14 @@ free_mem_block (mem_block_t * leP) #endif leP = NULL; // this prevent from freeing the block twice } else { - msg ("[MEM_MNGT][FREE] ERROR free_mem_block() unknown pool_id : %d\n", leP->pool_id); + msg ("[MEM_MNGT][FREE] ERROR free_mem_block() unknown pool_id : %d\n", leP->pool_id, __func__); } } //----------------------------------------------------------------------------- mem_block_t * -get_free_mem_block (uint16_t sizeP) +get_free_mem_block (uint16_t sizeP, __func__) { //----------------------------------------------------------------------------- mem_block_t *le = NULL; @@ -414,7 +414,7 @@ check_mem_area (void *arg) //----------------------------------------------------------------------------- void -check_free_mem_block (mem_block_t * leP) +check_free_mem_block (mem_block_t * leP, __func__) { //----------------------------------------------------------------------------- int block_index; diff --git a/openair2/UTIL/TIMER/umts_timer.c b/openair2/UTIL/TIMER/umts_timer.c index ff21ce8e840a1d3e5f5bf5057f08ab819d18d6d1..9978419fb8f99761c59da05277eb659634ea3ab3 100644 --- a/openair2/UTIL/TIMER/umts_timer.c +++ b/openair2/UTIL/TIMER/umts_timer.c @@ -54,7 +54,7 @@ umts_timer_check_time_out (list2_t * atimer_listP, uint32_t current_frame_tick_m mem_unit = list2_remove_head (atimer_listP); (*(timer->proc)) (timer->protocol, timer->timer_id); - free_mem_block (mem_unit); + free_mem_block (mem_unit, __func__); mem_unit = atimer_listP->head; } else { @@ -74,7 +74,7 @@ umts_timer_delete_timer (list2_t * atimer_listP, void *timer_idP) while ((mem_unit)) { if (((struct timer_unit *) (mem_unit->data))->timer_id == timer_idP) { list2_remove_element (mem_unit, atimer_listP); - free_mem_block (mem_unit); + free_mem_block (mem_unit, __func__); return; } @@ -93,7 +93,7 @@ umts_add_timer_list_up (list2_t * atimer_listP, void (*procP) (void *, void *), int32_t remaining_time; uint8_t inserted = 0; - mb = get_free_mem_block (sizeof (struct timer_unit)); + mb = get_free_mem_block (sizeof (struct timer_unit), __func__); ((struct timer_unit *) (mb->data))->proc = procP; ((struct timer_unit *) (mb->data))->protocol = protocolP; ((struct timer_unit *) (mb->data))->timer_id = timer_idP; @@ -166,7 +166,7 @@ umts_stop_all_timers_except (list2_t * atimer_listP, void (*procP) (void *, void mem_unit_to_delete = mem_unit; mem_unit = mem_unit->next; list2_remove_element (mem_unit_to_delete, atimer_listP); - free_mem_block (mem_unit_to_delete); + free_mem_block (mem_unit_to_delete, __func__); } else { mem_unit = mem_unit->next; } diff --git a/openair3/NAS/COMMON/API/NETWORK/nas_message.c b/openair3/NAS/COMMON/API/NETWORK/nas_message.c index b571c17d3872a5a07fc97c3b055402096d108dcd..8f326904ef26b5aa31d8a6adb13571c3e74e0e56 100644 --- a/openair3/NAS/COMMON/API/NETWORK/nas_message.c +++ b/openair3/NAS/COMMON/API/NETWORK/nas_message.c @@ -53,6 +53,8 @@ Description Defines the layer 3 messages supported by the NAS sublayer #include "secu_defs.h" #include "emmData.h" +//#define DEBUG_NAS_MESSAGE + /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ @@ -1312,6 +1314,7 @@ static uint32_t _nas_message_get_mac( (direction == SECU_DIRECTION_UPLINK) ? emm_security_context->ul_count.seq_num:emm_security_context->dl_count.seq_num, count); +#ifdef DEBUG_NAS_MESSAGE fprintf(stderr, "\n[NAS]\t"); for (i=0; i < length; i++) { @@ -1331,6 +1334,7 @@ static uint32_t _nas_message_get_mac( fprintf(stderr, "\n"); fflush(stderr); +#endif stream_cipher.key = emm_security_context->knas_int.value; stream_cipher.key_length = AUTH_KNAS_INT_SIZE; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index e71c18a2c159ab3f84e132fc910de92973378e6f..6583ac2e22026c6555612fc8e997df4f3bbc6316 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -734,7 +734,7 @@ static void *UE_thread_rxn_txnp4(void *arg) printf("Starting UE RXN_TXNP4 thread (%s)\n", threadname); while (!oai_exit) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->subframe_rx&1), 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->proc_id), 1 ); if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RXTX\n" ); exit_fun("nothing to add"); @@ -742,24 +742,24 @@ static void *UE_thread_rxn_txnp4(void *arg) } while (proc->instance_cnt_rxtx < 0) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->subframe_rx&1), 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->proc_id), 1 ); // most of the time, the thread is waiting here pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx ); } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->proc_id), 0 ); if (pthread_mutex_unlock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" ); exit_fun("nothing to add"); return &UE_thread_rxtx_retval; } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->proc_id), 0 ); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->subframe_rx&1), 1 ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE+(proc->subframe_rx&1), proc->subframe_rx ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_UE+(proc->subframe_tx&1), proc->subframe_tx ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_UE+(proc->subframe_rx&1), proc->frame_rx ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE+(proc->subframe_tx&1), proc->frame_tx ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->proc_id), 1 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE+(proc->proc_id), proc->subframe_rx ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_UE+(proc->proc_id), proc->subframe_tx ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_UE+(proc->proc_id), proc->frame_rx ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE+(proc->proc_id), proc->frame_tx ); lte_subframe_t sf_type = subframe_select( &UE->frame_parms, proc->subframe_rx); if ((sf_type == SF_DL) || @@ -827,10 +827,10 @@ static void *UE_thread_rxn_txnp4(void *arg) } } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->proc_id), 0 ); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->subframe_rx&1), 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->proc_id), 1 ); if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RXTX\n" ); exit_fun("noting to add"); @@ -845,7 +845,7 @@ static void *UE_thread_rxn_txnp4(void *arg) exit_fun("noting to add"); return &UE_thread_rxtx_retval; } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->proc_id), 0 ); } // thread finished @@ -875,7 +875,7 @@ void *UE_thread(void *arg) { static int UE_thread_retval; PHY_VARS_UE *UE = PHY_vars_UE_g[0][0]; // int tx_enabled = 0; - unsigned int rxs,txs; + uint32_t rxs=0,txs=0; int dummy_rx[UE->frame_parms.nb_antennas_rx][UE->frame_parms.samples_per_tti] __attribute__((aligned(32))); openair0_timestamp timestamp,timestamp1; void* rxp[2], *txp[2]; @@ -971,7 +971,7 @@ void *UE_thread(void *arg) { if (rxs!=UE->frame_parms.samples_per_tti*10) { - LOG_E(PHY, "problem in rx 1! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti*10, rxs); + LOG_E(PHY, "problem in rx 1! expect #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti*10, rxs); exit_fun("problem in rx 1"); return &UE_thread_retval; } @@ -1005,7 +1005,7 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); if (rxs!=UE->frame_parms.samples_per_tti){ - LOG_E(PHY, "problem in rx 2! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); + LOG_E(PHY, "problem in rx 2! expect #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); exit_fun("problem in rx 2"); return &UE_thread_retval; } @@ -1028,7 +1028,7 @@ void *UE_thread(void *arg) { UE->rx_offset, UE->frame_parms.nb_antennas_rx); if (rxs != UE->rx_offset) { - LOG_E(PHY, "problem in rx 3! want #samples=%d but got only %d!\n", UE->rx_offset, rxs); + LOG_E(PHY, "problem in rx 3! expect #samples=%d but got only %d!\n", UE->rx_offset, rxs); exit_fun("problem in rx 3!"); return &UE_thread_retval; } @@ -1044,7 +1044,7 @@ void *UE_thread(void *arg) { UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, UE->frame_parms.nb_antennas_rx); if (rxs != (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0)) { - LOG_E(PHY, "problem in rx 4! want #samples=%d but got only %d!\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, rxs); + LOG_E(PHY, "problem in rx 4! expect #samples=%d but got only %d!\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, rxs); exit_fun("problem in rx 4!"); return &UE_thread_retval; } @@ -1081,8 +1081,9 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, UE->frame_parms.samples_per_tti - rxs); if (rxs != UE->frame_parms.samples_per_tti) { - LOG_E(PHY, "problem in rx 5! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); + LOG_E(PHY, "problem in rx 5! expect #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); exit_fun("problem in rx 5!"); return &UE_thread_retval; } @@ -1102,11 +1103,13 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_tx, 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, rxs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, txs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS_MISSING, UE->frame_parms.samples_per_tti - txs); if (txs != UE->frame_parms.samples_per_tti) { LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, UE->frame_parms.samples_per_tti); exit_fun( "problem transmitting samples" ); } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS_MISSING, UE->frame_parms.samples_per_tti - txs); } else { @@ -1118,8 +1121,9 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, (UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0) - rxs); if (rxs != (UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0)) { - LOG_E(PHY, "problem in rx 6! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0, rxs); + LOG_E(PHY, "problem in rx 6! expect #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0, rxs); exit_fun("problem in rx 6!"); return &UE_thread_retval; } @@ -1139,7 +1143,8 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_tx, 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, 0 ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, rxs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, txs ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS_MISSING, (UE->frame_parms.samples_per_tti - rx_off_diff) - txs); if (txs != UE->frame_parms.samples_per_tti - rx_off_diff) { LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, UE->frame_parms.samples_per_tti-rx_off_diff); exit_fun( "problem transmitting samples" ); @@ -1155,7 +1160,7 @@ void *UE_thread(void *arg) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); if (rxs != (UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 - rx_off_diff)) { - LOG_E(PHY, "problem in rx 7! want #samples=%d but got only %d! rx_off_diff=%d\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, rxs, rx_off_diff); + LOG_E(PHY, "problem in rx 7! expect #samples=%d but got only %d! rx_off_diff=%d\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, rxs, rx_off_diff); exit_fun("problem in rx 7!"); return &UE_thread_retval; } @@ -1163,9 +1168,10 @@ void *UE_thread(void *arg) { } } // operate on thread sf mod 2 - UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[sf&1]; + uint8_t proc_select = sf&1; + UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[proc_select]; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+(proc->subframe_rx&1), 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+proc_select, 1 ); // lock mutex if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX\n" ); @@ -1174,6 +1180,7 @@ void *UE_thread(void *arg) { } // increment instance count and change proc subframe/frame variables int instance_cnt_rxtx = ++proc->instance_cnt_rxtx; + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, proc->instance_cnt_rxtx); if(sf == 0) { UE->proc.proc_rxtx[0].frame_rx++; @@ -1198,19 +1205,19 @@ void *UE_thread(void *arg) { exit_fun("nothing to add"); return &UE_thread_retval; } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+proc_select, 0 ); if (instance_cnt_rxtx == 0) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX0+proc_select, 1 ); if (pthread_cond_signal(&proc->cond_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] ERROR pthread_cond_signal for UE RX thread\n" ); exit_fun("nothing to add"); return &UE_thread_retval; } - LOG_D(PHY, "firing up rxtx_thread[%d] at subframe %d\n", sf&1, sf); + LOG_D(PHY, "firing up rxtx_thread[%d] at subframe %d\n", proc_select, sf); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX0+proc_select, 0 ); } else { LOG_E( PHY, "[SCHED][UE] UE RX thread busy (IC %d)!!\n", instance_cnt_rxtx); @@ -1658,6 +1665,8 @@ void init_UE_threads(int inst) // the threads are not yet active, therefore access is allowed without locking UE->proc.proc_rxtx[0].instance_cnt_rxtx = -1; UE->proc.proc_rxtx[1].instance_cnt_rxtx = -1; + UE->proc.proc_rxtx[0].proc_id = 0; + UE->proc.proc_rxtx[1].proc_id = 1; UE->proc.instance_cnt_synch = -1; pthread_mutex_init(&UE->proc.proc_rxtx[0].mutex_rxtx,NULL); pthread_mutex_init(&UE->proc.proc_rxtx[1].mutex_rxtx,NULL); @@ -1666,9 +1675,9 @@ void init_UE_threads(int inst) pthread_cond_init(&UE->proc.proc_rxtx[1].cond_rxtx,NULL); pthread_cond_init(&UE->proc.cond_synch,NULL); pthread_create(&UE->proc.proc_rxtx[0].pthread_rxtx,NULL,UE_thread_rxn_txnp4,(void*)&UE->proc.proc_rxtx[0]); - pthread_setname_np( UE->proc.proc_rxtx[0].pthread_rxtx, "UE_thread_rxn_txnp4_even" ); + pthread_setname_np( UE->proc.proc_rxtx[0].pthread_rxtx, "rxn_txnp4_even" ); pthread_create(&UE->proc.proc_rxtx[1].pthread_rxtx,NULL,UE_thread_rxn_txnp4,(void*)&UE->proc.proc_rxtx[1]); - pthread_setname_np( UE->proc.proc_rxtx[1].pthread_rxtx, "UE_thread_rxn_txnp4_odd" ); + pthread_setname_np( UE->proc.proc_rxtx[1].pthread_rxtx, "rxn_txnp4_odd" ); pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE); pthread_setname_np( UE->proc.pthread_synch, "UE_thread_synch" ); } diff --git a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c index dc395281dce2d69febc4e5f7e86f6fbcb538a2d0..d64315fc250d70716b530de22a778e4b4d93c142 100644 --- a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c +++ b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c @@ -132,7 +132,7 @@ void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_dat *tx_packetsP = *tx_packetsP + 1; if (*drop_countP == 0) { - tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size); + tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size, __func__); if (tb_dst != NULL) { ((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0; @@ -156,7 +156,7 @@ void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_dat *dropped_tx_packetsP = *dropped_tx_packetsP + 1; } - free_mem_block(tb_src); + free_mem_block(tb_src, __func__); if (data_indP->no_tb > 0) { printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb);