yamt-idlelwp branchに関する議論のスレッドで発見したパッチの解析

NetBSD-currentにはschedcpu()がないで少し言及したyamt-idlelwp branchに関する議論のスレッドで発見したパッチを解析してみた。
このパッチは恐らくスケジューラのモジュール化を目的としており、4.0からcurrentのコードへ至る途中の段階がどうなっていたかが解るものとなっていた。

関数コール・代入変数名の変更

  • rqinit() -> sched_rqinit()
  • schedcpu(NULL) -> sched_setup()
  • ci->ci_schedstate.spc_rrticks -> ci->ci_schedstate.spc_ticks
  • roundrobin(ci) -> sched_tick(ci)
  • scheduler_wait_hook(parent, p) -> sched_proc_exit(parent, p)
  • scheduler_fork_hook(p1, p2) -> sched_proc_fork(p1, p2)
  • setrunqueue(l) -> sched_enqueue(l)
  • chgp->p_nice = n; resetprocpriority(chgp); -> sched_nice(chgp, p)
  • if(l->l_slptime > 1) updatepri(l) -> sched_setrunnable(l)
  • nextrunqueue() -> sched_nextlwp()
  • remrunqueue(newl) -> sched_dequeue(newl)
  • resched_lwp(l, l->l_priority) -> resched_cpu(l, l->l_priority)

関数の改名・削除・移動

kern/kern_synch.c
  • schedcpu() -> kern/sched_4bsd.c
  • updatepri() -> sched_setrunnable() @ kern/sched_4bsd.c
  • sched_changepri() -> resched_cpu()
  • roundrobin() -> sched_tick() @ kern/sched_4bsd.c
  • decay_cpu() -> kern/sched_4bsd.c
  • decay_cpu_batch() -> kern/sched_4bsd.c
  • rqinit() -> sched_rqinit() @ kern/sched_4bsd.c
  • resched_lwp() -> resched_cpu()にmerge?
  • sched_curcpu_runnable_p() -> kern/sched_4bsd.c
  • resetpriority() -> kern/sched_4bsd.c
  • resetprocpriority() -> sched_nice() @ kern/sched_4bsd.c
  • schedclock() -> kern/sched_4bsd.c
  • scheduler_fork_hook() -> sched_proc_fork() @ sched_4bsd.c
  • scheduler_wait_hook() -> sched_proc_exit() @ sched_4bsd.c
  • checkrunqueue() -> ? @ kern/kern_runq.c
  • setrunqueue() -> sched_enqueue() @ kern/kern_runq.c
  • remrunqueue() -> sched_dequeue() @ kern/kern_runq.c
  • nextrunqueue() -> sched_nextlwp() @ kern/kern_runq.c
kern/sched_4bsd.c
  • sched_setup() <- schedcpu(NULL)