idle threads
Attilio Rao
attilio at freebsd.org
Sat Apr 24 00:32:03 UTC 2010
2010/4/24 Matthew Fleming <matthew.fleming at isilon.com>:
> I'm looking at kern_idle.c in stable/7 and I don't quite follow how idle
> threads work. The kthread_create(9) call does not pass in a function
> pointer, so what code does a processor run when there is no other
> runnable thread?
In STABLE_7:
...
#ifdef SMP
SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
error = kthread_create(sched_idletd, NULL, &p,
RFSTOPPED | RFHIGHPID, 0, "idle: cpu%d", pc->pc_cpuid);
pc->pc_idlethread = FIRST_THREAD_IN_PROC(p);
#else
error = kthread_create(sched_idletd, NULL, &p,
RFSTOPPED | RFHIGHPID, 0, "idle");
PCPU_SET(idlethread, FIRST_THREAD_IN_PROC(p));
#endif
...
then they rightly passes sched_idletd(). Any scheduler may define its
own version of sched_idletd().
NULL is just the argument passed that is not meaningful.
Or maybe I'm not understanding your question?
Attilio
--
Peace can only be achieved by understanding - A. Einstein
More information about the freebsd-hackers
mailing list