if (am->vlib_private_rps[i] == svm)
{
/* Note: account for the memfd header page */
- u64 virtual_base = svm->virtual_base - MMAP_PAGESIZE;
- u64 virtual_size = svm->virtual_size + MMAP_PAGESIZE;
+ uword virtual_base = svm->virtual_base - MMAP_PAGESIZE;
+ uword virtual_size = svm->virtual_size + MMAP_PAGESIZE;
/*
* Kill the registration pool element before we make
int i;
svm_region_t *dead_rp = (*regpp)->vlib_rp;
/* Note: account for the memfd header page */
- u64 virtual_base = dead_rp->virtual_base - MMAP_PAGESIZE;
- u64 virtual_size = dead_rp->virtual_size + MMAP_PAGESIZE;
+ uword virtual_base = dead_rp->virtual_base - MMAP_PAGESIZE;
+ uword virtual_size = dead_rp->virtual_size + MMAP_PAGESIZE;
/* For horizontal scaling, add a hash table... */
for (i = 0; i < vec_len (am->vlib_private_rps); i++)
vm->pending_rpc_requests = tmp;
clib_spinlock_unlock_if_init (&vm->pending_rpc_lock);
- for (i = 0; i < vec_len (vm->processing_rpc_requests); i++)
+ /*
+ * RPCs are used to reflect function calls to thread 0
+ * when the underlying code is not thread-safe.
+ *
+ * Grabbing the thread barrier across a set of RPCs
+ * greatly increases efficiency, and avoids
+ * running afoul of the barrier sync holddown timer.
+ * The barrier sync code supports recursive locking.
+ *
+ * We really need to rewrite RPC-based code...
+ */
+ if (PREDICT_TRUE (vec_len (vm->processing_rpc_requests)))
{
- mp = vm->processing_rpc_requests[i];
- vl_msg_api_handler_with_vm_node (am, (void *) mp, vm, node);
+ vl_msg_api_barrier_sync ();
+ for (i = 0; i < vec_len (vm->processing_rpc_requests); i++)
+ {
+ mp = vm->processing_rpc_requests[i];
+ vl_msg_api_handler_with_vm_node (am, (void *) mp, vm, node);
+ }
+ vl_msg_api_barrier_release ();
}
+
return 0;
}
{
api_main_t *am = &api_main;
svm_map_region_args_t _a, *a = &_a;
- clib_error_t *error;
u8 *remove_path1, *remove_path2;
+ void vlibsocket_reference (void);
+
+ vlibsocket_reference ();
/*
* By popular request / to avoid support fires, remove any old api segment
svm_region_init_args (a);
- error = vlib_call_init_function (vm, vlibsocket_init);
-
- return error;
+ return 0;
}
void