sched refactor - removal or cleanup of unused sched methods

This commit is contained in:
Francisco 2021-03-18 10:40:37 +00:00 committed by Francisco Paisana
parent 137a21d6b2
commit fb48f4484c
5 changed files with 63 additions and 86 deletions

View File

@ -107,13 +107,13 @@ public:
} }
T& front() { return (*this)[0]; } T& front() { return (*this)[0]; }
const T& front() const { return (*this)[0]; } const T& front() const { return (*this)[0]; }
T* data() { return &front(); } T* data() { return reinterpret_cast<T*>(buffer); }
const T* data() const { return &front(); } const T* data() const { return reinterpret_cast<const T*>(buffer); }
// Iterators // Iterators
iterator begin() { return reinterpret_cast<T*>(buffer); } iterator begin() { return data(); }
iterator end() { return begin() + size_; } iterator end() { return begin() + size_; }
const_iterator begin() const { return reinterpret_cast<const T*>(buffer); } const_iterator begin() const { return data(); }
const_iterator end() const { return begin() + size_; } const_iterator end() const { return begin() + size_; }
// Capacity // Capacity

View File

@ -19,7 +19,6 @@
#include "srslte/adt/bounded_bitset.h" #include "srslte/adt/bounded_bitset.h"
#include "srslte/adt/circular_array.h" #include "srslte/adt/circular_array.h"
#include "srslte/srslog/srslog.h" #include "srslte/srslog/srslog.h"
#include <deque>
#include <vector> #include <vector>
namespace srsenb { namespace srsenb {
@ -30,7 +29,7 @@ enum class alloc_result {
sch_collision, sch_collision,
no_cch_space, no_cch_space,
no_sch_space, no_sch_space,
rnti_inactive, no_rnti_opportunity,
invalid_grant_params, invalid_grant_params,
invalid_coderate, invalid_coderate,
no_grant_space, no_grant_space,
@ -101,11 +100,6 @@ private:
class sf_grid_t class sf_grid_t
{ {
public: public:
struct dl_ctrl_alloc_t {
alloc_result outcome;
rbg_interval rbg_range;
};
sf_grid_t() : logger(srslog::fetch_basic_logger("MAC")) {} sf_grid_t() : logger(srslog::fetch_basic_logger("MAC")) {}
void init(const sched_cell_params_t& cell_params_); void init(const sched_cell_params_t& cell_params_);
@ -168,8 +162,6 @@ public:
}; };
struct bc_alloc_t : public ctrl_alloc_t { struct bc_alloc_t : public ctrl_alloc_t {
sched_interface::dl_sched_bc_t bc_grant; sched_interface::dl_sched_bc_t bc_grant;
bc_alloc_t() = default;
explicit bc_alloc_t(const ctrl_alloc_t& c) : ctrl_alloc_t(c) {}
}; };
struct dl_alloc_t { struct dl_alloc_t {
size_t dci_idx; size_t dci_idx;
@ -194,7 +186,6 @@ public:
uint32_t n_prb = 0; uint32_t n_prb = 0;
uint32_t mcs = 0; uint32_t mcs = 0;
}; };
typedef std::pair<alloc_result, const ctrl_alloc_t> ctrl_code_t;
// Control/Configuration Methods // Control/Configuration Methods
sf_sched(); sf_sched();
@ -206,28 +197,28 @@ public:
alloc_result alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload, rbg_interval rbgs); alloc_result alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload, rbg_interval rbgs);
alloc_result alloc_rar(uint32_t aggr_lvl, const pending_rar_t& rar_grant, rbg_interval rbgs, uint32_t nof_grants); alloc_result alloc_rar(uint32_t aggr_lvl, const pending_rar_t& rar_grant, rbg_interval rbgs, uint32_t nof_grants);
bool reserve_dl_rbgs(uint32_t rbg_start, uint32_t rbg_end) { return tti_alloc.reserve_dl_rbgs(rbg_start, rbg_end); } bool reserve_dl_rbgs(uint32_t rbg_start, uint32_t rbg_end) { return tti_alloc.reserve_dl_rbgs(rbg_start, rbg_end); }
const std::vector<rar_alloc_t>& get_allocated_rars() const { return rar_allocs; }
// UL alloc methods // UL alloc methods
alloc_result alloc_msg3(sched_ue* user, const sched_interface::dl_sched_rar_grant_t& rargrant); alloc_result alloc_msg3(sched_ue* user, const sched_interface::dl_sched_rar_grant_t& rargrant);
alloc_result alloc_result
alloc_ul(sched_ue* user, prb_interval alloc, ul_alloc_t::type_t alloc_type, bool is_msg3 = false, int msg3_mcs = -1); alloc_ul(sched_ue* user, prb_interval alloc, ul_alloc_t::type_t alloc_type, bool is_msg3 = false, int msg3_mcs = -1);
bool reserve_ul_prbs(const prbmask_t& ulmask, bool strict) alloc_result reserve_ul_prbs(const prbmask_t& ulmask, bool strict)
{ {
return tti_alloc.reserve_ul_prbs(ulmask, strict) == alloc_result::success; return tti_alloc.reserve_ul_prbs(ulmask, strict);
} }
bool alloc_phich(sched_ue* user); alloc_result alloc_phich(sched_ue* user);
// compute DCIs and generate dl_sched_result/ul_sched_result for a given TTI // compute DCIs and generate dl_sched_result/ul_sched_result for a given TTI
void generate_sched_results(sched_ue_list& ue_db); void generate_sched_results(sched_ue_list& ue_db);
alloc_result alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid); alloc_result alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid);
tti_point get_tti_tx_dl() const { return to_tx_dl(tti_rx); } tti_point get_tti_tx_dl() const { return to_tx_dl(tti_rx); }
uint32_t get_nof_ctrl_symbols() const; uint32_t get_nof_ctrl_symbols() const;
const rbgmask_t& get_dl_mask() const { return tti_alloc.get_dl_mask(); } const rbgmask_t& get_dl_mask() const { return tti_alloc.get_dl_mask(); }
alloc_result alloc_ul_user(sched_ue* user, prb_interval alloc); alloc_result alloc_ul_user(sched_ue* user, prb_interval alloc);
const prbmask_t& get_ul_mask() const { return tti_alloc.get_ul_mask(); } const prbmask_t& get_ul_mask() const { return tti_alloc.get_ul_mask(); }
tti_point get_tti_tx_ul() const { return to_tx_ul(tti_rx); } tti_point get_tti_tx_ul() const { return to_tx_ul(tti_rx); }
srslte::const_span<rar_alloc_t> get_allocated_rars() const { return rar_allocs; }
// getters // getters
tti_point get_tti_rx() const { return tti_rx; } tti_point get_tti_rx() const { return tti_rx; }
@ -237,10 +228,6 @@ public:
const sched_cell_params_t* get_cc_cfg() const { return cc_cfg; } const sched_cell_params_t* get_cc_cfg() const { return cc_cfg; }
private: private:
void set_bc_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
sched_interface::dl_sched_res_t* dl_result);
void set_rar_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
sched_interface::dl_sched_res_t* dl_result);
void set_dl_data_sched_result(const sf_cch_allocator::alloc_result_t& dci_result, void set_dl_data_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
sched_interface::dl_sched_res_t* dl_result, sched_interface::dl_sched_res_t* dl_result,
sched_ue_list& ue_list); sched_ue_list& ue_list);
@ -257,8 +244,8 @@ private:
sf_grid_t tti_alloc; sf_grid_t tti_alloc;
srslte::bounded_vector<bc_alloc_t, sched_interface::MAX_BC_LIST> bc_allocs; srslte::bounded_vector<bc_alloc_t, sched_interface::MAX_BC_LIST> bc_allocs;
std::vector<rar_alloc_t> rar_allocs; srslte::bounded_vector<rar_alloc_t, sched_interface::MAX_RAR_LIST> rar_allocs;
std::vector<dl_alloc_t> data_allocs; srslte::bounded_vector<dl_alloc_t, sched_interface::MAX_DATA_LIST> data_allocs;
srslte::bounded_vector<ul_alloc_t, sched_interface::MAX_DATA_LIST> ul_data_allocs; srslte::bounded_vector<ul_alloc_t, sched_interface::MAX_DATA_LIST> ul_data_allocs;
uint32_t last_msg3_prb = 0, max_msg3_prb = 0; uint32_t last_msg3_prb = 0, max_msg3_prb = 0;

