From: Ingo Molnar <mingo@elte.hu>
To: linux-kernel@vger.kernel.org
Cc: mm-commits@vger.kernel.org, tglx@linutronix.de,
Andrew Morton <akpm@osdl.org>
Subject: Re: + i386-lapic-timer-calibration.patch added to -mm tree
Date: Wed, 8 Nov 2006 13:09:14 +0100 [thread overview]
Message-ID: <20061108120914.GB19843@elte.hu> (raw)
In-Reply-To: <200611012045.kA1KjM1p018949@shell0.pdx.osdl.net>
* akpm@osdl.org <akpm@osdl.org> wrote:
> Subject: i386/apic: Rework local apic timer calibration
> From: Thomas Gleixner <tglx@linutronix.de>
>
> The local apic timer calibration has two problem cases:
>
> 1. The calibration is based on readout of the PIT/HPET timer to detect
> the wrap of the periodic tick. It happens that a box gets stuck in the
> calibration loop due to a PIT with a broken readout function.
>
> 2. CoreDuo boxen show a sporadic PIT runs too slow defect, which results
> in a wrong lapic calibration. The PIT goes back to normal operation once
> the lapic timer is switched to periodic mode.
>
> Rework the code to address both problems:
> - Make the calibration interrupt driven. This removes the wait_timer_tick
> magic hackery from lapic.c and time_hpet.c. The clockevents framework
> allows easy substitution of the global tick event handler for the
> calibration. This is more accurate than monitoring jiffies. At this
> point of the boot process, nothing disturbes the interrupt delivery, so
> the results are very accurate.
>
> - Verify the calibration against the PM timer, when available by using the
> early access function. When the measured calibration period is outside
> of an one percent window, then the lapic timer calibration is adjusted
> to the pm timer result.
>
> - Verify the calibration by running the lapic timer with the calibration
> handler. Disable lapic timer in case of deviation.
>
> This also removes the "synchronization" of the local apic timer to the
> global tick. This synchronization never worked, as there is no way to
> synchronize PIT(HPET) and local APIC timer. The synchronization by waiting
> for the tick just alignes the local APIC timer for the first events, but
> later the events drift away due to the different clocks. Removing the
> "sync" is just randomizing the asynchronous behaviour at setup time.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Andrew Morton <akpm@osdl.org>
i agree with this method.
one question:
> + long tapic = apic_read(APIC_TMCCT);
> + unsigned long pm = acpi_pm_read_early();
is this function call safe if the box has no pm-timer?
otherwise, i have tested this on a couple of boxes, it looks good. This
patch should also solve some apic-calibration hangs reported against
Fedora.
Acked-by: Ingo Molnar <mingo@elte.hu>
Ingo
next parent reply other threads:[~2006-11-08 12:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200611012045.kA1KjM1p018949@shell0.pdx.osdl.net>
2006-11-08 12:09 ` Ingo Molnar [this message]
2006-11-08 12:27 ` + i386-lapic-timer-calibration.patch added to -mm tree Thomas Gleixner
2006-11-08 12:28 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061108120914.GB19843@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mm-commits@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.