diff --git a/srsenb/src/stack/mac/scheduler_grid.cc b/srsenb/src/stack/mac/scheduler_grid.cc index d91be7a19..dce1a9c77 100644 --- a/srsenb/src/stack/mac/scheduler_grid.cc +++ b/srsenb/src/stack/mac/scheduler_grid.cc @@ -852,7 +852,7 @@ alloc_outcome_t sf_sched::alloc_ul_user(sched_ue* user, prb_interval alloc) bool has_retx = h->has_pending_retx(); if (has_retx) { prb_interval prev_alloc = h->get_alloc(); - if (prev_alloc == alloc) { + if (prev_alloc == alloc and h->has_pending_ack()) { alloc_type = ul_alloc_t::NOADAPT_RETX; } else { alloc_type = ul_alloc_t::ADAPT_RETX; diff --git a/srsenb/src/stack/mac/scheduler_harq.cc b/srsenb/src/stack/mac/scheduler_harq.cc index f708d6ca6..9157296c5 100644 --- a/srsenb/src/stack/mac/scheduler_harq.cc +++ b/srsenb/src/stack/mac/scheduler_harq.cc @@ -255,7 +255,8 @@ void ul_harq_proc::new_tx(uint32_t tti_, int mcs, int tbs, prb_interval alloc, u void ul_harq_proc::new_retx(uint32_t tb_idx, uint32_t tti_, int* mcs, int* tbs, prb_interval alloc) { - is_adaptive = alloc != allocation; + // If PRBs changed, or there was no CRC (e.g. HARQ is being resumed) + is_adaptive = alloc != allocation or not has_pending_ack(); allocation = alloc; new_retx_common(tb_idx, tti_point{tti_}, mcs, tbs); }