diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 25e058c6643686b65e0033e3e961fc2df7d6d283..551d6c0a4d1dd43ed3a0b114c8f2a11aa9a95e09 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1038,9 +1038,9 @@ static void * eNB_thread_tx(void *param) { /* This creates a 1ms reservation every 10ms period*/ attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 1 * 1000000; // each tx thread requires 1ms to finish its job - attr.sched_deadline =1 * 1000000; // each tx thread will finish within 1ms - attr.sched_period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point + attr.sched_runtime = 0.9 * 1000000; // each tx thread requires 1ms to finish its job + attr.sched_deadline = 1 * 1000000; // each tx thread will finish within 1ms + attr.sched_period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point if (sched_setattr(0, &attr, flags) < 0 ){ perror("[SCHED] eNB tx thread: sched_setattr failed\n"); @@ -1073,7 +1073,7 @@ static void * eNB_thread_tx(void *param) { if (pthread_mutex_lock(&proc->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe); - oai_exit=1; + exit_fun("nothing to add"); } else { @@ -1086,7 +1086,7 @@ static void * eNB_thread_tx(void *param) { // LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d instance_cnt_tx %d\n",proc->subframe,proc->instance_cnt_tx); if (pthread_mutex_unlock(&proc->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe); - oai_exit=1; + exit_fun("nothing to add"); } } vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),1); @@ -1192,9 +1192,9 @@ static void * eNB_thread_rx(void *param) { /* This creates a 2ms reservation every 10ms period*/ attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 1 * 2000000; // each rx thread must finish its job in the worst case in 2ms - attr.sched_deadline = 1 * 2000000; // each rx thread will finish within 2ms - attr.sched_period = 1 * 10000000; // each rx thread has a period of 10ms from the starting point + attr.sched_runtime = 0.9 * 1000000; // each rx thread must finish its job in the worst case in 2ms + attr.sched_deadline = 1 * 1000000; // each rx thread will finish within 2ms + attr.sched_period = 1 * 10000000; // each rx thread has a period of 10ms from the starting point if (sched_setattr(0, &attr, flags) < 0 ){ perror("[SCHED] eNB RX sched_setattr failed\n"); @@ -1433,6 +1433,7 @@ static void *eNB_thread(void *arg) int sf; #ifdef EXMIMO + RTIME time_in; volatile unsigned int *DAQ_MBOX = openair0_daq_cnt(); int mbox_target=0,mbox_current=0; int hw_slot,delay_cnt; @@ -1470,9 +1471,9 @@ static void *eNB_thread(void *arg) /* This creates a .5 ms reservation */ attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.5 * 1000000; + attr.sched_runtime = 0.1 * 1000000; attr.sched_deadline = 0.5 * 1000000; - attr.sched_period = 1 * 1000000; + attr.sched_period = 1.0 * 1000000; /* pin the eNB main thread to CPU0*/ /* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) { @@ -1623,7 +1624,7 @@ static void *eNB_thread(void *arg) clock_gettime(CLOCK_MONOTONIC,&trx_time1); if (rxs != samples_per_packets) - oai_exit=1; + exit_fun("problem receiving samples"); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ,0); @@ -1668,7 +1669,7 @@ static void *eNB_thread(void *arg) } else { LOG_W(PHY,"[eNB] Frame %d, eNB TX thread %d busy!! (rx_cnt %d)\n",PHY_vars_eNB_g[0][CC_id]->proc[hw_subframe].frame_tx,hw_subframe,rx_cnt); - oai_exit=1; + exit_fun("nothing to add"); } } } @@ -1738,7 +1739,7 @@ static void *eNB_thread(void *arg) } else { LOG_W(PHY,"[eNB] Frame %d, eNB TX thread %d busy!!\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_tx,sf); - oai_exit=1; + exit_fun("nothing to add"); } } #endif @@ -1758,7 +1759,7 @@ static void *eNB_thread(void *arg) } else { LOG_W(PHY,"[eNB] Frame %d, eNB RX thread %d busy!! instance_cnt %d CC_id %d\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx,sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx,CC_id); - oai_exit=1; + exit_fun("nothing to add"); } } @@ -1885,7 +1886,7 @@ static void *UE_thread_synch(void *arg) { if (pthread_mutex_lock(&UE->mutex_synch) != 0) { LOG_E(PHY,"[SCHED][UE] error locking mutex for UE initial synch thread\n"); - oai_exit=1; + exit_fun("noting to add"); } else { while (UE->instance_cnt_synch < 0) { @@ -1893,7 +1894,7 @@ static void *UE_thread_synch(void *arg) { } if (pthread_mutex_unlock(&UE->mutex_synch) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for UE Initial Synch thread\n"); - oai_exit=1; + exit_fun("nothing to add"); } } // mutex_lock @@ -2061,7 +2062,7 @@ static void *UE_thread_tx(void *arg) { if (pthread_mutex_lock(&UE->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error locking mutex for UE TX\n"); - oai_exit=1; + exit_fun("nothing to add"); } else { @@ -2070,7 +2071,7 @@ static void *UE_thread_tx(void *arg) { } if (pthread_mutex_unlock(&UE->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for UE TX\n"); - oai_exit=1; + exit_fun("nothing to add"); } } @@ -2156,7 +2157,7 @@ static void *UE_thread_rx(void *arg) { printf("UE_thread_rx: locking UE RX mutex\n"); if (pthread_mutex_lock(&UE->mutex_rx) != 0) { LOG_E(PHY,"[SCHED][eNB] error locking mutex for UE RX\n"); - oai_exit=1; + exit_fun("nothing to add"); } else { @@ -2168,7 +2169,7 @@ static void *UE_thread_rx(void *arg) { } if (pthread_mutex_unlock(&UE->mutex_rx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for UE RX\n"); - oai_exit=1; + exit_fun("nothing to add"); } for (i=0;i<2;i++) { @@ -2301,7 +2302,7 @@ static void *UE_thread(void *arg) { samples_per_packets - ((rx_cnt==0) ? rx_off_diff : 0), PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx); if (rxs != (samples_per_packets- ((rx_cnt==0) ? rx_off_diff : 0))) - oai_exit=1; + exit_fun("problem in rx"); rx_off_diff = 0; vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ,0); @@ -2342,7 +2343,7 @@ static void *UE_thread(void *arg) { // printf("UE_thread: locking UE mutex_rx\n"); if (pthread_mutex_lock(&PHY_vars_UE_g[0][0]->mutex_rx) != 0) { LOG_E(PHY,"[SCHED][UE] error locking mutex for UE RX thread\n"); - oai_exit=1; + exit_fun("nothing to add"); } else { @@ -2353,7 +2354,7 @@ static void *UE_thread(void *arg) { LOG_D(HW,"Scheduling UE RX for frame %d (hw frame %d), subframe %d (%d), mode %d\n",PHY_vars_UE_g[0][0]->frame_rx,frame,hw_subframe,PHY_vars_UE_g[0][0]->slot_rx>>1,mode); if (pthread_cond_signal(&PHY_vars_UE_g[0][0]->cond_rx) != 0) { LOG_E(PHY,"[SCHED][UE] ERROR pthread_cond_signal for UE RX thread\n"); - oai_exit=1; + exit_fun("nothing to add"); } else { // printf("UE_thread: cond_signal for RX ok (%p) @ %llu\n",(void*)&PHY_vars_UE_g[0][0]->cond_rx,rt_get_time_ns()-T0); @@ -2379,7 +2380,7 @@ static void *UE_thread(void *arg) { } else { LOG_E(PHY,"[SCHED][UE] UE RX thread busy!!\n"); - oai_exit=1; + exit_fun("nothing to add"); } } } @@ -2390,7 +2391,7 @@ static void *UE_thread(void *arg) { // Wake up initial synch thread if (pthread_mutex_lock(&PHY_vars_UE_g[0][0]->mutex_synch) != 0) { LOG_E(PHY,"[SCHED][UE] error locking mutex for UE initial synch thread\n"); - oai_exit=1; + exit_fun("nothing to add"); } else { @@ -2400,12 +2401,12 @@ static void *UE_thread(void *arg) { if (PHY_vars_UE_g[0][0]->instance_cnt_synch == 0) { if (pthread_cond_signal(&PHY_vars_UE_g[0][0]->cond_synch) != 0) { LOG_E(PHY,"[SCHED][UE] ERROR pthread_cond_signal for UE sync thread\n"); - oai_exit=1; + exit_fun("nothing to add"); } } else { LOG_E(PHY,"[SCHED][UE] UE sync thread busy!!\n"); - oai_exit=1; + exit_fun("nothing to add"); } } }