From daf890932c64751855100f5417c4dbab8a10aedd Mon Sep 17 00:00:00 2001 From: francescomani Date: Mon, 21 Nov 2022 11:11:49 +0100 Subject: [PATCH] avoid gnb stalling on retransmissions --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index d61adf5d3d..b73f82ad6c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1401,14 +1401,10 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra uint16_t mac_sdu_length = 0; - rnti_t tc_rnti = ra->rnti; // If UE is known by the network, C-RNTI to be used instead of TC-RNTI + rnti_t tc_rnti = ra->rnti; if (ra->msg3_dcch_dtch) { ra->rnti = ra->crnti; - } else { - mac_sdu_length = mac_rrc_nr_data_req(module_idP, CC_id, frameP, CCCH, ra->rnti, 1, NULL); - if (mac_sdu_length <= 0) - return; // need to wait until RRCSetup is encoded } NR_UE_info_t * UE = find_nr_UE(&nr_mac->UE_info, ra->rnti); @@ -1417,6 +1413,16 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra return; } + NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; + /* get the PID of a HARQ process awaiting retrnasmission, or -1 otherwise */ + int current_harq_pid = sched_ctrl->retrans_dl_harq.head; + + if (ra->msg3_dcch_dtch == false && current_harq_pid < 0) { + mac_sdu_length = mac_rrc_nr_data_req(module_idP, CC_id, frameP, CCCH, ra->rnti, 1, NULL); + if (mac_sdu_length <= 0) + return; // need to wait until RRCSetup is encoded + } + long BWPStart = 0; long BWPSize = 0; NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config = NULL; @@ -1509,9 +1515,6 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra LOG_I(NR_MAC,"Generate msg4, rnti: %04x\n", ra->rnti); - NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; - /* get the PID of a HARQ process awaiting retrnasmission, or -1 otherwise */ - int current_harq_pid = sched_ctrl->retrans_dl_harq.head; // HARQ management if (current_harq_pid < 0) { AssertFatal(sched_ctrl->available_dl_harq.head >= 0,