From 29bfcdb371fc487ef0ff9dc06e0612c79421b6a9 Mon Sep 17 00:00:00 2001
From: Wang Tsu-Han <wangts@eurecom.fr>
Date: Tue, 2 Jul 2019 14:36:35 +0200
Subject: [PATCH] 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 f39449ddb62..d21afd869a0 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 7f7fe07b08f..65ca8b99824 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 fe1099f42fa..aca0bd64a27 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 b9c08938e3c..03f89cf6128 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);
-  }
 
 }
 /*@}*/
-- 
GitLab