implement clib_smp_pause() for arm and aarch64 platform 20/9820/3
authorKevin Wang <kevin.wang@arm.com>
Fri, 8 Dec 2017 05:43:27 +0000 (13:43 +0800)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 15 Dec 2017 10:04:40 +0000 (10:04 +0000)
Change-Id: Ic9c1c70e06b953538ed43fc91ed26b6be82ce812
Signed-off-by: Kevin Wang <kevin.wang@arm.com>
src/vppinfra/smp.h
src/vppinfra/timer.c

index 7e703b3..e4ab66a 100644 (file)
@@ -47,6 +47,8 @@
 
 #if defined (i386) || defined (__x86_64__)
 #define clib_smp_pause() do { asm volatile ("pause"); } while (0)
+#elif defined (__aarch64__) || defined (__arm__)
+#define clib_smp_pause() do { asm volatile ("isb" ::: "memory"); } while (0)
 #endif
 
 #ifndef clib_smp_pause
index 0221cb7..85149dc 100644 (file)
@@ -41,6 +41,7 @@
 #include <sys/param.h>
 
 #include <vppinfra/vec.h>
+#include <vppinfra/smp.h>
 #include <vppinfra/time.h>
 #include <vppinfra/timer.h>
 #include <vppinfra/error.h>
@@ -283,7 +284,7 @@ bar_t b = { limit:10 };
     timer_call (bar, (any) & b, random_f64 ());
 
   while (vec_len (timers) > 0)
-    sched_yield ();
+    os_sched_yield ();
 
   if (vec_len (foos) > 0)
     {