From 3c8a4c871bb8227b5017e756f64b80d4ecf36ae2 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sun, 17 Feb 2019 22:26:28 +0100 Subject: [PATCH] robustified fronthaul a bit for out-of-order packets (PULTICK during PULFFT stream) --- targets/RT/USER/lte-enb.c | 12 +++++++++--- targets/RT/USER/lte-ru.c | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index a1b3899196..0913655de8 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -606,10 +606,16 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) { return(-1); } if (L1_proc->instance_cnt == 0) { - LOG_E(PHY,"Frame %d, subframe %d: RXTX0 thread busy, dropping\n",ru_proc->frame_rx,ru_proc->subframe_rx); - abort(); + pthread_mutex_unlock(&L1_proc->mutex); + usleep(200); + if (pthread_mutex_lock(&L1_proc->mutex) != 0) { + LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RXTX thread %d (IC %d)\n", L1_proc->subframe_rx&1,L1_proc->instance_cnt ); + exit_fun( "error locking mutex_rxtx" ); + return(-1); + } + if (L1_proc->instance_cnt == 0) LOG_E(PHY,"Frame %d, subframe %d: RXTX0 thread busy, dropping\n",ru_proc->frame_rx,ru_proc->subframe_rx); } - else { + if (L1_proc->instance_cnt == -1) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_IC,L1_proc->instance_cnt); ++L1_proc->instance_cnt; VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_IC,L1_proc->instance_cnt); diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 2e3da52fa3..666d5a7d42 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -240,9 +240,11 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) { else if (packet_type == IF4p5_PULTICK) { proc->symbol_mask[sf] = symbol_mask_full; pultick_received++; +/* if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx); else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx); - else break; + else break; */ + if (f==*frame || sf==*subframe) break; } else if (packet_type == IF4p5_PRACH) { // nothing in RU for RAU }