Commit 91d42fd5 authored by Melissa Elkadi's avatar Melissa Elkadi

Fixing memory leaks and hoping to fix num_dci_option bug

parent 22f4b083
...@@ -380,9 +380,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ...@@ -380,9 +380,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
} }
if (slot_ind) { if (slot_ind) {
sfn_slot = *slot_ind; sfn_slot = *slot_ind;
free_and_zero(slot_ind);
} }
else if (ch_info) { else if (ch_info) {
sfn_slot = ch_info->sfn_slot; sfn_slot = ch_info->sfn_slot;
free_and_zero(ch_info);
} }
frame_t frame = NFAPI_SFNSLOT2SFN(sfn_slot); frame_t frame = NFAPI_SFNSLOT2SFN(sfn_slot);
...@@ -465,10 +467,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ...@@ -465,10 +467,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
pdcp_run(&ctxt); pdcp_run(&ctxt);
} }
process_queued_nr_nfapi_msgs(mac, sfn_slot); process_queued_nr_nfapi_msgs(mac, sfn_slot);
free(slot_ind);
slot_ind = NULL;
free(ch_info);
ch_info = NULL;
} }
return NULL; return NULL;
} }
......
...@@ -2255,26 +2255,29 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in ...@@ -2255,26 +2255,29 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
int O_CSI = 0; int O_CSI = 0;
int N_UCI = 0; int N_UCI = 0;
PUCCH_sched_t *pucch = calloc(1,sizeof(*pucch)); PUCCH_sched_t pucch = {
pucch->resource_indicator = -1; .resource_indicator = -1,
pucch->initial_pucch_id = -1; .initial_pucch_id = -1
};
pucch.resource_indicator = -1;
pucch.initial_pucch_id = -1;
uint16_t rnti = mac->crnti; //FIXME not sure this is valid for all pucch instances uint16_t rnti = mac->crnti; //FIXME not sure this is valid for all pucch instances
// SR // SR
if(trigger_periodic_scheduling_request(mac, pucch, frameP, slotP)) { if (trigger_periodic_scheduling_request(mac, &pucch, frameP, slotP)) {
O_SR = 1; O_SR = 1;
/* sr_payload = 1 means that this is a positive SR, sr_payload = 0 means that it is a negative SR */ /* sr_payload = 1 means that this is a positive SR, sr_payload = 0 means that it is a negative SR */
pucch->sr_payload = nr_ue_get_SR(module_idP, pucch.sr_payload = nr_ue_get_SR(module_idP,
frameP, frameP,
slotP); slotP);
} }
// CSI // CSI
if (mac->ra.ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test == 1) if (mac->ra.ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test == 1)
O_CSI = nr_get_csi_measurements(mac, frameP, slotP, pucch); O_CSI = nr_get_csi_measurements(mac, frameP, slotP, &pucch);
// ACKNACK // ACKNACK
O_ACK = get_downlink_ack(mac, frameP, slotP, pucch); O_ACK = get_downlink_ack(mac, frameP, slotP, &pucch);
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id; NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
NR_PUCCH_Config_t *pucch_Config = NULL; NR_PUCCH_Config_t *pucch_Config = NULL;
...@@ -2304,8 +2307,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in ...@@ -2304,8 +2307,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
pucch_Config->format2 && pucch_Config->format2 &&
(pucch_Config->format2->choice.setup->simultaneousHARQ_ACK_CSI == NULL)) { (pucch_Config->format2->choice.setup->simultaneousHARQ_ACK_CSI == NULL)) {
O_CSI = 0; O_CSI = 0;
pucch->csi_part1_payload = 0; pucch.csi_part1_payload = 0;
pucch->csi_part2_payload = 0; pucch.csi_part2_payload = 0;
} }
N_UCI = O_SR + O_ACK + O_CSI; N_UCI = O_SR + O_ACK + O_CSI;
...@@ -2314,13 +2317,13 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in ...@@ -2314,13 +2317,13 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
mac->nr_ue_emul_l1.num_csi_reports = O_CSI; mac->nr_ue_emul_l1.num_csi_reports = O_CSI;
// do no transmit pucch if only SR scheduled and it is negative // do no transmit pucch if only SR scheduled and it is negative
if ((O_ACK + O_CSI) == 0 && pucch->sr_payload == 0) if ((O_ACK + O_CSI) == 0 && pucch.sr_payload == 0)
return; return;
if (N_UCI > 0) { if (N_UCI > 0) {
LOG_D(NR_MAC,"%d.%d configure pucch, O_SR %d, O_ACK %d, O_CSI %d\n",frameP,slotP,O_SR,O_ACK,O_CSI); LOG_D(NR_MAC,"%d.%d configure pucch, O_SR %d, O_ACK %d, O_CSI %d\n",frameP,slotP,O_SR,O_ACK,O_CSI);
pucch->resource_set_id = find_pucch_resource_set(mac, O_ACK + O_CSI); pucch.resource_set_id = find_pucch_resource_set(mac, O_ACK + O_CSI);
select_pucch_resource(mac, pucch); select_pucch_resource(mac, &pucch);
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP); fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP);
pthread_mutex_lock(&ul_config->mutex_ul_config); pthread_mutex_lock(&ul_config->mutex_ul_config);
AssertFatal(ul_config->number_pdus<FAPI_NR_UL_CONFIG_LIST_NUM, "ul_config->number_pdus %d out of bounds\n",ul_config->number_pdus); AssertFatal(ul_config->number_pdus<FAPI_NR_UL_CONFIG_LIST_NUM, "ul_config->number_pdus %d out of bounds\n",ul_config->number_pdus);
...@@ -2333,10 +2336,10 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in ...@@ -2333,10 +2336,10 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
nr_ue_configure_pucch(mac, nr_ue_configure_pucch(mac,
slotP, slotP,
rnti, rnti,
pucch, &pucch,
pucch_pdu, pucch_pdu,
O_SR, O_ACK, O_CSI); O_SR, O_ACK, O_CSI);
LOG_D(NR_MAC,"Configuring pucch, is_common = %d\n",pucch->is_common); LOG_D(NR_MAC, "Configuring pucch, is_common = %d\n", pucch.is_common);
nr_scheduled_response_t scheduled_response; nr_scheduled_response_t scheduled_response;
fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id);
if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
......
...@@ -640,12 +640,9 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n ...@@ -640,12 +640,9 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req))
{ {
LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n");
free(ul_tti_req);
ul_tti_req = NULL;
} }
return; return;
} }
free(ul_tti_req);
} }
static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config) static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config)
...@@ -710,20 +707,29 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, ...@@ -710,20 +707,29 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
slot = dl_tti_request->Slot; slot = dl_tti_request->Slot;
LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", frame, slot); LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", frame, slot);
copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request); copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request);
free_and_zero(dl_tti_request);
} }
/* This checks if the previously recevied DCI matches our current RNTI /* This checks if the previously recevied DCI matches our current RNTI
value. The assumption is that if the DCI matches our RNTI, then the value. The assumption is that if the DCI matches our RNTI, then the
incoming tx_data_request is also destined for the current UE. If the incoming tx_data_request is also destined for the current UE. If the
RAR hasn't been processed yet, we do not want to be filtering the RAR hasn't been processed yet, we do not want to be filtering the
tx_data_requests. */ tx_data_requests. */
if (tx_data_request && (mac->nr_ue_emul_l1.expected_sib || if (tx_data_request)
mac->nr_ue_emul_l1.expected_rar ||
mac->nr_ue_emul_l1.expected_dci))
{ {
frame = tx_data_request->SFN; if (mac->nr_ue_emul_l1.expected_sib ||
slot = tx_data_request->Slot; mac->nr_ue_emul_l1.expected_rar ||
LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot); mac->nr_ue_emul_l1.expected_dci)
copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request); {
frame = tx_data_request->SFN;
slot = tx_data_request->Slot;
LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot);
copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request);
}
else
{
LOG_D(NR_MAC, "Unexpected tx_data_req\n");
}
free_and_zero(tx_data_request);
} }
else if (ul_dci_request) else if (ul_dci_request)
{ {
...@@ -731,6 +737,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, ...@@ -731,6 +737,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
slot = ul_dci_request->Slot; slot = ul_dci_request->Slot;
LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", frame, slot); LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", frame, slot);
copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request); copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request);
free_and_zero(ul_dci_request);
} }
else if (ul_tti_request) else if (ul_tti_request)
{ {
...@@ -738,6 +745,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, ...@@ -738,6 +745,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
slot = ul_tti_request->Slot; slot = ul_tti_request->Slot;
LOG_D(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); LOG_D(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot);
copy_ul_tti_data_req_to_dl_info(&mac->dl_info, ul_tti_request); copy_ul_tti_data_req_to_dl_info(&mac->dl_info, ul_tti_request);
free_and_zero(ul_tti_request);
} }
else else
{ {
...@@ -771,7 +779,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, ...@@ -771,7 +779,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc->tdd_UL_DL_ConfigurationCommon :
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
ul_info.slot_tx, ul_info.slot_tx,
mac->frame_type)) mac->frame_type) && mac->ra.ra_state != RA_SUCCEEDED)
{ {
nr_ue_scheduler(NULL, &ul_info); nr_ue_scheduler(NULL, &ul_info);
nr_ue_prach_scheduler(ul_info.module_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); nr_ue_prach_scheduler(ul_info.module_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment