diff options
-rw-r--r-- | src/vlib/main.c | 8 | ||||
-rw-r--r-- | src/vlib/threads.c | 13 | ||||
-rw-r--r-- | src/vlib/threads.h | 4 | ||||
-rw-r--r-- | src/vlibmemory/api.h | 1 | ||||
-rw-r--r-- | src/vlibmemory/memclnt_api.c | 13 |
5 files changed, 18 insertions, 21 deletions
diff --git a/src/vlib/main.c b/src/vlib/main.c index 219ed220007..6d91db7a5b3 100644 --- a/src/vlib/main.c +++ b/src/vlib/main.c @@ -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) diff --git a/src/vlib/threads.c b/src/vlib/threads.c index 7e6ac25f109..b675b8819d2 100644 --- a/src/vlib/threads.c +++ b/src/vlib/threads.c @@ -1587,6 +1587,19 @@ vlib_worker_wait_one_loop (void) } 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) { vlib_global_main_t *vgm = vlib_get_global_main (); diff --git a/src/vlib/threads.h b/src/vlib/threads.h index 636212c939e..e5a1f6d7ec5 100644 --- a/src/vlib/threads.h +++ b/src/vlib/threads.h @@ -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) diff --git a/src/vlibmemory/api.h b/src/vlibmemory/api.h index 662805373ba..273cd2cee10 100644 --- a/src/vlibmemory/api.h +++ b/src/vlibmemory/api.h @@ -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 diff --git a/src/vlibmemory/memclnt_api.c b/src/vlibmemory/memclnt_api.c index 299e8d93f02..d4106b10559 100644 --- a/src/vlibmemory/memclnt_api.c +++ b/src/vlibmemory/memclnt_api.c @@ -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) |