From c8bff02efaf53d88028eb52c3f95f2127b53f038 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Wed, 27 Jun 2018 17:39:43 +0900 Subject: [PATCH 1/9] fix: assertion occurs in nack_or_dtx_reported() function when RRCConnectionSetup moves. --- openair2/LAYER2/MAC/eNB_scheduler_primitives.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 1ac7003723..9d5bdf90ef 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -4351,8 +4351,11 @@ static int nack_or_dtx_reported( int i; if (cc->tdd_Config) { - AssertFatal(0==1, "TDD to be done. FAPI structures (see nfapi_harq_indication_tdd_rel13_t) are not clean. To be cleaned as well?\n"); - abort(); + nfapi_harq_indication_tdd_rel13_t *hi = &harq_pdu->harq_indication_tdd_rel13; + for (i = 0; i < hi->number_of_ack_nack; hi++) + if (hi->harq_data[0].bundling.value_0 != 1) //only bundling is used for tdd for now + return 1; + return 0; } else { nfapi_harq_indication_fdd_rel13_t *hi = &harq_pdu->harq_indication_fdd_rel13; for (i = 0; i < hi->number_of_ack_nack; hi++) From fa56147570c4a96e615c4db219747d403b29f713 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Thu, 28 Jun 2018 21:06:31 +0900 Subject: [PATCH 2/9] fix some warnings. --- openair2/UTIL/LOG/log.c | 85 +++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index 48e606522c..6373603acf 100644 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -516,9 +516,9 @@ int logInit (void) } extern int oai_exit; -void * log_mem_write(void) +void *log_mem_write(void *arg) { - int *fp; + int fp; char f_name[1024]; struct timespec slp_tm; slp_tm.tv_sec = 0; @@ -540,7 +540,9 @@ void * log_mem_write(void) } snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); fp=open(f_name, O_WRONLY | O_CREAT, 0666); - write(fp, log_mem_d[log_mem_write_side].buf_p, log_mem_d[log_mem_write_side].buf_index); + if(write(fp, log_mem_d[log_mem_write_side].buf_p, log_mem_d[log_mem_write_side].buf_index) < log_mem_d[log_mem_write_side].buf_index) { + // TODO assert ? + } close(fp); log_mem_file_cnt++; log_mem_d[log_mem_write_side].buf_index=0; @@ -550,6 +552,7 @@ void * log_mem_write(void) nanosleep(&slp_tm,NULL); } } + return 0; } int logInit_log_mem (void) @@ -567,7 +570,7 @@ int logInit_log_mem (void) if ((pthread_mutex_init (&log_mem_lock, NULL) != 0) || (pthread_cond_init (&log_mem_notify, NULL) != 0)) { log_mem_d[1].enable_flag=0; - return; + return -1; } pthread_create(&log_mem_thread, NULL, log_mem_write, (void*)NULL); }else{ @@ -1488,41 +1491,42 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, va_end(args); // OAI printf compatibility - if ((g_log->onlinelog == 1) && (level != LOG_FILE)) - if(log_mem_flag==1){ - if(log_mem_d[log_mem_side].enable_flag==1){ - temp_index=log_mem_d[log_mem_side].buf_index; - if(temp_index+len+1 < LOG_MEM_SIZE){ - log_mem_d[log_mem_side].buf_index+=len; - memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); - }else{ - log_mem_d[log_mem_side].enable_flag=0; - if(log_mem_d[1-log_mem_side].enable_flag==1){ - temp_index=log_mem_d[1-log_mem_side].buf_index; - if(temp_index+len+1 < LOG_MEM_SIZE){ - log_mem_d[1-log_mem_side].buf_index+=len; - log_mem_side=1-log_mem_side; - memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); - /* write down !*/ - if (pthread_mutex_lock(&log_mem_lock) != 0) { - return; - } - if(log_mem_write_flag==0){ - log_mem_write_side=1-log_mem_side; - if(pthread_cond_signal(&log_mem_notify) != 0) { + if ((g_log->onlinelog == 1) && (level != LOG_FILE)) { + if(log_mem_flag==1){ + if(log_mem_d[log_mem_side].enable_flag==1){ + temp_index=log_mem_d[log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[log_mem_side].buf_index+=len; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + }else{ + log_mem_d[log_mem_side].enable_flag=0; + if(log_mem_d[1-log_mem_side].enable_flag==1){ + temp_index=log_mem_d[1-log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[1-log_mem_side].buf_index+=len; + log_mem_side=1-log_mem_side; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + /* write down !*/ + if (pthread_mutex_lock(&log_mem_lock) != 0) { + return; } + if(log_mem_write_flag==0){ + log_mem_write_side=1-log_mem_side; + if(pthread_cond_signal(&log_mem_notify) != 0) { + } + } + if(pthread_mutex_unlock(&log_mem_lock) != 0) { + return; + } + }else{ + log_mem_d[1-log_mem_side].enable_flag=0; } - if(pthread_mutex_unlock(&log_mem_lock) != 0) { - return; - } - }else{ - log_mem_d[1-log_mem_side].enable_flag=0; } } } + }else{ + fwrite(log_buffer, len, 1, stdout); } - }else{ - fwrite(log_buffer, len, 1, stdout); } if (g_log->syslog) { @@ -1852,8 +1856,7 @@ void log_set_instance_type (log_instance_type_t instance) #endif void output_log_mem(void){ - int cnt,cnt2; - int *fp; + int fp; char f_name[1024]; if(log_mem_flag==1){ @@ -1866,18 +1869,24 @@ void output_log_mem(void){ if(log_mem_multi==1){ snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); fp=open(f_name, O_WRONLY | O_CREAT, 0666); - write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index); + if(write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index) < log_mem_d[0].buf_index) { + // TODO assert ? + } close(fp); free(log_mem_d[0].buf_p); snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); fp=open(f_name, O_WRONLY | O_CREAT, 0666); - write(fp, log_mem_d[1].buf_p, log_mem_d[1].buf_index); + if(write(fp, log_mem_d[1].buf_p, log_mem_d[1].buf_index) < log_mem_d[1].buf_index) { + // TODO assert ? + } close(fp); free(log_mem_d[1].buf_p); }else{ fp=open(log_mem_filename, O_WRONLY | O_CREAT, 0666); - write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index); + if(write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index) < log_mem_d[0].buf_index) { + // TODO assert ? + } close(fp); free(log_mem_d[0].buf_p); } From 9696e229c1d3750ab0999c81ecd7dca300a284d7 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Fri, 29 Jun 2018 17:45:15 +0900 Subject: [PATCH 3/9] fix: round is not match between layer1 and layer2. --- openair2/LAYER2/MAC/eNB_scheduler_primitives.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 9d5bdf90ef..7b86a405e7 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -3432,9 +3432,12 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, sched_ctl->tbcnt[CC_idP][harq_pid] = 0; LOG_D(MAC,"frame %d subframe %d Acking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]); }else{ //nack - if( sched_ctl->round[CC_idP][harq_pid]<8) - sched_ctl->round[CC_idP][harq_pid]++; - LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]); + sched_ctl->round[CC_idP][harq_pid]++; // increment round + if (sched_ctl->round[CC_idP][harq_pid] == 4) { + sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process + sched_ctl->tbcnt[CC_idP][harq_pid] = 0; + } + LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]); if(sched_ctl->round[CC_idP][harq_pid] == 8){ for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) { if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){ From ab451412de5325b28fd0084849d04828068b020e Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Mon, 2 Jul 2018 19:15:06 +0900 Subject: [PATCH 4/9] fix: pdcp_update_stats() function stalls when eNB is compiled with "--mu" options. --- openair2/ENB_APP/flexran_agent_defs.h | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 2 +- openair2/RRC/LTE/rrc_eNB_S1AP.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/ENB_APP/flexran_agent_defs.h b/openair2/ENB_APP/flexran_agent_defs.h index aa71dd33fa..57265b38b7 100644 --- a/openair2/ENB_APP/flexran_agent_defs.h +++ b/openair2/ENB_APP/flexran_agent_defs.h @@ -102,7 +102,7 @@ typedef enum { } ran_name_t; typedef uint8_t xid_t; -typedef uint8_t mid_t; // module or enb id +typedef uint16_t mid_t; // module or enb id typedef uint8_t lcid_t; typedef int32_t err_code_t; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index ccee62df97..bd1ec2880b 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -866,7 +866,7 @@ pdcp_data_ind( void pdcp_update_stats(const protocol_ctxt_t* const ctxt_pP){ - uint8_t pdcp_uid = 0; + uint16_t pdcp_uid = 0; uint8_t rb_id = 0; // these stats are measured for both eNB and UE on per seond basis diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index 59a2c35294..ebac3c4ee9 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -1994,7 +1994,7 @@ int rrc_eNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance /* insert data to UE_PF_PO or update data in UE_PF_PO */ pthread_mutex_lock(&ue_pf_po_mutex); - uint8_t i = 0; + uint16_t i = 0; for (i = 0; i < MAX_MOBILES_PER_ENB; i++) { if ((UE_PF_PO[CC_id][i].enable_flag == TRUE && UE_PF_PO[CC_id][i].ue_index_value == (uint16_t)(S1AP_PAGING_IND(msg_p).ue_index_value)) || (UE_PF_PO[CC_id][i].enable_flag != TRUE)) { From e5d8179b763dc452293528b3e8e651e84d7587e0 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 27 Jun 2018 18:01:51 +0200 Subject: [PATCH 5/9] hotfix: clear memory after allocation (cherry picked from commit 71dacd442d967fd901a8dcbc81e43417907428a3) --- openair2/LAYER2/MAC/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index d32da8ac72..30ee279c94 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -62,6 +62,7 @@ void mac_top_init_eNB(void) RC.mac = (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *)); + bzero(RC.mac, RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *)); } AssertFatal(RC.mac != NULL, "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", From 4f52f5a74873202d6c0bff648af58ff4b0f5d2e4 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Thu, 5 Jul 2018 10:13:17 +0900 Subject: [PATCH 6/9] fix: sync_cond is posted before eNB_thread_rxtx thread is not activated. --- targets/RT/USER/lte-softmodem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 73f5797327..eca78791d1 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1245,6 +1245,7 @@ int main( int argc, char **argv ) // connect the TX/RX buffers + sleep(1); /* wait for thread activation */ printf("Sending sync to all threads\n"); From eb030b6a2977d105aadd7aa6b5337f49676295a6 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Fri, 13 Jul 2018 14:53:14 +0900 Subject: [PATCH 7/9] fix: compile error using "--mu" build option. --- openair2/UTIL/LOG/log.c | 61 ++++++++++++++++++++-------------------- targets/RT/USER/lte-ru.c | 5 +++- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index 591cc1618d..cd7bfc0d62 100644 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -669,42 +669,43 @@ void nfapi_log(const char *file, const char *func, int line, int comp, int level va_end(args); // OAI printf compatibility - if ((g_log->onlinelog == 1) && (level != LOG_FILE)) - if(log_mem_flag==1){ - if(log_mem_d[log_mem_side].enable_flag==1){ - int temp_index; - temp_index=log_mem_d[log_mem_side].buf_index; - if(temp_index+len+1 < LOG_MEM_SIZE){ - log_mem_d[log_mem_side].buf_index+=len; - memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); - }else{ - log_mem_d[log_mem_side].enable_flag=0; - if(log_mem_d[1-log_mem_side].enable_flag==1){ - temp_index=log_mem_d[1-log_mem_side].buf_index; - if(temp_index+len+1 < LOG_MEM_SIZE){ - log_mem_d[1-log_mem_side].buf_index+=len; - log_mem_side=1-log_mem_side; - memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); - /* write down !*/ - if (pthread_mutex_lock(&log_mem_lock) != 0) { - return; - } - if(log_mem_write_flag==0){ - log_mem_write_side=1-log_mem_side; - if(pthread_cond_signal(&log_mem_notify) != 0) { + if ((g_log->onlinelog == 1) && (level != LOG_FILE)) { + if(log_mem_flag==1){ + if(log_mem_d[log_mem_side].enable_flag==1){ + int temp_index; + temp_index=log_mem_d[log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[log_mem_side].buf_index+=len; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + }else{ + log_mem_d[log_mem_side].enable_flag=0; + if(log_mem_d[1-log_mem_side].enable_flag==1){ + temp_index=log_mem_d[1-log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[1-log_mem_side].buf_index+=len; + log_mem_side=1-log_mem_side; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + /* write down !*/ + if (pthread_mutex_lock(&log_mem_lock) != 0) { + return; } + if(log_mem_write_flag==0){ + log_mem_write_side=1-log_mem_side; + if(pthread_cond_signal(&log_mem_notify) != 0) { + } + } + if(pthread_mutex_unlock(&log_mem_lock) != 0) { + return; + } + }else{ + log_mem_d[1-log_mem_side].enable_flag=0; } - if(pthread_mutex_unlock(&log_mem_lock) != 0) { - return; - } - }else{ - log_mem_d[1-log_mem_side].enable_flag=0; } } } + }else{ + fwrite(log_buffer, len, 1, stdout); } - }else{ - fwrite(log_buffer, len, 1, stdout); } if (g_log->syslog) { diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 5d60928cd1..79a9ac0306 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -2770,7 +2770,10 @@ void init_RU(char *rf_config_file) { void stop_ru(RU_t *ru) { - + +#if defined(PRE_SCD_THREAD) || defined(PHY_TX_THREAD) + int *status; +#endif printf("Stopping RU %p processing threads\n",(void*)ru); #if defined(PRE_SCD_THREAD) if(ru){ From 5198703a6fa03399c7b5d0eea13866089e380a22 Mon Sep 17 00:00:00 2001 From: Haruki NAOI Date: Tue, 17 Jul 2018 21:52:51 +0900 Subject: [PATCH 8/9] fix: Error occurs in pdcch_alloc2ul_frame function. --- openair1/PHY/LTE_TRANSPORT/dci_tools_common.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c index 842fb376a0..7960331c56 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c @@ -1099,13 +1099,9 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui uint32_t ul_frame; if ((frame_parms->frame_type == TDD) && - (frame_parms->tdd_config == 1)) { - if ((n==1)||(n==6)||(n==4)||(n==9)) { // tdd_config 0,1 SF 1,5 + (frame_parms->tdd_config == 1) && + ((n==1)||(n==6)||(n==4)||(n==9))) { // tdd_config 0,1 SF 1,5 ul_frame = (frame + (n < 5 ? 0 : 1)); - } else { - LOG_E(PHY, "frame %d subframe %d: PUSCH frame = ?\n", frame, n); - ul_frame = 0; - } } else if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config == 6) && ((n==0)||(n==1)||(n==5)||(n==6))) From 759bd813acab3c7845f64f1da3109c8333e845de Mon Sep 17 00:00:00 2001 From: Rajeev Gangula Date: Fri, 20 Jul 2018 10:04:00 +0200 Subject: [PATCH 9/9] Issue with bad EVM in SF 0 and %. --- openair1/SCHED/ru_procedures.c | 40 ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index 17b12e7622..6d0ceedf4f 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -343,25 +343,27 @@ void feptx_ofdm(RU_t *ru) { } } */ - if ((fp->frame_type == TDD) && - ((fp->tdd_config==0) || - (fp->tdd_config==1) || - (fp->tdd_config==2) || - (fp->tdd_config==6)) && - ((subframe==0) || (subframe==5))) { - // turn on tx switch N_TA_offset before - //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset); - for (i=0; iN_TA_offset; i++) { - tx_offset = (int)slot_offset+i-ru->N_TA_offset/2; - if (tx_offset<0) - tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; - - if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti)) - tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; - - ru->common.txdata[aa][tx_offset] = 0x00000000; - } - } + +// if ((fp->frame_type == TDD) && +// ((fp->tdd_config==0) || +// (fp->tdd_config==1) || +// (fp->tdd_config==2) || +// (fp->tdd_config==6)) && +// ((subframe==0) || (subframe==5))) { +// // turn on tx switch N_TA_offset before +// //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset); +// for (i=0; iN_TA_offset; i++) { +// tx_offset = (int)slot_offset+i-ru->N_TA_offset/2; +// if (tx_offset<0) +// tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; +// +// if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti)) +// tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; +// +// ru->common.txdata[aa][tx_offset] = 0x00000000; +// } +// } + stop_meas(&ru->ofdm_mod_stats); LOG_D(PHY,"feptx_ofdm (TXPATH): frame %d, subframe %d: txp (time %p) %d dB, txp (freq) %d dB\n", ru->proc.frame_tx,subframe,txdata,dB_fixed(signal_energy((int32_t*)txdata,fp->samples_per_tti)),