From 2e8b474d4219e7faaac3823e73c8d528c2698a37 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Thu, 14 Mar 2024 13:09:59 +0100 Subject: random changes made --- kernel/ipc.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'kernel/ipc.c') diff --git a/kernel/ipc.c b/kernel/ipc.c index eb7c1b7..a3e1160 100644 --- a/kernel/ipc.c +++ b/kernel/ipc.c @@ -20,7 +20,7 @@ bool ipc_register_endpoint(u32 endpoint) { return false; } ipc_endpoints[endpoint].in_use = 1; - ipc_endpoints[endpoint].pid = get_current_task()->pid; + ipc_endpoints[endpoint].pid = current_task->pid; return true; } @@ -46,7 +46,7 @@ int ipc_get_mailbox(u32 id, struct IpcMailbox **out) { int ipc_has_data(process_t *p) { if (!p) { - p = get_current_task(); + p = current_task; } struct IpcMailbox *handler = &p->ipc_mailbox; u32 read_ptr = handler->read_ptr; @@ -55,28 +55,29 @@ int ipc_has_data(process_t *p) { } int ipc_read(u8 *buffer, u32 length, u32 *sender_pid) { - struct IpcMailbox *handler = &get_current_task()->ipc_mailbox; + struct IpcMailbox *handler = ¤t_task->ipc_mailbox; u32 read_ptr = handler->read_ptr; struct IpcMessage *ipc_message = &handler->data[read_ptr]; for (;;) { if (!ipc_message->is_used) { - if (get_current_task()->is_interrupted) { - get_current_task()->is_interrupted = 0; - get_current_task()->is_halted = 0; + if (current_task->is_interrupted) { + current_task->is_interrupted = 0; + current_task->is_halted = 0; return 0; } - get_current_task()->is_halted = 1; + current_task->is_halted = 1; switch_task(); continue; } break; } - get_current_task()->is_halted = 0; + current_task->is_halted = 0; disable_interrupts(); ipc_message->is_used = 0; // TODO: Verify sender_pid is a valid address if (sender_pid) { + assert(mmu_is_valid_userpointer(sender_pid, sizeof(ipc_message->sender_pid))); *sender_pid = ipc_message->sender_pid; } @@ -100,7 +101,7 @@ int ipc_write_to_process(int pid, u8 *buffer, u32 length) { struct IpcMessage *ipc_message = &handler->data[write_ptr]; ipc_message->is_used = 1; u32 len = min(IPC_BUFFER_SIZE, length); - ipc_message->sender_pid = get_current_task()->pid; + ipc_message->sender_pid = current_task->pid; ipc_message->size = len; memcpy(ipc_message->buffer, buffer, len); -- cgit v1.2.3