View File

@ -295,7 +295,7 @@ int ra_sched::dl_rach_info(dl_sched_rar_info_t rar_info)
//! Schedule Msg3 grants in UL based on allocated RARs //! Schedule Msg3 grants in UL based on allocated RARs
void ra_sched::ul_sched(sf_sched* sf_dl_sched, sf_sched* sf_msg3_sched) void ra_sched::ul_sched(sf_sched* sf_dl_sched, sf_sched* sf_msg3_sched)
{ {
const std::vector<sf_sched::rar_alloc_t>& alloc_rars = sf_dl_sched->get_allocated_rars(); srslte::const_span<sf_sched::rar_alloc_t> alloc_rars = sf_dl_sched->get_allocated_rars();
for (const auto& rar : alloc_rars) { for (const auto& rar : alloc_rars) {
for (const auto& msg3grant : rar.rar_grant.msg3_grant) { for (const auto& msg3grant : rar.rar_grant.msg3_grant) {
@ -334,7 +334,7 @@ sched::carrier_sched::carrier_sched(rrc_interface_mac* rrc_,
sf_dl_mask.resize(1, 0); sf_dl_mask.resize(1, 0);
} }
sched::carrier_sched::~carrier_sched() {} sched::carrier_sched::~carrier_sched() = default;
void sched::carrier_sched::reset() void sched::carrier_sched::reset()
{ {
@ -386,10 +386,9 @@ const cc_sched_result& sched::carrier_sched::generate_tti_result(tti_point tti_r
/* Schedule PHICH */ /* Schedule PHICH */
for (auto& ue_pair : *ue_db) { for (auto& ue_pair : *ue_db) {
if (cc_result->ul_sched_result.phich.size() >= MAX_PHICH_LIST) { if (tti_sched->alloc_phich(ue_pair.second.get()) == alloc_result::no_grant_space) {
break; break;
} }
tti_sched->alloc_phich(ue_pair.second.get());
} }
/* Schedule DL control data */ /* Schedule DL control data */

View File

@ -29,7 +29,7 @@ const char* to_string(alloc_result result)
return "No space available in PUCCH or PDCCH"; return "No space available in PUCCH or PDCCH";
case alloc_result::no_sch_space: case alloc_result::no_sch_space:
return "Requested number of PRBs not available"; return "Requested number of PRBs not available";
case alloc_result::rnti_inactive: case alloc_result::no_rnti_opportunity:
return "rnti cannot be allocated (e.g. already allocated, no data, meas gap collision, carrier inactive, etc.)"; return "rnti cannot be allocated (e.g. already allocated, no data, meas gap collision, carrier inactive, etc.)";
case alloc_result::invalid_grant_params: case alloc_result::invalid_grant_params:
return "invalid grant arguments (e.g. invalid prb mask)"; return "invalid grant arguments (e.g. invalid prb mask)";
@ -55,8 +55,8 @@ void sf_sched_result::new_tti(tti_point tti_rx_)
bool sf_sched_result::is_ul_alloc(uint16_t rnti) const bool sf_sched_result::is_ul_alloc(uint16_t rnti) const
{ {
for (const auto& cc : enb_cc_list) { for (const auto& cc : enb_cc_list) {
for (uint32_t j = 0; j < cc.ul_sched_result.pusch.size(); ++j) { for (const auto& pusch : cc.ul_sched_result.pusch) {
if (cc.ul_sched_result.pusch[j].dci.rnti == rnti) { if (pusch.dci.rnti == rnti) {
return true; return true;
} }
} }
@ -66,8 +66,8 @@ bool sf_sched_result::is_ul_alloc(uint16_t rnti) const
bool sf_sched_result::is_dl_alloc(uint16_t rnti) const bool sf_sched_result::is_dl_alloc(uint16_t rnti) const
{ {
for (const auto& cc : enb_cc_list) { for (const auto& cc : enb_cc_list) {
for (uint32_t j = 0; j < cc.dl_sched_result.data.size(); ++j) { for (const auto& data : cc.dl_sched_result.data) {
if (cc.dl_sched_result.data[j].dci.rnti == rnti) { if (data.dci.rnti == rnti) {
return true; return true;
} }
} }
@ -259,7 +259,7 @@ void sf_grid_t::rem_last_alloc_dl(rbg_interval rbgs)
alloc_result sf_grid_t::reserve_ul_prbs(prb_interval alloc, bool strict) alloc_result sf_grid_t::reserve_ul_prbs(prb_interval alloc, bool strict)
{ {
if (alloc.stop() > ul_mask.size()) { if (alloc.stop() > ul_mask.size()) {
return alloc_result::no_sch_space; return alloc_result::invalid_grant_params;
} }
prbmask_t newmask(ul_mask.size()); prbmask_t newmask(ul_mask.size());
@ -271,10 +271,13 @@ alloc_result sf_grid_t::reserve_ul_prbs(const prbmask_t& prbmask, bool strict)
{ {
alloc_result ret = alloc_result::success; alloc_result ret = alloc_result::success;
if (strict and (ul_mask & prbmask).any()) { if (strict and (ul_mask & prbmask).any()) {
fmt::memory_buffer tmp_buffer; if (logger.info.enabled()) {
fmt::format_to(tmp_buffer, "There was a collision in the UL. Current mask={:x}, new mask={:x}", ul_mask, prbmask); fmt::memory_buffer tmp_buffer;
logger.error("%s", srslte::to_c_str(tmp_buffer)); fmt::format_to(
ret = alloc_result::sch_collision; tmp_buffer, "There was a collision in the UL. Current mask=0x{:x}, new mask=0x{:x}", ul_mask, prbmask);
logger.info("%s", srslte::to_c_str(tmp_buffer));
ret = alloc_result::sch_collision;
}
} }
ul_mask |= prbmask; ul_mask |= prbmask;
return ret; return ret;
@ -325,7 +328,7 @@ void sf_sched::init(const sched_cell_params_t& cell_params_)
{ {
cc_cfg = &cell_params_; cc_cfg = &cell_params_;
tti_alloc.init(*cc_cfg); tti_alloc.init(*cc_cfg);
max_msg3_prb = std::max(6u, cc_cfg->cfg.cell.nof_prb - tti_alloc.get_pucch_width()); max_msg3_prb = std::max(6U, cc_cfg->cfg.cell.nof_prb - tti_alloc.get_pucch_width());
} }
void sf_sched::new_tti(tti_point tti_rx_, sf_sched_result* cc_results_) void sf_sched::new_tti(tti_point tti_rx_, sf_sched_result* cc_results_)
@ -361,7 +364,7 @@ bool sf_sched::is_ul_alloc(uint16_t rnti) const
alloc_result sf_sched::alloc_sib(uint32_t aggr_lvl, uint32_t sib_idx, uint32_t sib_ntx, rbg_interval rbgs) alloc_result sf_sched::alloc_sib(uint32_t aggr_lvl, uint32_t sib_idx, uint32_t sib_ntx, rbg_interval rbgs)
{ {
if (bc_allocs.size() >= sched_interface::MAX_BC_LIST) { if (bc_allocs.full()) {
logger.warning("SCHED: Maximum number of Broadcast allocations reached"); logger.warning("SCHED: Maximum number of Broadcast allocations reached");
return alloc_result::no_grant_space; return alloc_result::no_grant_space;
} }
@ -391,7 +394,7 @@ alloc_result sf_sched::alloc_sib(uint32_t aggr_lvl, uint32_t sib_idx, uint32_t s
alloc_result sf_sched::alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload, rbg_interval rbgs) alloc_result sf_sched::alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload, rbg_interval rbgs)
{ {
if (bc_allocs.size() >= sched_interface::MAX_BC_LIST) { if (bc_allocs.full()) {
logger.warning("SCHED: Maximum number of Broadcast allocations reached"); logger.warning("SCHED: Maximum number of Broadcast allocations reached");
return alloc_result::no_grant_space; return alloc_result::no_grant_space;
} }
@ -422,7 +425,7 @@ alloc_result sf_sched::alloc_paging(uint32_t aggr_lvl, uint32_t paging_payload,
alloc_result sf_sched::alloc_rar(uint32_t aggr_lvl, const pending_rar_t& rar, rbg_interval rbgs, uint32_t nof_grants) alloc_result sf_sched::alloc_rar(uint32_t aggr_lvl, const pending_rar_t& rar, rbg_interval rbgs, uint32_t nof_grants)
{ {
static const uint32_t msg3_nof_prbs = 3; static const uint32_t msg3_nof_prbs = 3;
if (rar_allocs.size() >= sched_interface::MAX_RAR_LIST) { if (rar_allocs.full()) {
logger.info("SCHED: Maximum number of RAR allocations per TTI reached."); logger.info("SCHED: Maximum number of RAR allocations per TTI reached.");
return alloc_result::no_grant_space; return alloc_result::no_grant_space;
} }
@ -474,22 +477,22 @@ bool is_periodic_cqi_expected(const sched_interface::ue_cfg_t& ue_cfg, tti_point
alloc_result sf_sched::alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid) alloc_result sf_sched::alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask, uint32_t pid)
{ {
if (data_allocs.size() >= sched_interface::MAX_DATA_LIST) { if (data_allocs.full()) {
logger.warning("SCHED: Maximum number of DL allocations reached"); logger.warning("SCHED: Maximum number of DL allocations reached");
return alloc_result::no_grant_space; return alloc_result::no_grant_space;
} }
if (is_dl_alloc(user->get_rnti())) { if (is_dl_alloc(user->get_rnti())) {
logger.warning("SCHED: Attempt to assign multiple harq pids to the same user rnti=0x%x", user->get_rnti()); logger.warning("SCHED: Attempt to assign multiple harq pids to the same user rnti=0x%x", user->get_rnti());
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
auto* cc = user->find_ue_carrier(cc_cfg->enb_cc_idx); auto* cc = user->find_ue_carrier(cc_cfg->enb_cc_idx);
if (cc == nullptr or cc->cc_state() != cc_st::active) { if (cc == nullptr or cc->cc_state() != cc_st::active) {
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
if (not user->pdsch_enabled(srslte::tti_point{get_tti_rx()}, cc_cfg->enb_cc_idx)) { if (not user->pdsch_enabled(srslte::tti_point{get_tti_rx()}, cc_cfg->enb_cc_idx)) {
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
// Check if allocation would cause segmentation // Check if allocation would cause segmentation
@ -498,7 +501,7 @@ alloc_result sf_sched::alloc_dl_user(sched_ue* user, const rbgmask_t& user_mask,
// It is newTx // It is newTx
rbg_interval r = user->get_required_dl_rbgs(cc_cfg->enb_cc_idx); rbg_interval r = user->get_required_dl_rbgs(cc_cfg->enb_cc_idx);
if (r.start() > user_mask.count()) { if (r.start() > user_mask.count()) {
logger.warning("SCHED: The number of RBGs allocated to rnti=0x%x will force segmentation", user->get_rnti()); logger.debug("SCHED: The number of RBGs allocated to rnti=0x%x will force segmentation", user->get_rnti());
return alloc_result::invalid_grant_params; return alloc_result::invalid_grant_params;
} }
} }
@ -568,14 +571,14 @@ sf_sched::alloc_ul(sched_ue* user, prb_interval alloc, ul_alloc_t::type_t alloc_
if (is_ul_alloc(user->get_rnti())) { if (is_ul_alloc(user->get_rnti())) {
logger.warning("SCHED: Attempt to assign multiple UL grants to the same user rnti=0x%x", user->get_rnti()); logger.warning("SCHED: Attempt to assign multiple UL grants to the same user rnti=0x%x", user->get_rnti());
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
// Check if there is no collision with measGap // Check if there is no collision with measGap
bool needs_pdcch = alloc_type == ul_alloc_t::ADAPT_RETX or (alloc_type == ul_alloc_t::NEWTX and not is_msg3); bool needs_pdcch = alloc_type == ul_alloc_t::ADAPT_RETX or (alloc_type == ul_alloc_t::NEWTX and not is_msg3);
if (not user->pusch_enabled(get_tti_rx(), cc_cfg->enb_cc_idx, needs_pdcch)) { if (not user->pusch_enabled(get_tti_rx(), cc_cfg->enb_cc_idx, needs_pdcch)) {
logger.debug("SCHED: PDCCH would collide with rnti=0x%x Measurement Gap", user->get_rnti()); logger.debug("SCHED: PDCCH would collide with rnti=0x%x Measurement Gap", user->get_rnti());
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
// Allocate RBGs and DCI space // Allocate RBGs and DCI space
@ -614,20 +617,20 @@ alloc_result sf_sched::alloc_ul_user(sched_ue* user, prb_interval alloc)
return alloc_ul(user, alloc, alloc_type, h->is_msg3()); return alloc_ul(user, alloc, alloc_type, h->is_msg3());
} }
bool sf_sched::alloc_phich(sched_ue* user) alloc_result sf_sched::alloc_phich(sched_ue* user)
{ {
using phich_t = sched_interface::ul_sched_phich_t; using phich_t = sched_interface::ul_sched_phich_t;
auto* ul_sf_result = &cc_results->get_cc(cc_cfg->enb_cc_idx)->ul_sched_result; auto* ul_sf_result = &cc_results->get_cc(cc_cfg->enb_cc_idx)->ul_sched_result;
if (ul_sf_result->phich.full()) { if (ul_sf_result->phich.full()) {
logger.warning("SCHED: Maximum number of PHICH allocations has been reached"); logger.warning("SCHED: Maximum number of PHICH allocations has been reached");
return false; return alloc_result::no_grant_space;
} }
auto p = user->get_active_cell_index(cc_cfg->enb_cc_idx); auto p = user->get_active_cell_index(cc_cfg->enb_cc_idx);
if (not p.first) { if (not p.first) {
// user does not support this carrier // user does not support this carrier
return false; return alloc_result::no_rnti_opportunity;
} }
ul_harq_proc* h = user->get_ul_harq(get_tti_tx_ul(), cc_cfg->enb_cc_idx); ul_harq_proc* h = user->get_ul_harq(get_tti_tx_ul(), cc_cfg->enb_cc_idx);
@ -637,29 +640,9 @@ bool sf_sched::alloc_phich(sched_ue* user)
ul_sf_result->phich.emplace_back(); ul_sf_result->phich.emplace_back();
ul_sf_result->phich.back().rnti = user->get_rnti(); ul_sf_result->phich.back().rnti = user->get_rnti();
ul_sf_result->phich.back().phich = h->pop_pending_phich() ? phich_t::ACK : phich_t::NACK; ul_sf_result->phich.back().phich = h->pop_pending_phich() ? phich_t::ACK : phich_t::NACK;
return true; return alloc_result::success;
}
return false;
}
void sf_sched::set_bc_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
sched_interface::dl_sched_res_t* dl_result)
{
for (const auto& bc_alloc : bc_allocs) {
dl_result->bc.emplace_back(bc_alloc.bc_grant);
dl_result->bc.back().dci.location = dci_result[bc_alloc.dci_idx]->dci_pos;
log_broadcast_allocation(dl_result->bc.back(), bc_alloc.rbg_range, *cc_cfg);
}
}
void sf_sched::set_rar_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
sched_interface::dl_sched_res_t* dl_result)
{
for (const auto& rar_alloc : rar_allocs) {
dl_result->rar.emplace_back(rar_alloc.rar_grant);
dl_result->rar.back().dci.location = dci_result[rar_alloc.alloc_data.dci_idx]->dci_pos;
log_rar_allocation(dl_result->rar.back(), rar_alloc.alloc_data.rbg_range);
} }
return alloc_result::no_rnti_opportunity;
} }
void sf_sched::set_dl_data_sched_result(const sf_cch_allocator::alloc_result_t& dci_result, void sf_sched::set_dl_data_sched_result(const sf_cch_allocator::alloc_result_t& dci_result,
@ -927,9 +910,17 @@ void sf_sched::generate_sched_results(sched_ue_list& ue_db)
cc_result->dl_sched_result.cfi = tti_alloc.get_pdcch_grid().get_cfi(); cc_result->dl_sched_result.cfi = tti_alloc.get_pdcch_grid().get_cfi();
/* Generate DCI formats and fill sched_result structs */ /* Generate DCI formats and fill sched_result structs */
set_bc_sched_result(dci_result, &cc_result->dl_sched_result); for (const auto& bc_alloc : bc_allocs) {
cc_result->dl_sched_result.bc.emplace_back(bc_alloc.bc_grant);
cc_result->dl_sched_result.bc.back().dci.location = dci_result[bc_alloc.dci_idx]->dci_pos;
log_broadcast_allocation(cc_result->dl_sched_result.bc.back(), bc_alloc.rbg_range, *cc_cfg);
}
set_rar_sched_result(dci_result, &cc_result->dl_sched_result); for (const auto& rar_alloc : rar_allocs) {
cc_result->dl_sched_result.rar.emplace_back(rar_alloc.rar_grant);
cc_result->dl_sched_result.rar.back().dci.location = dci_result[rar_alloc.alloc_data.dci_idx]->dci_pos;
log_rar_allocation(cc_result->dl_sched_result.rar.back(), rar_alloc.alloc_data.rbg_range);
}
set_dl_data_sched_result(dci_result, &cc_result->dl_sched_result, ue_db); set_dl_data_sched_result(dci_result, &cc_result->dl_sched_result, ue_db);

View File

@ -146,7 +146,7 @@ alloc_result try_dl_newtx_alloc_greedy(sf_sched& tti_sched, sched_ue& ue, const
// If there is no data to transmit, no need to allocate // If there is no data to transmit, no need to allocate
rbg_interval req_rbgs = ue.get_required_dl_rbgs(tti_sched.get_enb_cc_idx()); rbg_interval req_rbgs = ue.get_required_dl_rbgs(tti_sched.get_enb_cc_idx());
if (req_rbgs.stop() == 0) { if (req_rbgs.stop() == 0) {
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
// Find RBG mask that accommodates pending data // Find RBG mask that accommodates pending data
@ -245,7 +245,7 @@ alloc_result try_ul_retx_alloc(sf_sched& tti_sched, sched_ue& ue, const ul_harq_
// Avoid measGaps accounting for PDCCH // Avoid measGaps accounting for PDCCH
if (not ue.pusch_enabled(tti_sched.get_tti_rx(), tti_sched.get_enb_cc_idx(), true)) { if (not ue.pusch_enabled(tti_sched.get_tti_rx(), tti_sched.get_enb_cc_idx(), true)) {
return alloc_result::rnti_inactive; return alloc_result::no_rnti_opportunity;
} }
uint32_t nof_prbs = alloc.length(); uint32_t nof_prbs = alloc.length();
alloc = find_contiguous_ul_prbs(nof_prbs, tti_sched.get_ul_mask()); alloc = find_contiguous_ul_prbs(nof_prbs, tti_sched.get_ul_mask());