From 29bfcdb371fc487ef0ff9dc06e0612c79421b6a9 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 2 Jul 2019 14:36:35 +0200 Subject: [PATCH 1/6] modified uhd set priority to USRP only --- executables/nr-ru.c | 4 ++-- targets/ARCH/COMMON/common_lib.c | 14 ++++++-------- targets/ARCH/COMMON/common_lib.h | 8 +++++--- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 10 +++++++--- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/executables/nr-ru.c b/executables/nr-ru.c index f39449ddb6..d21afd869a 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -1209,9 +1209,9 @@ static void *ru_thread_tx( void *param ) { int ret; - if(ru->if_south == LOCAL_RF) + if(ru->rfdevice.uhd_set_thread_priority != NULL) { - //uhd_set_thread_prio(); + ru->rfdevice.uhd_set_thread_priority(); LOG_I(PHY,"set ru_thread_tx uhd priority"); } diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 7f7fe07b08..65ca8b9982 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -109,7 +109,6 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param else libname=OAI_RF_LIBNAME; shlib_fdesc[0].fname="device_init"; - //shlib_fdesc[1].fname="uhd_set_thread_priority"; } else { libname=OAI_TP_LIBNAME; shlib_fdesc[0].fname="transport_init"; @@ -119,13 +118,12 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param LOG_E(HW,"Library %s couldn't be loaded\n",libname); } else { ret=((devfunc_t)shlib_fdesc[0].fptr)(device,openair0_cfg,cfg); - //uhd_set_thread_priority_fun = (set_prio_func_t)shlib_fdesc[1].fptr; } return ret; } -/* -void uhd_set_thread_prio(void) { + +/*void uhd_set_thread_prio(void) { loader_shlibfunc_t shlib_fdesc[1]; int ret = 0; @@ -135,17 +133,17 @@ void uhd_set_thread_prio(void) { libname="rfsimulator"; else libname=OAI_RF_LIBNAME; - //shlib_fdesc[0].fname="uhd_set_thread_priority"; + shlib_fdesc[0].fname="uhd_set_thread_priority"; ret=load_module_shlib(libname,shlib_fdesc,1,NULL); if (ret < 0) { LOG_E(HW,"Library %s couldn't be loaded\n",libname); } else { - //(set_prio_func_t)shlib_fdesc[0].fptr(); + (set_prio_func_t)shlib_fdesc[0].fptr(); } return ret; -} -*/ +}*/ + int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) { diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index fe1099f42f..aca0bd64a2 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -387,6 +387,10 @@ struct openair0_device_t { * \param arg pointer to capabilities or configuration */ void (*configure_rru)(int idx, void *arg); + + /*! \brief set UHD thread priority + */ + void (*uhd_set_thread_priority)(void); }; /* type of device init function, implemented in shared lib */ @@ -445,9 +449,7 @@ int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *open #define gettid() syscall(__NR_gettid) /*@}*/ - void uhd_set_thread_prio(void); - typedef void(*set_prio_func_t)(void); - //set_prio_func_t uhd_set_thread_priority_fun; + #ifdef __cplusplus } diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index b9c08938e3..03f89cf612 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -907,6 +907,12 @@ int trx_usrp_reset_stats(openair0_device *device) { return(0); } +/*! \brief Set uhd priority + */ +void uhd_set_thread_priority(void) { + uhd::set_thread_priority_safe(1.0); +} + #if defined(USRP_REC_PLAY) extern "C" { /*! \brief Initializer for USRP record/playback config @@ -1044,6 +1050,7 @@ extern "C" { device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; device->openair0_cfg = openair0_cfg; + device->uhd_set_thread_priority = uhd_set_thread_priority; std::cerr << "USRP device initialized in subframes replay mode for " << u_sf_loops << " loops. Use mmap=" << use_mmap << std::endl; } else { @@ -1463,9 +1470,6 @@ extern "C" { return 0; } - void uhd_set_thread_priority(void) { - uhd::set_thread_priority_safe(1.0); - } } /*@}*/ From dda7fbd74b23cb2aeba839d2c7ef9336945f3b5a Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 2 Jul 2019 14:50:50 +0200 Subject: [PATCH 2/6] adding NULL function for priority setting for plateform other than USRP --- targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c | 1 + targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c | 1 + targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c | 1 + targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp | 1 + targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp | 1 + targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 1 + targets/ARCH/mobipass/interface.c | 1 + targets/ARCH/rfsimulator/simulator.c | 1 + targets/ARCH/tcp_bridge/tcp_bridge.c | 1 + targets/ARCH/tcp_bridge/tcp_bridge_oai.c | 1 + 10 files changed, 10 insertions(+) diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c index 75a7825669..2613babc7b 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c @@ -1124,6 +1124,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { device->trx_set_gains_func = trx_brf_set_gains; device->openair0_cfg = openair0_cfg; device->priv = (void *)brf; + device->uhd_set_thread_priority = NULL; calibrate_rf(device); diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c index 108c4ca069..1475052b16 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c @@ -401,6 +401,7 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth device->trx_stop_func = trx_eth_stop; device->trx_set_freq_func = trx_eth_set_freq; device->trx_set_gains_func = trx_eth_set_gains; + device->uhd_set_thread_priority = NULL; if (eth->flags == ETH_RAW_MODE) { device->trx_write_func = trx_eth_write_raw; diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index 7d23cdeb89..5bbe48df17 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -772,6 +772,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { device->trx_set_gains_func = trx_exmimo_set_gains; device->openair0_cfg = openair0_cfg; device->priv = (void *)exm; + device->uhd_set_thread_priority = NULL; printf("EXMIMO2: Getting addresses for memory-mapped DMA\n"); diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp index e1a1b768b2..aee30d1c77 100644 --- a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp +++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp @@ -405,6 +405,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg){ device->trx_stop_func = trx_lms_stop; device->trx_set_freq_func = trx_lms_set_freq; device->trx_set_gains_func = trx_lms_set_gains; + device->uhd_set_thread_priority = NULL; device->openair0_cfg = openair0_cfg; diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp index 6f1afe47c0..9b11415631 100644 --- a/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp +++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp @@ -706,6 +706,7 @@ int openair0_dev_init_sodera(openair0_device* device, openair0_config_t *openair device->trx_stop_func = trx_sodera_stop; device->trx_set_freq_func = trx_sodera_set_freq; device->trx_set_gains_func = trx_sodera_set_gains; + device->uhd_set_thread_priority = NULL; s->sample_rate = openair0_cfg[0].sample_rate; s->channelscount = openair0_cfg[0].rx_num_channels; diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 03f89cf612..7872ccb369 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1368,6 +1368,7 @@ extern "C" { device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; device->openair0_cfg = openair0_cfg; + device->uhd_set_thread_priority = uhd_set_thread_priority; s->sample_rate = openair0_cfg[0].sample_rate; // TODO: diff --git a/targets/ARCH/mobipass/interface.c b/targets/ARCH/mobipass/interface.c index db186a404c..6e3dc66f49 100644 --- a/targets/ARCH/mobipass/interface.c +++ b/targets/ARCH/mobipass/interface.c @@ -132,6 +132,7 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, device->trx_set_gains_func = mobipass_set_gains; device->trx_write_func = mobipass_write; device->trx_read_func = mobipass_read; + device->uhd_set_thread_priority = NULL; device->priv = mobi; diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c index 42bf766baf..3673a21c11 100644 --- a/targets/ARCH/rfsimulator/simulator.c +++ b/targets/ARCH/rfsimulator/simulator.c @@ -642,6 +642,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { device->trx_set_gains_func = rfsimulator_set_gains; device->trx_write_func = rfsimulator_write; device->trx_read_func = rfsimulator_read; + device->uhd_set_thread_priority = NULL; /* let's pretend to be a b2x0 */ device->type = USRP_B200_DEV; device->openair0_cfg=&openair0_cfg[0]; diff --git a/targets/ARCH/tcp_bridge/tcp_bridge.c b/targets/ARCH/tcp_bridge/tcp_bridge.c index 8b287acfa1..3e2979f849 100644 --- a/targets/ARCH/tcp_bridge/tcp_bridge.c +++ b/targets/ARCH/tcp_bridge/tcp_bridge.c @@ -267,6 +267,7 @@ int device_init(openair0_device* device, openair0_config_t *openair0_cfg) device->trx_set_gains_func = tcp_bridge_set_gains; device->trx_write_func = tcp_bridge_write; device->trx_read_func = tcp_bridge_read; + device->uhd_set_thread_priority = NULL; device->priv = tcp_bridge; diff --git a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c index 153e54a64b..179c0b455e 100644 --- a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c +++ b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c @@ -313,6 +313,7 @@ int device_init(openair0_device* device, openair0_config_t *openair0_cfg) device->trx_set_freq_func = tcp_bridge_set_freq; device->trx_set_gains_func = tcp_bridge_set_gains; device->trx_write_func = tcp_bridge_write; + device->uhd_set_thread_priority = NULL; if (tcp_bridge->is_enb) { device->trx_read_func = tcp_bridge_read; From a2bf9dc9f44858a1a99dcc90653a8b217368d588 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 2 Jul 2019 15:23:25 +0200 Subject: [PATCH 3/6] modified logging for PBCH and function pointer for uhd priority fix --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 4 ++-- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index ead8e3cda5..bb114fa390 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -239,7 +239,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, uint8_t nushift; uint32_t unscrambling_mask; uint64_t a_reversed=0; - LOG_I(PHY, "PBCH generation started\n"); + LOG_D(PHY, "PBCH generation started\n"); ///Payload generation memset((void *)pbch, 0, sizeof(NR_gNB_PBCH)); pbch->pbch_a=0; @@ -267,7 +267,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, else pbch->pbch_a |= ((config->sch_config.ssb_subcarrier_offset.value>>4)&1)<<29; //MSB of k_SSB (bit index 4) - LOG_I(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); + LOG_D(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); // Payload interleaving diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 7872ccb369..03f89cf612 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1368,7 +1368,6 @@ extern "C" { device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; device->openair0_cfg = openair0_cfg; - device->uhd_set_thread_priority = uhd_set_thread_priority; s->sample_rate = openair0_cfg[0].sample_rate; // TODO: From 310359c6789cb9743467d3c78407078d4da02d03 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 3 Jul 2019 16:11:57 +0200 Subject: [PATCH 4/6] adding log for priority setting and using pipeline structure --- executables/nr-ru.c | 13 +++++++------ targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 4 +++- .../CONF/gnb.band78.tm1.106PRB.usrpx300.conf | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/executables/nr-ru.c b/executables/nr-ru.c index d21afd869a..eae005d41e 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -1208,16 +1208,17 @@ static void *ru_thread_tx( void *param ) { int i = 0; int ret; - - if(ru->rfdevice.uhd_set_thread_priority != NULL) - { - ru->rfdevice.uhd_set_thread_priority(); - LOG_I(PHY,"set ru_thread_tx uhd priority"); - } wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx"); printf( "ru_thread_tx ready\n"); + + if(ru->rfdevice.uhd_set_thread_priority != NULL) + { + LOG_I(PHY,"set ru_thread_tx uhd priority \n"); + ru->rfdevice.uhd_set_thread_priority(); + } + while (!oai_exit) { if (oai_exit) break; diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 03f89cf612..ec62047e6c 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -909,7 +909,8 @@ int trx_usrp_reset_stats(openair0_device *device) { /*! \brief Set uhd priority */ -void uhd_set_thread_priority(void) { +static void uhd_set_thread_priority(void) { + //std::cout << "~~~~~~~~~~priority setting for USRP" << std::endl; uhd::set_thread_priority_safe(1.0); } @@ -1368,6 +1369,7 @@ extern "C" { device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; device->openair0_cfg = openair0_cfg; + device->uhd_set_thread_priority = uhd_set_thread_priority; s->sample_rate = openair0_cfg[0].sample_rate; // TODO: diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf index 8b896fc58a..26f6eddf52 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf @@ -262,7 +262,7 @@ RUs = ( THREAD_STRUCT = ( { #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" - parallel_config = "PARALLEL_SINGLE_THREAD"; + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" worker_config = "WORKER_DISABLE"; } From 7e87ce3c13c91f77cf0aeb53e4e2e991520b3096 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 3 Jul 2019 16:40:52 +0200 Subject: [PATCH 5/6] markout code removal --- targets/ARCH/COMMON/common_lib.c | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 65ca8b9982..2e0107916b 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -123,26 +123,6 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param } -/*void uhd_set_thread_prio(void) { - - loader_shlibfunc_t shlib_fdesc[1]; - int ret = 0; - - char *libname; - if (getenv("RFSIMULATOR") != NULL) - libname="rfsimulator"; - else - libname=OAI_RF_LIBNAME; - shlib_fdesc[0].fname="uhd_set_thread_priority"; - ret=load_module_shlib(libname,shlib_fdesc,1,NULL); - if (ret < 0) { - LOG_E(HW,"Library %s couldn't be loaded\n",libname); - } else { - (set_prio_func_t)shlib_fdesc[0].fptr(); - } - return ret; - -}*/ int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) { From 6dcd2ead9a05bbfce19244599cdf52660cf0500e Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 3 Jul 2019 16:43:20 +0200 Subject: [PATCH 6/6] markout code removal in usrp lib --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index ec62047e6c..bb33707872 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -910,7 +910,6 @@ int trx_usrp_reset_stats(openair0_device *device) { /*! \brief Set uhd priority */ static void uhd_set_thread_priority(void) { - //std::cout << "~~~~~~~~~~priority setting for USRP" << std::endl; uhd::set_thread_priority_safe(1.0); }