svm: harmonize ssvm names
[vpp.git] / src / svm / ssvm.h
index 09e1707..60ff3e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Cisco and/or its affiliates.
+ * Copyright (c) 2015-2019 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
 #include <vppinfra/bitmap.h>
 #include <vppinfra/fifo.h>
 #include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
 #include <vppinfra/heap.h>
 #include <vppinfra/pool.h>
 #include <vppinfra/format.h>
-#include <vppinfra/linux/syscall.h>
+#include <vppinfra/lock.h>
 
 #ifndef MMAP_PAGESIZE
 #define MMAP_PAGESIZE (clib_mem_get_page_size())
@@ -65,15 +64,15 @@ typedef struct
   void *heap;
 
   /* Segment must be mapped at this address, or no supper */
-  u64 ssvm_va;
+  uword ssvm_va;
   /* The actual mmap size */
-  u64 ssvm_size;
-  u32 master_pid;
-  u32 slave_pid;
+  uword ssvm_size;
+  u32 server_pid;
+  u32 client_pid;
   u8 *name;
   void *opaque[SSVM_N_OPAQUE];
 
-  /* Set when the master application thinks it's time to make the donuts */
+  /* Set when server init done */
   volatile u32 ready;
 
   ssvm_segment_type_t type;
@@ -82,11 +81,12 @@ typedef struct
 typedef struct
 {
   ssvm_shared_header_t *sh;
-  u64 ssvm_size;
+  uword ssvm_size;
+  uword requested_va;
   u32 my_pid;
   u8 *name;
-  uword requested_va;
-  int i_am_master;
+  u8 numa;                     /**< UNUSED: numa requested at alloc time */
+  int is_server;
 
   union
   {
@@ -104,8 +104,8 @@ ssvm_lock (ssvm_shared_header_t * h, u32 my_pid, u32 tag)
       return;
     }
 
-  while (__sync_lock_test_and_set (&h->lock, 1))
-    ;
+  while (clib_atomic_test_and_set (&h->lock))
+    CLIB_PAUSE ();
 
   h->owner_pid = my_pid;
   h->recursion_count = 1;
@@ -115,8 +115,8 @@ ssvm_lock (ssvm_shared_header_t * h, u32 my_pid, u32 tag)
 always_inline void
 ssvm_lock_non_recursive (ssvm_shared_header_t * h, u32 tag)
 {
-  while (__sync_lock_test_and_set (&h->lock, 1))
-    ;
+  while (clib_atomic_test_and_set (&h->lock))
+    CLIB_PAUSE ();
 
   h->tag = tag;
 }
@@ -128,8 +128,7 @@ ssvm_unlock (ssvm_shared_header_t * h)
     {
       h->owner_pid = 0;
       h->tag = 0;
-      CLIB_MEMORY_BARRIER ();
-      h->lock = 0;
+      clib_atomic_release (&h->lock);
     }
 }
 
@@ -137,8 +136,7 @@ always_inline void
 ssvm_unlock_non_recursive (ssvm_shared_header_t * h)
 {
   h->tag = 0;
-  CLIB_MEMORY_BARRIER ();
-  h->lock = 0;
+  clib_atomic_release (&h->lock);
 }
 
 static inline void *
@@ -169,11 +167,11 @@ ssvm_mem_alloc (ssvm_private_t * ssvm, uword size)
 
 #define foreach_ssvm_api_error                  \
 _(NO_NAME, "No shared segment name", -100)      \
-_(NO_SIZE, "Size not set (master)", -101)       \
+_(NO_SIZE, "Size not set (server)", -101)       \
 _(CREATE_FAILURE, "Create failed", -102)        \
 _(SET_SIZE, "Set size failed", -103)           \
 _(MMAP, "mmap failed", -104)                   \
-_(SLAVE_TIMEOUT, "Slave map timeout", -105)
+_(CLIENT_TIMEOUT, "Client map timeout", -105)
 
 typedef enum
 {
@@ -184,20 +182,20 @@ typedef enum
 
 #define SSVM_API_ERROR_NO_NAME (-10)
 
-int ssvm_master_init (ssvm_private_t * ssvm, ssvm_segment_type_t type);
-int ssvm_slave_init (ssvm_private_t * ssvm, ssvm_segment_type_t type);
+int ssvm_server_init (ssvm_private_t * ssvm, ssvm_segment_type_t type);
+int ssvm_client_init (ssvm_private_t * ssvm, ssvm_segment_type_t type);
 void ssvm_delete (ssvm_private_t * ssvm);
 
-int ssvm_master_init_shm (ssvm_private_t * ssvm);
-int ssvm_slave_init_shm (ssvm_private_t * ssvm);
+int ssvm_server_init_shm (ssvm_private_t * ssvm);
+int ssvm_client_init_shm (ssvm_private_t * ssvm);
 void ssvm_delete_shm (ssvm_private_t * ssvm);
 
-int ssvm_master_init_memfd (ssvm_private_t * memfd);
-int ssvm_slave_init_memfd (ssvm_private_t * memfd);
+int ssvm_server_init_memfd (ssvm_private_t * memfd);
+int ssvm_client_init_memfd (ssvm_private_t * memfd);
 void ssvm_delete_memfd (ssvm_private_t * memfd);
 
-int ssvm_master_init_private (ssvm_private_t * ssvm);
-int ssvm_slave_init_private (ssvm_private_t * ssvm);
+int ssvm_server_init_private (ssvm_private_t * ssvm);
+int ssvm_client_init_private (ssvm_private_t * ssvm);
 void ssvm_delete_private (ssvm_private_t * ssvm);
 
 ssvm_segment_type_t ssvm_type (const ssvm_private_t * ssvm);