Use spsc_q for SRS processing
Use the spsc queue to pass jobs from TX thread (scheduler) to RX thread (handling those jobs), reducing the amount spent searching for SRS jobs, clarifying the design, and making it thread-safe. Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
This commit is contained in:
@@ -419,15 +419,13 @@ void init_nr_transport(PHY_VARS_gNB *gNB)
|
||||
buffer_ul_slots = (nb_ul_slots_period < slot_ahead) ? nb_ul_slots_period : slot_ahead;
|
||||
|
||||
gNB->max_nb_pusch = buffer_ul_slots ? MAX_MOBILES_PER_GNB * buffer_ul_slots : 1;
|
||||
gNB->max_nb_srs = buffer_ul_slots ? buffer_ul_slots << 1 : 1; // assuming at most 2 SRS per slot
|
||||
|
||||
int max_nb_pucch = buffer_ul_slots ? MAX_MOBILES_PER_GNB * buffer_ul_slots : 1;
|
||||
gNB->pucch_queue = spsc_q_alloc(max_nb_pucch, sizeof(NR_gNB_PUCCH_job_t));
|
||||
gNB->pusch_queue = spsc_q_alloc(gNB->max_nb_pusch, sizeof(NR_gNB_PUSCH_job_t));
|
||||
|
||||
gNB->srs = (NR_gNB_SRS_t *)malloc16(gNB->max_nb_srs * sizeof(NR_gNB_SRS_t));
|
||||
for (int i = 0; i < gNB->max_nb_srs; i++)
|
||||
gNB->srs[i].active = 0;
|
||||
int max_nb_srs = buffer_ul_slots ? buffer_ul_slots << 1 : 1; // assuming at most 2 SRS per slot
|
||||
gNB->srs_queue = spsc_q_alloc(max_nb_srs, sizeof(NR_gNB_SRS_job_t));
|
||||
|
||||
gNB->ulsch = (NR_gNB_ULSCH_t *)malloc16(gNB->max_nb_pusch * sizeof(NR_gNB_ULSCH_t));
|
||||
for (int i = 0; i < gNB->max_nb_pusch; i++) {
|
||||
@@ -446,7 +444,7 @@ void reset_nr_transport(PHY_VARS_gNB *gNB)
|
||||
|
||||
spsc_q_free(&gNB->pucch_queue);
|
||||
spsc_q_free(&gNB->pusch_queue);
|
||||
free(gNB->srs);
|
||||
spsc_q_free(&gNB->srs_queue);
|
||||
|
||||
for (int i = 0; i < gNB->max_nb_pusch; i++)
|
||||
free_gNB_ulsch(&gNB->ulsch[i], fp->N_RB_UL);
|
||||
|
||||
Reference in New Issue
Block a user