From 507c1ea9abd5a4ed07f13117f2490afc6fa71e5b Mon Sep 17 00:00:00 2001 From: matzakos <panagiotis.matzakos@eurecom.fr> Date: Wed, 24 Jan 2018 20:07:09 +0100 Subject: [PATCH] Added correct handling of HI_DCI0.req + memory management issues --- openair2/PHY_INTERFACE/phy_stub_UE.c | 46 +++++++++++++++++++++++++--- targets/RT/USER/lte-ue.c | 35 +++++++++------------ 2 files changed, 57 insertions(+), 24 deletions(-) diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 03384bc464..8ce0ed2a04 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -1027,14 +1027,23 @@ int dl_config_req_UE_MAC(nfapi_dl_config_request_t* req) free(tx_request_pdu_list); tx_request_pdu_list = NULL; } + if(req->dl_config_request_body.dl_config_pdu_list!=NULL){ + free(req->dl_config_request_body.dl_config_pdu_list); + req->dl_config_request_body.dl_config_pdu_list = NULL; + } free(req); req = NULL; return 0; } else if(req!=NULL){ //LOG_I(MAC, "Panos-D: dl_config_req_UE_MAC probably dummy DL_Config \n"); - //free(req); - //req = NULL; + if(req->dl_config_request_body.dl_config_pdu_list!=NULL){ + //LOG_I(MAC, "Panos-D: dl_config_req_UE_MAC probably dummy DL_Config 2\n"); + free(req->dl_config_request_body.dl_config_pdu_list); + req->dl_config_request_body.dl_config_pdu_list = NULL; + } + free(req); + req = NULL; return -1; } @@ -1053,6 +1062,7 @@ int deallocate_mem_nfapi_dl(nfapi_dl_config_request_t* req, nfapi_tx_request_pdu int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req) { + if (req!=NULL && req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ LOG_D(PHY,"[UE-PHY_STUB] hi dci0 request sfn_sf:%d number_of_dci:%d number_of_hi:%d\n", NFAPI_SFNSF2DEC(req->sfn_sf), req->hi_dci0_request_body.number_of_dci, req->hi_dci0_request_body.number_of_hi); //phy_info* phy = (phy_info*)(pnf_p7->user_data); @@ -1073,12 +1083,13 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req) } else if (req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type == NFAPI_HI_DCI0_HI_PDU_TYPE) { - LOG_D(PHY,"[UE-PHY_STUB] HI_DCI0_REQ sfn_sf:%d PDU[%d] - NFAPI_HI_DCI0_HI_PDU_TYPE\n", NFAPI_SFNSF2DEC(req->sfn_sf), i); + LOG_I(MAC,"[UE-PHY_STUB] HI_DCI0_REQ sfn_sf:%d PDU[%d] - NFAPI_HI_DCI0_HI_PDU_TYPE\n", NFAPI_SFNSF2DEC(req->sfn_sf), i); nfapi_hi_dci0_request_pdu_t *hi_dci0_req_pdu = &req->hi_dci0_request_body.hi_dci0_pdu_list[i]; // This is meaningful only after ACKnowledging the first ULSCH Txon (i.e. Msg3) if(hi_dci0_req_pdu->hi_pdu.hi_pdu_rel8.hi_value == 1 && UE_mac_inst[Mod_id].first_ULSCH_Tx == 1){ + LOG_I(MAC,"[UE-PHY_STUB] HI_DCI0_REQ 2 sfn_sf:%d PDU[%d] - NFAPI_HI_DCI0_HI_PDU_TYPE\n", NFAPI_SFNSF2DEC(req->sfn_sf), i); UE_mac_inst[Mod_id].UE_mode[0] = PUSCH; UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; } @@ -1090,6 +1101,19 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req) } } + /*if(req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ + free(req->hi_dci0_request_body.hi_dci0_pdu_list); + req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; + } + free(req); + req = NULL;*/ + + } + /*else if(req!=NULL){ + free(req); + req = NULL; + }*/ + return 0; } @@ -1101,6 +1125,7 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req) // pnf_p7_subframe_ind. int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req) { + //LOG_I(MAC, "Panos-D: memcpy_dl_config_req 1"); module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. UE_mac_inst[Mod_id].dl_config_req = (nfapi_dl_config_request_t*)malloc(sizeof(nfapi_dl_config_request_t)); @@ -1163,6 +1188,7 @@ int memcpy_ul_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request } + //UE_mac_inst[Mod_id].ul_config_req = req; return 0; } @@ -1212,6 +1238,8 @@ int memcpy_tx_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_tx_request_t* req) int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req) { + + //if(req!=0){ module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. UE_mac_inst[Mod_id].hi_dci0_req = (nfapi_hi_dci0_request_t*)malloc(sizeof(nfapi_hi_dci0_request_t)); @@ -1222,11 +1250,21 @@ int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.number_of_hi = req->hi_dci0_request_body.number_of_hi; UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.sfnsf = req->hi_dci0_request_body.sfnsf; UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.tl = req->hi_dci0_request_body.tl; - int total_pdus = UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.number_of_dci + UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.number_of_dci; + int total_pdus = UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.number_of_dci + UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.number_of_hi; + + LOG_I(MAC, "Original hi_dci0 req. #:%d, Copy #: %d \n",req->hi_dci0_request_body.number_of_dci + req->hi_dci0_request_body.number_of_hi, total_pdus); //(nfapi_ul_config_request_pdu_t*) malloc(req->ul_config_request_body.number_of_pdus*sizeof(nfapi_ul_config_request_pdu_t)); UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = (nfapi_hi_dci0_request_pdu_t*) malloc(total_pdus*sizeof(nfapi_hi_dci0_request_pdu_t)); + for(int i=0; i<total_pdus; i++){ + UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list[i] = req->hi_dci0_request_body.hi_dci0_pdu_list[i]; + LOG_I(MAC, "Original hi_dci0 req. type:%d, Copy type: %d \n",req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type, UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type); + } + //} + //else + // LOG_I(MAC, "Panos-D: Dummy HI_DCI0"); + LOG_I(MAC, "Panos-D: memcpy_hi_dci0_req 2 \n"); //module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. //UE_mac_inst[Mod_id].hi_dci0_req = req; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index b8f2a722cf..b1440e4451 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -936,10 +936,22 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { //LOG_I( MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 after oai_subframe_ind 3 \n"); dl_config_req_UE_MAC(UE_mac_inst[Mod_id].dl_config_req); } - if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){ - LOG_I( MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 after oai_subframe_ind 4 \n"); - hi_dci0_req_UE_MAC(UE_mac_inst[Mod_id].hi_dci0_req); + //if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){ + if (UE_mac_inst[Mod_id].hi_dci0_req!=NULL && UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ + LOG_I( MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 after oai_subframe_ind 4 \n"); + hi_dci0_req_UE_MAC(UE_mac_inst[Mod_id].hi_dci0_req); + //if(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ + free(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); + UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; + //} + free(UE_mac_inst[Mod_id].hi_dci0_req); + UE_mac_inst[Mod_id].hi_dci0_req = NULL; } + + else if(UE_mac_inst[Mod_id].hi_dci0_req!=NULL){ + free(UE_mac_inst[Mod_id].hi_dci0_req); + UE_mac_inst[Mod_id].hi_dci0_req = NULL; + } //stop_meas(&UE->timer_stats); //t_diff = get_time_meas_us(&UE->timer_stats); //LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); @@ -1030,23 +1042,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { UE_mac_inst[Mod_id].ul_config_req = NULL; } } - /*else{ - AssertFatal(UE_mac_inst[Mod_id].ul_config_req!= NULL, "Panos-D: Copy of ul_config_req is NULL"); - }*/ -//>>>>>>> Stashed changes - - - /*if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || - (UE->frame_parms.frame_type == FDD) ) - if (UE->mode != loop_through_memory){ - // Panos: Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger - // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). - // Generate UL_indications which corresponf to UL traffic. - if(UE_mac_inst[Mod_id].ul_config_req!= NULL){ - ul_config_req_UE_MAC(UE_mac_inst[Mod_id].ul_config_req); - UL_indication(UL_INFO); - } - }*/ phy_procedures_UE_SL_RX(UE,proc); -- GitLab