DragonFly-2.3.0.864.gc5b83 master sys/platform/pc32/apic mpapic.c sys/platform/pc32/isa clock.c sys/platform/pc64/isa clock.c sys/platform/vkernel/platform systimer.c sys/sys systimer.h
Sepherosa Ziehau
sepherosa at gmail.com
Sun May 3 04:43:59 PDT 2009
On Sun, May 3, 2009 at 1:42 AM, Matthew Dillon
<dillon at apollo.backplane.com> wrote:
> :It's not so simple. There is a problem when using deep sleep states in
> :modern CPU's (C3 and deeper) - lapic timer is stopped when CPU enters
> :into C3. And using C3 (or even C4) is obviously completely normal thing
> :to do in laptops.
> :
> :See these commits for more pointers/details:
> :
> :http://permalink.gmane.org/gmane.os.freebsd.devel.cvs.src/105079
> :http://lists.xensource.com/archives/html/xen-changelog/2008-05/msg00221.html
> :http://bugzilla.kernel.org/show_bug.cgi?id=2560
> :
> :--
> :Hasso Tepper
>
> Hmm. The "lapic timer: Correct AMD C1E handling" commit doesn't
> fix that issue?
It is AMD only. AMD's multi-core CPU does not seem to be able enter
C2/C3 state, so AMD seem to invent C1E which is similar to C3.
>
> The cool thing about our systimers is that we do not use the
> systimer hardware itself to calculate elapsed time, we just use
> it as a one-shot. We use sys_cputimer (typically the ACPI or HPET)
> for elapsed time.
>
> This means the lapic timer *CAN* be temporarily disabled,
> just as long as some interrupt somewhere comes along at some
> point to wake the machine up, on every cpu that is in a sleep
> state.
>
> We would want to ensure that the sleep state is not held more then
> a millisecond or two, otherwise network polling and other very
> fast systimer events will not go as fast as expected. Slower
> systimer events such as the seconds timer and scheduler (100hz)
> are not as big an issue as long as the wakeup occurs in a
> reasonable period of time (aka < 10ms).
>
> If the lapic timer is disabled we clearly cannot depend on
> it to wake the machine up, so we might need some sort of
> fail-safe interrupt for that... maybe the 8254 can still
> be used for that purpose, or the RTC real time clock
> interrupt that we use for profiling. This interrupt would
> have to send a dummy IPI to every cpu on the system.
Switch one shot timer is quite simple now, since cputimer_intr_reload
is function pointer :)
Best Regards,
sephe
--
Live Free or Die
More information about the Commits
mailing list