From 6e5d7cdde79ab43ca6346512f3cd2b8e3488be76 Mon Sep 17 00:00:00 2001
From: Rohit Gupta <rohit.gupta@eurecom.fr>
Date: Tue, 12 Apr 2016 12:54:15 +0200
Subject: [PATCH] disable CPU affinity for UE and also for case when MAX_CPUS
 <=2

---
 targets/RT/USER/lte-softmodem.c | 65 ++++++++++++++++++---------------
 1 file changed, 36 insertions(+), 29 deletions(-)

diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 583be1ccb7..641990aabd 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -3298,39 +3298,46 @@ int main( int argc, char **argv )
   }
 
 #ifndef LOWLATENCY
-  cpu_set_t cpuset;
-  int s;
-  char cpu_affinity[1024];
-
-  LOG_I(HW, "Setting the affinity of main function to CPU 0, for device library to use CPU 0 only!\n");
- 
-  CPU_ZERO(&cpuset);
-  CPU_SET(0, &cpuset);
 
-  s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
-  if (s != 0)
+  /* Currently we set affinity for UHD to CPU 0 for eNB only and only if number of CPUS >2 */
+  /* ToDo: Set CPU affinity for UE */
+  if (UE_flag == 0 && get_nprocs() > 2)
   {
-     perror( "pthread_setaffinity_np");
-     exit_fun("Error setting processor affinity");
-  }
-  /* Check the actual affinity mask assigned to the thread */
+    cpu_set_t cpuset;
+    int s;
+    char cpu_affinity[1024];
 
-  s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
-  if (s != 0)
-  {
-    perror( "pthread_getaffinity_np");
-    exit_fun("Error getting processor affinity ");
-  }
-  memset(cpu_affinity, 0 , sizeof(cpu_affinity));
-  for (int j = 0; j < CPU_SETSIZE; j++)
-  if (CPU_ISSET(j, &cpuset))
-  {  
-     char temp[1024];
-     sprintf(temp, " CPU_%d ", j);    
-     strcat(cpu_affinity, temp);
+    LOG_I(HW, "Setting the affinity of main function to CPU 0, for device library to use CPU 0 only!\n");
+ 
+    CPU_ZERO(&cpuset);
+    CPU_SET(0, &cpuset);
+
+    s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+    if (s != 0)
+    {
+      perror( "pthread_setaffinity_np");
+      exit_fun("Error setting processor affinity");
+    }
+
+    /* Check the actual affinity mask assigned to the thread */
+    s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+    if (s != 0)
+    {
+      perror( "pthread_getaffinity_np");
+      exit_fun("Error getting processor affinity ");
+    }
+    memset(cpu_affinity, 0 , sizeof(cpu_affinity));
+    for (int j = 0; j < CPU_SETSIZE; j++)
+    {
+      if (CPU_ISSET(j, &cpuset))
+      {  
+        char temp[1024];
+        sprintf(temp, " CPU_%d ", j);    
+        strcat(cpu_affinity, temp);
+      }
+    }
+    LOG_I(HW, "CPU Affinity of main() function is... %s\n", cpu_affinity);
   }
-
-  LOG_I(HW, "CPU Affinity of main() function is... %s\n", cpu_affinity);
 #endif
 
   /* device host type is set*/
-- 
GitLab