From 272be719ddef445d8017bb59b9f4577f9891577e Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 19 Sep 2025 12:11:58 +0200 Subject: [PATCH 1/2] NR UE: in nr_ue_scheduler.c set LCID_buffer_remain to 0 if RLC indicates not more bytes in buffer If the RLC indicates that there is no more data in the buffer, also the scheduler's LCID_buffer_remain should be set to 0. Else the UE sends BSR indicating it has data to be transmitted. The gNB would then unnecessarily schedule UL for this UE, which would not be used, as there is no actual data to be transmitted. --- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index cf7fda5ccf..8253608335 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -1299,8 +1299,8 @@ static void nr_update_rlc_buffers_status(NR_UE_MAC_INST_t *mac, frame_t frameP, rlc_status.bytes_in_buffer, frameP, slotP); - lc_sched_info->LCID_buffer_remain = rlc_status.bytes_in_buffer; } + lc_sched_info->LCID_buffer_remain = rlc_status.bytes_in_buffer; } } From ccad50daca250c7c4fb66fa62ca0db100bfd82e9 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Tue, 23 Sep 2025 11:17:44 +0200 Subject: [PATCH 2/2] NR UE: do not consider suspended logical channels in nr_update_bsr() While a logical channel is suspended, we should not consider it in the BSR, as we cannot transmit any data from it. --- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 8253608335..523a858b8f 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -1331,6 +1331,8 @@ static void nr_update_bsr(NR_UE_MAC_INST_t *mac, uint32_t *LCG_bytes) bool bsr_regular_triggered = mac->scheduling_info.BSR_reporting_active & NR_BSR_TRIGGER_REGULAR; for (int i = 0; i < mac->lc_ordered_list.count; i++) { nr_lcordered_info_t *lc_info = mac->lc_ordered_list.array[i]; + if (lc_info->rb_suspended) + continue; int lcid = lc_info->lcid; NR_LC_SCHEDULING_INFO *lc_sched_info = get_scheduling_info_from_lcid(mac, lcid); int lcgid = lc_sched_info->LCGID;