Hi, as there was not much response on this topic, adding some more people to CC. Would be great to get the one or other acked-by: for stable inclusion.
Thanks, Thomas On Monday, January 17, 2011 11:03:13 AM Thomas Renninger wrote: > Hi, > > this patch seem to not only be a performance optimization, > but fixes (works around) a time drift issue when suspending. > > The time drift happens when hpet.c encounters specific hpet/HW > capabilities to set up per CPU hpet msi interrupt vectors. > > While the real culprit seem to be in the per CPU hpet msi vector > code, this patch seem to address the issue in an easy and riskless > manner, suitable for stable@ kernels. > No idea which HW is set up with per CPU hpet msi irqs (not much). > If such configuration only happens on recent arat capable machines, > latest mainline kernels might get cleaned up by removing this > code and stable@ kernels are fine with this easy patch. > > Patch slightly adjusted (hunk 3/3 did not apply) > to latest linux-2.6.32.y tree. > > Thanks, > > Thomas > > --- > From: Shaohua Li <[email protected]> > x86, hpet: Disable per-cpu hpet timer if ARAT is supported > > Git-commit: 39fe05e58c5e448601ce46e6b03900d5bf31c4b0 > > If CPU support always running local APIC timer, per-cpu hpet > timer could be disabled, which is useless and wasteful in such > case. Let's leave the timers to others. > > The effect is that we reserve less timers. > > Signed-off-by: Shaohua Li <[email protected]> > LKML-Reference: <[email protected]> > Signed-off-by: Ingo Molnar <[email protected]> > > --- > arch/x86/kernel/hpet.c | 12 ++++++++++-- > 1 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c > index c771e1a..69cab24 100644 > --- a/arch/x86/kernel/hpet.c > +++ b/arch/x86/kernel/hpet.c > @@ -606,6 +606,8 @@ static void hpet_msi_capability_lookup(unsigned int start_timer) > if (hpet_msi_disable) > return; > > + if (boot_cpu_has(X86_FEATURE_ARAT)) > + return; > id = hpet_readl(HPET_ID); > > num_timers = ((id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT); > @@ -894,10 +896,8 @@ int __init hpet_enable(void) > > if (id & HPET_ID_LEGSUP) { > hpet_legacy_clockevent_register(); > - hpet_msi_capability_lookup(2); > return 1; > } > - hpet_msi_capability_lookup(0); > return 0; > > out_nohpet: > @@ -930,12 +930,20 @@ static __init int hpet_late_init(void) > if (!hpet_virt_address) > return -ENODEV; > > + if (hpet_readl(HPET_ID) & HPET_ID_LEGSUP) > + hpet_msi_capability_lookup(2); > + else > + hpet_msi_capability_lookup(0); > + > hpet_reserve_platform_timers(hpet_readl(HPET_ID)); > hpet_print_config(); > > if (hpet_msi_disable) > return 0; > > + if (boot_cpu_has(X86_FEATURE_ARAT)) > + return 0; > + > for_each_online_cpu(cpu) { > hpet_cpuhp_notify(NULL, CPU_ONLINE, (void *)(long)cpu); > } > _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
