Dynamically assign cpu upon mutex unlock
All checks were successful
Build documentation / build-and-deploy (push) Successful in 35s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 35s
This commit is contained in:
@@ -42,6 +42,7 @@ static void proc_mutex_suspend (struct proc* proc, struct proc_suspension_q* sq,
|
|||||||
cpu->proc_current = NULL;
|
cpu->proc_current = NULL;
|
||||||
|
|
||||||
list_append (sq->proc_list, &proc->suspension_link);
|
list_append (sq->proc_list, &proc->suspension_link);
|
||||||
|
proc->cpu = NULL;
|
||||||
|
|
||||||
spin_unlock (&sq->lock, &ctxsq);
|
spin_unlock (&sq->lock, &ctxsq);
|
||||||
spin_unlock (&proc->lock, &ctxpr);
|
spin_unlock (&proc->lock, &ctxpr);
|
||||||
@@ -52,14 +53,14 @@ static void proc_mutex_suspend (struct proc* proc, struct proc_suspension_q* sq,
|
|||||||
|
|
||||||
static void proc_mutex_resume (struct proc* proc) {
|
static void proc_mutex_resume (struct proc* proc) {
|
||||||
spin_lock_ctx_t ctxsq, ctxpr, ctxcpu;
|
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 (&cpu->lock, &ctxcpu);
|
||||||
spin_lock (&proc->lock, &ctxpr);
|
spin_lock (&proc->lock, &ctxpr);
|
||||||
|
|
||||||
|
proc->cpu = cpu;
|
||||||
struct proc_suspension_q* sq = proc->suspension_q;
|
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);
|
||||||
@@ -71,7 +72,6 @@ static void proc_mutex_resume (struct proc* proc) {
|
|||||||
atomic_fetch_add (&cpu->proc_run_q_count, 1);
|
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 (&proc->lock, &ctxpr);
|
||||||
spin_unlock (&cpu->lock, &ctxcpu);
|
spin_unlock (&cpu->lock, &ctxcpu);
|
||||||
|
|||||||
Reference in New Issue
Block a user