Fixing memory leaks and hoping to fix num_dci_option bug
This commit is contained in:
+2
-4
@@ -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)
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user