From eaa83242a8de21ceac762a294b8e1dab7cfd1aed Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 21 May 2019 07:14:56 +0200 Subject: [PATCH] first try to add a function to the usrp_lib to set the thread priority --- targets/ARCH/COMMON/common_lib.c | 6 ++++-- targets/ARCH/COMMON/common_lib.h | 4 ++++ targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 5 +++++ targets/RT/USER/nr-ru.c | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index bcfa08c7eb..c54ede53ec 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -98,7 +98,7 @@ typedef int(*devfunc_t)(openair0_device *, openair0_config_t *, eth_params_t *); /* look for the interface library and load it */ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * cfg, uint8_t flag) { - loader_shlibfunc_t shlib_fdesc[1]; + loader_shlibfunc_t shlib_fdesc[2]; int ret=0; char *libname; if (flag == RAU_LOCAL_RADIO_HEAD) { @@ -107,15 +107,17 @@ 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"; } - ret=load_module_shlib(libname,shlib_fdesc,1,NULL); + ret=load_module_shlib(libname,shlib_fdesc,2,NULL); if (ret < 0) { 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; } diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 5530a68f9b..d8e8cd5d6f 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -445,6 +445,10 @@ int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *open #define gettid() syscall(__NR_gettid) /*@}*/ + void uhd_set_thread_priority(void); + typedef void(*set_prio_func_t)(void); + set_prio_func_t uhd_set_thread_priority_fun; + #ifdef __cplusplus } #endif diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 819a8d0c5b..c66364c41a 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1461,5 +1461,10 @@ extern "C" { #endif return 0; } + + void uhd_set_thread_priority(void) { + uhd::set_thread_priority_safe(1.0); + } + } /*@}*/ diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index bad5adf9e6..e7566b673f 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -1285,6 +1285,7 @@ static void* ru_thread_tx( void* param ) { wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx"); + uhd_set_thread_priority_fun(); while (!oai_exit) {