From a8cccd7a108234a5a95d50cec65e1d0283b0dd54 Mon Sep 17 00:00:00 2001 From: Francisco Date: Tue, 25 May 2021 17:23:04 +0100 Subject: [PATCH] bugfix, sched: fix aggregation level derivation to avoid L > 3 --- srsenb/src/stack/mac/sched_helpers.cc | 10 +++++++--- srsenb/test/mac/sched_common_test_suite.cc | 2 +- srsenb/test/mac/sched_test_rand.cc | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/srsenb/src/stack/mac/sched_helpers.cc b/srsenb/src/stack/mac/sched_helpers.cc index 14db2fea1..587116b88 100644 --- a/srsenb/src/stack/mac/sched_helpers.cc +++ b/srsenb/src/stack/mac/sched_helpers.cc @@ -400,10 +400,14 @@ uint32_t get_aggr_level(uint32_t nof_bits, l_max = SRSRAN_MIN(max_aggr_lvl, l_max); uint32_t l = min_aggr_lvl; - do { + for (; l <= l_max; ++l) { coderate = srsran_pdcch_coderate(nof_bits, l); - l++; - } while (l < l_max && factor * coderate > max_coderate); + if (factor * coderate > max_coderate) { + break; + } + } + // make aggregation level more conservative + l = std::min(l_max, l + 1); Debug("SCHED: CQI=%d, l=%d, nof_bits=%d, coderate=%.2f, max_coderate=%.2f", dl_cqi, diff --git a/srsenb/test/mac/sched_common_test_suite.cc b/srsenb/test/mac/sched_common_test_suite.cc index 2d2554f87..d04999f9a 100644 --- a/srsenb/test/mac/sched_common_test_suite.cc +++ b/srsenb/test/mac/sched_common_test_suite.cc @@ -217,7 +217,7 @@ int test_pdcch_collisions(const sf_output_res_t& sf_out, // Helper Function: checks if there is any collision. If not, fills the PDCCH mask auto try_cce_fill = [&](const srsran_dci_location_t& dci_loc, const char* ch) { uint32_t cce_start = dci_loc.ncce, cce_stop = dci_loc.ncce + (1u << dci_loc.L); - CONDERROR(dci_loc.L == 0, "The aggregation level %d is not valid", dci_loc.L); + CONDERROR(dci_loc.L > 3, "The aggregation level %d is not valid", dci_loc.L); CONDERROR( cce_start >= ncce or cce_stop > ncce, "The CCE positions (%u, %u) do not fit in PDCCH", cce_start, cce_stop); CONDERROR( diff --git a/srsenb/test/mac/sched_test_rand.cc b/srsenb/test/mac/sched_test_rand.cc index e63519f06..7fea30e46 100644 --- a/srsenb/test/mac/sched_test_rand.cc +++ b/srsenb/test/mac/sched_test_rand.cc @@ -294,6 +294,7 @@ sched_sim_events rand_sim_params(uint32_t nof_ttis) boolean_dist() ? -1 : std::uniform_int_distribution<>{0, 24}(srsenb::get_rand_gen()); sim_gen.sim_args.sched_args.pusch_mcs = boolean_dist() ? -1 : std::uniform_int_distribution<>{0, 24}(srsenb::get_rand_gen()); + sim_gen.sim_args.sched_args.min_aggr_level = std::uniform_int_distribution<>{0, 3}(srsenb::get_rand_gen()); generator.tti_events.resize(nof_ttis);