Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Apr 2010 02:32:02 +0200
From:      Attilio Rao <attilio@freebsd.org>
To:        Matthew Fleming <matthew.fleming@isilon.com>
Cc:        FreeBSD-Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: idle threads
Message-ID:  <j2t3bbf2fe11004231732s89bcd1beh68c05ccc032836c7@mail.gmail.com>
In-Reply-To: <06D5F9F6F655AD4C92E28B662F7F853E039E34E1@seaxch09.desktop.isilon.com>
References:  <06D5F9F6F655AD4C92E28B662F7F853E039E34E1@seaxch09.desktop.isilon.com>

next in thread | previous in thread | raw e-mail | index | archive | help
2010/4/24 Matthew Fleming <matthew.fleming@isilon.com>:
> I'm looking at kern_idle.c in stable/7 and I don't quite follow how idle
> threads work. =C2=A0The kthread_create(9) call does not pass in a functio=
n
> 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 =3D kthread_create(sched_idletd, NULL, &p,
                    RFSTOPPED | RFHIGHPID, 0, "idle: cpu%d", pc->pc_cpuid);
                pc->pc_idlethread =3D FIRST_THREAD_IN_PROC(p);
#else
                error =3D 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


--=20
Peace can only be achieved by understanding - A. Einstein



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?j2t3bbf2fe11004231732s89bcd1beh68c05ccc032836c7>