From 1eef23ea98894531706c8122b0ff940ed34a928e Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 18 Mar 2026 20:52:47 +0000 Subject: [PATCH] thread: store struct msg on the stack instead of in the thread --- include/kernel/thread.h | 3 --- kernel/port.c | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/include/kernel/thread.h b/include/kernel/thread.h index 7608c62..2444e6f 100644 --- a/include/kernel/thread.h +++ b/include/kernel/thread.h @@ -39,14 +39,11 @@ struct thread { virt_addr_t tr_cpu_user_sp, tr_cpu_kernel_sp; struct runqueue *tr_rq; - struct msg tr_msg; - struct page_request tr_page_req; struct queue_entry tr_parent_entry; struct queue_entry tr_rqentry; struct vm_page *tr_kstack; - struct vm_object *tr_ustack; }; extern struct thread *thread_alloc(void); diff --git a/kernel/port.c b/kernel/port.c index cd4364e..360aaf4 100644 --- a/kernel/port.c +++ b/kernel/port.c @@ -88,25 +88,25 @@ kern_status_t port_send_msg( } struct thread *self = current_thread(); - struct msg *msg = &self->tr_msg; - memset(msg, 0x0, sizeof *msg); - msg->msg_status = KMSG_WAIT_RECEIVE; - msg->msg_sender_thread = self; - msg->msg_sender_port = port; - memcpy(&msg->msg_req, in_msg, sizeof msg->msg_req); - memcpy(&msg->msg_resp, out_reply, sizeof msg->msg_req); + struct msg msg; + memset(&msg, 0x0, sizeof msg); + msg.msg_status = KMSG_WAIT_RECEIVE; + msg.msg_sender_thread = self; + msg.msg_sender_port = port; + memcpy(&msg.msg_req, in_msg, sizeof msg.msg_req); + memcpy(&msg.msg_resp, out_reply, sizeof msg.msg_req); unsigned long flags; channel_lock_irqsave(port->p_remote, &flags); port->p_status = PORT_SEND_BLOCKED; - channel_enqueue_msg(port->p_remote, msg); + channel_enqueue_msg(port->p_remote, &msg); channel_unlock_irqrestore(port->p_remote, flags); - wait_for_reply(msg, lock_flags); + wait_for_reply(&msg, lock_flags); channel_lock_irqsave(port->p_remote, &flags); - btree_delete(&port->p_remote->c_msg, &msg->msg_node); + btree_delete(&port->p_remote->c_msg, &msg.msg_node); channel_unlock_irqrestore(port->p_remote, flags); - return msg->msg_result; + return msg.msg_result; }