vlib api: move wrkr rpc flushing to vlib 84/40284/4
authorFlorin Coras <fcoras@cisco.com>
Fri, 2 Feb 2024 04:46:15 +0000 (20:46 -0800)
committerDave Barach <vpp@barachs.net>
Fri, 2 Feb 2024 14:44:26 +0000 (14:44 +0000)
Move vlib worker rpc flushing to main worker from memclnt api into vlib.
RPCs are no longer delivered via binary api queues

Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I5b8761a57d1f4a1f2220e860cfb2e6b980f46f6d

src/vlib/main.c
src/vlib/threads.c
src/vlib/threads.h
src/vlibmemory/api.h
src/vlibmemory/memclnt_api.c

index 219ed22..6d91db7 100644 (file)
@@ -1438,12 +1438,6 @@ dispatch_suspended_process (vlib_main_t * vm,
   return t;
 }
 
-void vl_api_send_pending_rpc_requests (vlib_main_t *) __attribute__ ((weak));
-void
-vl_api_send_pending_rpc_requests (vlib_main_t * vm)
-{
-}
-
 static_always_inline void
 vlib_main_or_worker_loop (vlib_main_t * vm, int is_main)
 {
@@ -1506,7 +1500,7 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main)
       if (PREDICT_FALSE (_vec_len (vm->pending_rpc_requests) > 0))
        {
          if (!is_main)
-           vl_api_send_pending_rpc_requests (vm);
+           vlib_worker_flush_pending_rpc_requests (vm);
        }
 
       if (!is_main)
index 7e6ac25..b675b88 100644 (file)
@@ -1586,6 +1586,19 @@ vlib_worker_wait_one_loop (void)
   return;
 }
 
+void
+vlib_worker_flush_pending_rpc_requests (vlib_main_t *vm)
+{
+  vlib_main_t *vm_global = vlib_get_first_main ();
+
+  ASSERT (vm != vm_global);
+
+  clib_spinlock_lock_if_init (&vm_global->pending_rpc_lock);
+  vec_append (vm_global->pending_rpc_requests, vm->pending_rpc_requests);
+  vec_reset_length (vm->pending_rpc_requests);
+  clib_spinlock_unlock_if_init (&vm_global->pending_rpc_lock);
+}
+
 void
 vlib_worker_thread_fn (void *arg)
 {
index 636212c..e5a1f6d 100644 (file)
@@ -174,6 +174,10 @@ void vlib_worker_thread_node_refork (void);
  * Wait until each of the workers has been once around the track
  */
 void vlib_worker_wait_one_loop (void);
+/**
+ * Flush worker's pending rpc requests to main thread's rpc queue
+ */
+void vlib_worker_flush_pending_rpc_requests (vlib_main_t *vm);
 
 static_always_inline uword
 vlib_get_thread_index (void)
index 6628053..273cd2c 100644 (file)
@@ -28,7 +28,6 @@
 void vl_api_rpc_call_main_thread (void *fp, u8 * data, u32 data_length);
 void vl_api_force_rpc_call_main_thread (void *fp, u8 * data, u32 data_length);
 u16 vl_client_get_first_plugin_msg_id (const char *plugin_name);
-void vl_api_send_pending_rpc_requests (vlib_main_t * vm);
 u8 *vl_api_serialize_message_table (api_main_t * am, u8 * vector);
 
 always_inline void
index 299e8d9..d4106b1 100644 (file)
@@ -612,19 +612,6 @@ vl_api_rpc_call_reply_t_handler (vl_api_rpc_call_reply_t *mp)
   clib_warning ("unimplemented");
 }
 
-void
-vl_api_send_pending_rpc_requests (vlib_main_t *vm)
-{
-  vlib_main_t *vm_global = vlib_get_first_main ();
-
-  ASSERT (vm != vm_global);
-
-  clib_spinlock_lock_if_init (&vm_global->pending_rpc_lock);
-  vec_append (vm_global->pending_rpc_requests, vm->pending_rpc_requests);
-  vec_reset_length (vm->pending_rpc_requests);
-  clib_spinlock_unlock_if_init (&vm_global->pending_rpc_lock);
-}
-
 always_inline void
 vl_api_rpc_call_main_thread_inline (void *fp, u8 *data, u32 data_length,
                                    u8 force_rpc)