From 744fe928598383dedd9e4aa663f68a2ddc52e2bd Mon Sep 17 00:00:00 2001 From: laurent <laurent.thomas@open-cells.com> Date: Tue, 28 Apr 2020 15:39:50 +0200 Subject: [PATCH] set back rrc as a separate thread, lead to create back race conditions --- common/utils/ocp_itti/intertask_interface.h | 2 +- openair2/RRC/LTE/rrc_eNB.c | 15 ++++++--------- targets/COMMON/create_tasks.c | 6 +++--- targets/RT/USER/lte-softmodem.c | 9 ++++++--- targets/RT/USER/lte-uesoftmodem.c | 6 ------ 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h index 265a57ca637..ed4192eed67 100644 --- a/common/utils/ocp_itti/intertask_interface.h +++ b/common/utils/ocp_itti/intertask_interface.h @@ -288,7 +288,7 @@ void * rrc_enb_process_msg(void*); TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, rrc_enb_process_msg,NULL)\ + TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)\ TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL,NULL)\ TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 9cca00ca2ec..181346a0149 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -8884,29 +8884,26 @@ void *rrc_enb_process_itti_msg(void *notUsed) { return NULL; } -// as there are race conditions, no rrc thread //----------------------------------------------------------------------------- void * -rrc_enb_process_msg( +rrc_enb_task( void *args_p ) //----------------------------------------------------------------------------- { + rrc_enb_init(); + itti_mark_task_ready(TASK_RRC_ENB); + LOG_I(RRC,"Entering main loop of RRC message task\n"); - //while (1) { - //(void) rrc_enb_process_itti_msg(NULL); - //} - - //while (1) { + while (1) { (void) rrc_enb_process_itti_msg(NULL); { //extern volatile int go_nr; void rrc_go_nr(void); //if (go_nr) rrc_go_nr(); } - //} -return NULL; + } } /*------------------------------------------------------------------------------*/ diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index 10691d2db8c..4d57ab4e166 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -56,9 +56,9 @@ int create_tasks(uint32_t enb_nb) { rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL); AssertFatal(rc >= 0, "Create task for eNB APP failed\n"); - // No more rrc thread, as many race conditions are hidden behind - rrc_enb_init(); - itti_mark_task_ready(TASK_RRC_ENB); + LOG_I(RRC,"Creating RRC eNB Task\n"); + rc = itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL); + AssertFatal(rc >= 0, "Create task for RRC eNB failed\n"); if (EPC_MODE_ENABLED && ! ( split73==SPLIT73_DU ) ) { rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index f5db3d3c5a1..d8c5e255939 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -446,9 +446,12 @@ int restart_L1L2(module_id_t enb_id) { init_UE_info(&RC.mac[enb_id]->UE_info); LOG_I(ENB_APP, "attempting to create ITTI tasks\n"); - // No more rrc thread, as many race conditions are hidden behind - rrc_enb_init(); - itti_mark_task_ready(TASK_RRC_ENB); + if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) { + LOG_E(RRC, "Create task for RRC eNB failed\n"); + return -1; + } else { + LOG_I(RRC, "Re-created task for RRC eNB successfully\n"); + } /* pass a reconfiguration request which will configure everything down to * RC.eNB[i][j]->frame_parms, too */ diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 395e73bb662..2c9271888bd 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -541,12 +541,6 @@ void init_pdcp(void) { pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind); } -// Stupid function addition because UE itti messages queues definition is common with eNB -void *rrc_enb_process_msg(void *notUsed) { -AssertFatal(false,""); - return NULL; -} - int main( int argc, char **argv ) { int CC_id; uint8_t abstraction_flag=0; -- GitLab