Prev: [PATCH 3/5] direct-io: honor dio->boundary a little more strictly
Next: [PATCH 8/8] x86/mrst: Add nop functions to x86_init mpparse functions
From: Jacob Pan on 7 May 2010 13:50 From: Jacob Pan <jacob.jun.pan(a)intel.com> lapic timer calibration can be combined with tsc in platform specific calibration functions. if such calibration result is obtained early, we can skip the redundent calibration loops. Signed-off-by: Jacob Pan <jacob.jun.pan(a)intel.com> Signed-off-by: Jacob Pan <jacob.jun.pan(a)linux.intel.com> --- arch/x86/kernel/apic/apic.c | 21 ++++++++++++++++++++- 1 files changed, 20 insertions(+), 1 deletions(-) diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index e5a4a1e..8ef56ac 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -175,7 +175,7 @@ static struct resource lapic_resource = { .flags = IORESOURCE_MEM | IORESOURCE_BUSY, }; -static unsigned int calibration_result; +unsigned int calibration_result; static int lapic_next_event(unsigned long delta, struct clock_event_device *evt); @@ -597,6 +597,25 @@ static int __init calibrate_APIC_clock(void) long delta, deltatsc; int pm_referenced = 0; + /** + * check if lapic timer has already been calibrated by platform + * specific routine, such as tsc calibration code. if so, we just fill + * in the clockevent structure and return. + */ + + if (calibration_result) { + apic_printk(APIC_VERBOSE, "lapic timer already calibrated %d\n", + calibration_result); + lapic_clockevent.mult = div_sc(calibration_result/APIC_DIVISOR, + TICK_NSEC, lapic_clockevent.shift); + lapic_clockevent.max_delta_ns = + clockevent_delta2ns(0x7FFFFF, &lapic_clockevent); + lapic_clockevent.min_delta_ns = + clockevent_delta2ns(0xF, &lapic_clockevent); + lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY; + return 0; + } + local_irq_disable(); /* Replace the global interrupt handler */ -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |