Fix data race on csirs_vars
csirs_vars used to be global array for each UE. Now its present in phy_data which is in dynamically allocated memory.
This commit is contained in:
@@ -172,7 +172,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
|||||||
NR_UE_COMMON *const common_vars = &ue->common_vars;
|
NR_UE_COMMON *const common_vars = &ue->common_vars;
|
||||||
NR_UE_PRACH **const prach_vars = ue->prach_vars;
|
NR_UE_PRACH **const prach_vars = ue->prach_vars;
|
||||||
NR_UE_CSI_IM **const csiim_vars = ue->csiim_vars;
|
NR_UE_CSI_IM **const csiim_vars = ue->csiim_vars;
|
||||||
NR_UE_CSI_RS **const csirs_vars = ue->csirs_vars;
|
|
||||||
NR_UE_SRS **const srs_vars = ue->srs_vars;
|
NR_UE_SRS **const srs_vars = ue->srs_vars;
|
||||||
|
|
||||||
LOG_I(PHY, "Initializing UE vars for gNB TXant %u, UE RXant %u\n", fp->nb_antennas_tx, fp->nb_antennas_rx);
|
LOG_I(PHY, "Initializing UE vars for gNB TXant %u, UE RXant %u\n", fp->nb_antennas_tx, fp->nb_antennas_rx);
|
||||||
@@ -260,11 +259,9 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
|||||||
for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
||||||
prach_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_PRACH));
|
prach_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_PRACH));
|
||||||
csiim_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_CSI_IM));
|
csiim_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_CSI_IM));
|
||||||
csirs_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_CSI_RS));
|
|
||||||
srs_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_SRS));
|
srs_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_SRS));
|
||||||
|
|
||||||
csiim_vars[gNB_id]->active = false;
|
csiim_vars[gNB_id]->active = false;
|
||||||
csirs_vars[gNB_id]->active = false;
|
|
||||||
srs_vars[gNB_id]->active = false;
|
srs_vars[gNB_id]->active = false;
|
||||||
|
|
||||||
// ceil((NB_RB*8(max allocation per RB)*2(QPSK))/32)
|
// ceil((NB_RB*8(max allocation per RB)*2(QPSK))/32)
|
||||||
@@ -327,7 +324,6 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
|||||||
free_and_zero(ue->nr_srs_info);
|
free_and_zero(ue->nr_srs_info);
|
||||||
|
|
||||||
free_and_zero(ue->csiim_vars[gNB_id]);
|
free_and_zero(ue->csiim_vars[gNB_id]);
|
||||||
free_and_zero(ue->csirs_vars[gNB_id]);
|
|
||||||
free_and_zero(ue->srs_vars[gNB_id]);
|
free_and_zero(ue->srs_vars[gNB_id]);
|
||||||
|
|
||||||
free_and_zero(ue->prach_vars[gNB_id]);
|
free_and_zero(ue->prach_vars[gNB_id]);
|
||||||
|
|||||||
@@ -877,17 +877,10 @@ static void nr_ue_generate_csi_rs(const fapi_nr_dl_config_csirs_pdu_rel15_t *csi
|
|||||||
|
|
||||||
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
|
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP],
|
||||||
|
fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu)
|
||||||
{
|
{
|
||||||
|
|
||||||
int gNB_id = proc->gNB_id;
|
|
||||||
if(!ue->csirs_vars[gNB_id]->active) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ue->csirs_vars[gNB_id]->active = 0;
|
|
||||||
|
|
||||||
const fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu = &ue->csirs_vars[gNB_id]->csirs_config_pdu;
|
|
||||||
|
|
||||||
#ifdef NR_CSIRS_DEBUG
|
#ifdef NR_CSIRS_DEBUG
|
||||||
LOG_I(NR_PHY, "csirs_config_pdu->subcarrier_spacing = %i\n", csirs_config_pdu->subcarrier_spacing);
|
LOG_I(NR_PHY, "csirs_config_pdu->subcarrier_spacing = %i\n", csirs_config_pdu->subcarrier_spacing);
|
||||||
LOG_I(NR_PHY, "csirs_config_pdu->cyclic_prefix = %i\n", csirs_config_pdu->cyclic_prefix);
|
LOG_I(NR_PHY, "csirs_config_pdu->cyclic_prefix = %i\n", csirs_config_pdu->cyclic_prefix);
|
||||||
|
|||||||
@@ -397,7 +397,6 @@ typedef struct PHY_VARS_NR_UE_s {
|
|||||||
|
|
||||||
NR_UE_PRACH *prach_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
NR_UE_PRACH *prach_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
||||||
NR_UE_CSI_IM *csiim_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
NR_UE_CSI_IM *csiim_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
||||||
NR_UE_CSI_RS *csirs_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
|
||||||
NR_UE_SRS *srs_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
NR_UE_SRS *srs_vars[NUMBER_OF_CONNECTED_gNB_MAX];
|
||||||
NR_UE_PRS *prs_vars[NR_MAX_PRS_COMB_SIZE];
|
NR_UE_PRS *prs_vars[NR_MAX_PRS_COMB_SIZE];
|
||||||
uint8_t prs_active_gNBs;
|
uint8_t prs_active_gNBs;
|
||||||
@@ -603,7 +602,7 @@ typedef struct nr_phy_data_s {
|
|||||||
|
|
||||||
// Sidelink Rx action decided by MAC
|
// Sidelink Rx action decided by MAC
|
||||||
sl_nr_rx_config_type_enum_t sl_rx_action;
|
sl_nr_rx_config_type_enum_t sl_rx_action;
|
||||||
|
NR_UE_CSI_RS csirs_vars;
|
||||||
} nr_phy_data_t;
|
} nr_phy_data_t;
|
||||||
|
|
||||||
enum stream_status_e { STREAM_STATUS_UNSYNC, STREAM_STATUS_SYNCING, STREAM_STATUS_SYNCED};
|
enum stream_status_e { STREAM_STATUS_UNSYNC, STREAM_STATUS_SYNCING, STREAM_STATUS_SYNCED};
|
||||||
|
|||||||
@@ -155,7 +155,8 @@ void nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
|
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
|
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP],
|
||||||
|
fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu);
|
||||||
|
|
||||||
int psbch_pscch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data);
|
int psbch_pscch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data);
|
||||||
void phy_procedures_nrUE_SL_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data);
|
void phy_procedures_nrUE_SL_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data);
|
||||||
|
|||||||
@@ -424,8 +424,8 @@ static void nr_ue_scheduled_response_dl(NR_UE_MAC_INST_t *mac,
|
|||||||
phy->csiim_vars[0]->active = true;
|
phy->csiim_vars[0]->active = true;
|
||||||
break;
|
break;
|
||||||
case FAPI_NR_DL_CONFIG_TYPE_CSI_RS:
|
case FAPI_NR_DL_CONFIG_TYPE_CSI_RS:
|
||||||
phy->csirs_vars[0]->csirs_config_pdu = pdu->csirs_config_pdu.csirs_config_rel15;
|
phy_data->csirs_vars.csirs_config_pdu = pdu->csirs_config_pdu.csirs_config_rel15;
|
||||||
phy->csirs_vars[0]->active = true;
|
phy_data->csirs_vars.active = true;
|
||||||
break;
|
break;
|
||||||
case FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH: {
|
case FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH: {
|
||||||
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu = &pdu->dlsch_config_pdu.dlsch_config_rel15;
|
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu = &pdu->dlsch_config_pdu.dlsch_config_rel15;
|
||||||
|
|||||||
@@ -1071,16 +1071,16 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// do procedures for CSI-RS
|
// do procedures for CSI-RS
|
||||||
if ((ue->csirs_vars[gNB_id]) && (ue->csirs_vars[gNB_id]->active == 1)) {
|
if (phy_data->csirs_vars.active == 1) {
|
||||||
for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) {
|
for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) {
|
||||||
if(is_csi_rs_in_symbol(ue->csirs_vars[gNB_id]->csirs_config_pdu, symb)) {
|
if(is_csi_rs_in_symbol(phy_data->csirs_vars.csirs_config_pdu, symb)) {
|
||||||
if (!slot_fep_map[symb]) {
|
if (!slot_fep_map[symb]) {
|
||||||
nr_slot_fep(ue, &ue->frame_parms, proc->nr_slot_rx, symb, rxdataF, link_type_dl, 0, ue->common_vars.rxdata);
|
nr_slot_fep(ue, &ue->frame_parms, proc->nr_slot_rx, symb, rxdataF, link_type_dl, 0, ue->common_vars.rxdata);
|
||||||
slot_fep_map[symb] = true;
|
slot_fep_map[symb] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nr_ue_csi_rs_procedures(ue, proc, rxdataF);
|
nr_ue_csi_rs_procedures(ue, proc, rxdataF, &phy_data->csirs_vars.csirs_config_pdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dlsch[0].active) {
|
if (dlsch[0].active) {
|
||||||
|
|||||||
Reference in New Issue
Block a user