More strict locking for aos_rpc.c

This commit is contained in:
Sparchatus 2022-04-13 10:56:55 +00:00
parent 2b04f8a82e
commit 54ff71f710

View File

@ -38,11 +38,12 @@ static errval_t do_aos_rpc(
// allocate capability if we expect one and the recv slot is empty
if (ret_cap != NULL && rpc->chan->endpoint->k.recv_cptr == 0){
lmp_chan_alloc_recv_slot(rpc->chan);
assert(rpc->chan->endpoint->k.recv_cptr != 0);
}
// Send call
while (true) {
err = lmp_chan_send4(rpc->chan, LMP_FLAG_YIELD | LMP_FLAG_SYNC, arg_cap, msg_type, arg_size, arg0, arg1);
err = lmp_chan_send4(rpc->chan, LMP_FLAG_YIELD, arg_cap, msg_type, arg_size, arg0, arg1);
if (!err_is_fail(err)) break;
if (!lmp_err_is_transient(err)) {
return err_push(err, AOS_ERR_LMP_SEND_FAILURE);
@ -77,7 +78,7 @@ aos_rpc_send_number(struct aos_rpc *rpc, uintptr_t num) {
// given channel and wait until the ack gets returned.
errval_t err;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_SEND_NUMBER,
NULL_CAP, 0, num, 0,
@ -96,7 +97,7 @@ aos_rpc_send_string(struct aos_rpc *rpc, const char *string) {
size_t string_size = strlen(string) + 1;
if (string_size > RPC_SHARED_SIZE) return AOS_ERR_RPC_ARG_TOO_BIG;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
memcpy(rpc->shared_mem, string, string_size);
err = do_aos_rpc(
rpc, RPC_MTYPE_SEND_STRING,
@ -135,7 +136,7 @@ aos_rpc_serial_getchar(struct aos_rpc *rpc, char *retc) {
errval_t err;
uintptr_t retval;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_SERIAL_GETCHAR,
NULL_CAP, 0, 0, 0,
@ -153,7 +154,7 @@ aos_rpc_serial_putchar(struct aos_rpc *rpc, char c) {
// serial port.
errval_t err;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_SERIAL_PUTCHAR,
NULL_CAP, 0, c, 0,
@ -176,7 +177,7 @@ aos_rpc_serial_write(struct aos_rpc *rpc, const char *buf, size_t buf_len) {
size_t chunk_len = MIN(buf_len, RPC_SHARED_SIZE);
size_t written_bytes;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
memcpy(rpc->shared_mem, buf, chunk_len);
err = do_aos_rpc(
rpc, RPC_MTYPE_SERIAL_WRITE,
@ -217,7 +218,7 @@ aos_rpc_serial_read(struct aos_rpc *rpc, char *buf, size_t buf_len) {
size_t chunk_len = MIN(buf_len, RPC_SHARED_SIZE);
size_t read_bytes;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_SERIAL_READ,
NULL_CAP, 0, chunk_len, 0,
@ -253,7 +254,7 @@ aos_rpc_process_spawn(struct aos_rpc *rpc, char *cmdline,
size_t cmdline_size = strlen(cmdline) + 1;
if (cmdline_size > RPC_SHARED_SIZE) return AOS_ERR_RPC_ARG_TOO_BIG;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
memcpy(rpc->shared_mem, cmdline, cmdline_size);
uintptr_t retval;
errval_t err = do_aos_rpc(
@ -275,7 +276,7 @@ aos_rpc_process_get_name(struct aos_rpc *rpc, domainid_t pid, char **name) {
size_t name_len;
errval_t err;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_PROCESS_GET_NAME,
NULL_CAP, 0, pid, 0,
@ -301,7 +302,7 @@ aos_rpc_process_get_all_pids(struct aos_rpc *rpc, domainid_t **pids,
size_t ret_len;
errval_t err;
thread_mutex_lock_nested(&rpc->lock);
thread_mutex_lock(&rpc->lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_PROCESS_GET_ALL_PIDS,
NULL_CAP, 0, 0, 0,