From a68373e4eeb9c8c59cdaf2983b0be4fae3a2d83d Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sun, 25 Jan 2026 20:39:51 +0100 Subject: [PATCH] Dynamically assign cpu upon mutex unlock --- kernel/proc/mutex.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/kernel/proc/mutex.c b/kernel/proc/mutex.c index 7300295..324f935 100644 --- a/kernel/proc/mutex.c +++ b/kernel/proc/mutex.c @@ -42,6 +42,7 @@ static void proc_mutex_suspend (struct proc* proc, struct proc_suspension_q* sq, cpu->proc_current = NULL; list_append (sq->proc_list, &proc->suspension_link); + proc->cpu = NULL; spin_unlock (&sq->lock, &ctxsq); spin_unlock (&proc->lock, &ctxpr); @@ -52,26 +53,25 @@ static void proc_mutex_suspend (struct proc* proc, struct proc_suspension_q* sq, static void proc_mutex_resume (struct proc* proc) { spin_lock_ctx_t ctxsq, ctxpr, ctxcpu; - struct cpu* cpu = proc->cpu; + struct cpu* cpu = cpu_find_lightest (); spin_lock (&cpu->lock, &ctxcpu); spin_lock (&proc->lock, &ctxpr); + proc->cpu = cpu; struct proc_suspension_q* sq = proc->suspension_q; - if (sq) { - spin_lock (&sq->lock, &ctxsq); + spin_lock (&sq->lock, &ctxsq); - list_remove (sq->proc_list, &proc->suspension_link); + list_remove (sq->proc_list, &proc->suspension_link); - proc->suspension_q = NULL; - atomic_store (&proc->state, PROC_READY); + proc->suspension_q = NULL; + atomic_store (&proc->state, PROC_READY); - list_append (cpu->proc_run_q, &proc->cpu_run_q_link); - atomic_fetch_add (&cpu->proc_run_q_count, 1); + list_append (cpu->proc_run_q, &proc->cpu_run_q_link); + atomic_fetch_add (&cpu->proc_run_q_count, 1); - spin_unlock (&sq->lock, &ctxsq); - } + spin_unlock (&sq->lock, &ctxsq); spin_unlock (&proc->lock, &ctxpr); spin_unlock (&cpu->lock, &ctxcpu);