Subject: Re: Sleazy timing code
To: Jukka Marin <jmarin@pyy.jmp.fi>
From: Andreas Johansson <ajo@wopr.campus.luth.se>
List: port-i386
Date: 05/30/2000 15:52:17
On Tue, 30 May 2000, Jukka Marin wrote:

> I believe NetBSD and other UN*X like operating systems are using something
> like this on i386 because I have heard from people that after replacing
> win* with UN*X, their CPU started running a lot cooler.  Obviously, win*
> keeps the CPU running some idle loop all the time (polling for keyboard,
> perhaps? ;-) while the more advanced OS'es know better.

Yes, CPU power management is supported by NetBSD. If your BIOS has APM
(Advanced Power Management), it is called from the idle-loop to reduce
power consumption on x86 machines:

ENTRY(idle)
        cli
        movl    _C_LABEL(whichqs),%ecx
        testl   %ecx,%ecx
        jnz     sw1
        sti
#if NAPM > 0
        call    _C_LABEL(apm_cpu_idle)
#endif
        hlt
#if NAPM > 0
        call    _C_LABEL(apm_cpu_busy)
#endif
        jmp     _C_LABEL(idle)

-- Snipped from arch/i386/i386/locore.s, NetBSD-1.4.1.

It also seems to me that the CPU is stopped until an interrupt occurs as
the "hlt" instruction is executed if nothing is in the runqueues.

>   -jm

/Andreas