diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 2460081981..71e686a705 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -1000,7 +1000,7 @@ void *UE_thread(void *arg) int ret = UE_dl_preprocessing(UE, &curMsgRx->proc, tx_wait_for_dlsch, &curMsgRx->phy_data, &stats_printed); if (ret != INT_MAX) shiftForNextFrame = ret; - pushTpool(&(get_nrUE_params()->Tpool), newRx); + pushNotifiedFIFO(&UE->dl_actors[curMsg.proc.nr_slot_rx % NUM_DL_ACTORS].fifo, newRx); // Start TX slot processing here. It runs in parallel with RX slot processing // in current code, DURATION_RX_TO_TX constant is the limit to get UL data to encode from a RX slot diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 1389d610ac..07d3e532f5 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -497,6 +497,9 @@ int main(int argc, char **argv) UE[CC_id]->sl_mode = get_softmodem_params()->sl_mode; init_actor(&UE[CC_id]->sync_actor, "SYNC_", -1); + for (int i = 0; i < NUM_DL_ACTORS; i++) { + init_actor(&UE[CC_id]->dl_actors[i], "DL_", -1); + } init_nr_ue_vars(UE[CC_id], inst); if (UE[CC_id]->sl_mode) { diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 99b24f6fc0..c048737af0 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -83,6 +83,7 @@ #define bzero(s,n) (memset((s),0,(n))) /// suppress compiler warning for unused arguments #define UNUSED(x) (void)x; +#define NUM_DL_ACTORS 2 #include "impl_defs_top.h" #include "impl_defs_nr.h" @@ -531,6 +532,7 @@ typedef struct PHY_VARS_NR_UE_s { sl_nr_sidelink_mode_t sl_mode; sl_nr_ue_phy_params_t SL_UE_PHY_PARAMS; Actor_t sync_actor; + Actor_t dl_actors[NUM_DL_ACTORS]; } PHY_VARS_NR_UE; typedef struct {