diff --git a/include/aos/aos_rpc.h b/include/aos/aos_rpc.h index 8b7ebcd..9caf240 100644 --- a/include/aos/aos_rpc.h +++ b/include/aos/aos_rpc.h @@ -34,6 +34,7 @@ enum rpc_mtype { RPC_MTYPE_PROCESS_GET_ALL_PIDS, RPC_MTYPE_ALLOCATE_PID, RPC_MTYPE_GET_BOOTINFO, + RPC_MTYPE_NOP, RPC_MTYPE_COUNT // How many message types exist }; @@ -55,6 +56,10 @@ struct aos_rpc { */ errval_t aos_rpc_init(struct aos_rpc *rpc, struct lmp_chan *chan, void *shared_mem); +/** + * @brief rpc call for RPC performance measurements (performs no action except a nop) + */ +errval_t aos_rpc_nop(struct aos_rpc *chan); /** * \brief Send a number. diff --git a/lib/aos/aos_rpc.c b/lib/aos/aos_rpc.c index 90021b4..b4f2371 100644 --- a/lib/aos/aos_rpc.c +++ b/lib/aos/aos_rpc.c @@ -95,6 +95,17 @@ static errval_t do_aos_rpc( return recv.words[0]; } +errval_t +aos_rpc_nop(struct aos_rpc *rpc) { + errval_t err; + + err = do_aos_rpc( + rpc, RPC_MTYPE_NOP, + NULL_CAP, 0, 0, 0, + NULL, NULL, NULL, NULL); + + return err; +} errval_t aos_rpc_send_number(struct aos_rpc *rpc, uintptr_t num) { diff --git a/lib/spawn/rpc_server.c b/lib/spawn/rpc_server.c index da72f28..9bed700 100644 --- a/lib/spawn/rpc_server.c +++ b/lib/spawn/rpc_server.c @@ -121,6 +121,16 @@ static void rpc_server_async_reply(struct generic_rpc_server *g_rpc, errval_t re // RPC handlers +static errval_t handle_rpc_nop( + struct generic_rpc_server *rpc, + struct capref arg_cap, size_t arg_size, uintptr_t arg0, uintptr_t arg1, + struct capref *ret_cap, size_t *ret_size, uintptr_t *ret0, uintptr_t *ret1 +) { + __asm volatile("nop"); + + return SYS_ERR_OK; +} + static errval_t handle_rpc_send_number( struct generic_rpc_server *rpc, struct capref arg_cap, size_t arg_size, uintptr_t arg0, uintptr_t arg1, @@ -442,5 +452,6 @@ rpc_handler_t rpc_handlers[RPC_MTYPE_COUNT] = { [RPC_MTYPE_PROCESS_GET_NAME] = handle_rpc_process_get_name, [RPC_MTYPE_PROCESS_GET_ALL_PIDS] = handle_rpc_process_get_all_pids, [RPC_MTYPE_ALLOCATE_PID] = handle_rpc_allocate_pid, + [RPC_MTYPE_NOP] = handle_rpc_nop, [RPC_MTYPE_GET_BOOTINFO] = handle_rpc_get_bootinfo, };