# HG changeset patch # User mir3636 # Date 1547772022 -32400 # Node ID 68de775c3a2956f9033d1f4ecd43b447c175129e # Parent 1a64b5645cddac67624b985959db8fdba8a5fafe add cbc_sched diff -r 1a64b5645cdd -r 68de775c3a29 src/proc.c --- a/src/proc.c Thu Jan 17 19:55:30 2019 +0900 +++ b/src/proc.c Fri Jan 18 09:40:22 2019 +0900 @@ -353,6 +353,34 @@ } } +__code cbc_sched(__code(*next)()) +{ + int intena; + + if(!holding(&ptable.lock)) { + panic("sched ptable.lock"); + } + + if(cpu->ncli != 1) { + panic("sched locks"); + } + + if(proc->state == RUNNING) { + panic("sched running"); + } + + if(int_enabled ()) { + panic("sched interruptible"); + } + + intena = cpu->intena; + swtch(&proc->context, cpu->scheduler); + cpu->intena = intena; + + goto next(); +} + + // Enter scheduler. Must hold only ptable.lock // and have changed proc->state. void sched(void)