[PATCH] lapic-timer: increase the max_delta to 31 bits

From: Pierre Tardy
Date: Thu Jan 06 2011 - 10:23:49 EST


Latest atom socs(penwell) does not have hpet timer.

As their local APIC timer is clocked at 400KHZ, and the current code
limit their Initial Counter register to 23 bits, they cannot sleep
more than 1.34 seconds which leads to ~2 spurious wakeup per second (1 per thread)

These SOCs support 32bit timer so we change the max_delta to at least 31bits.
So we can at least sleep for 300 seconds.

We could not find any previous chip errata where lapic would only have 23 bit precision
As powertop is suggesting to activate HPET to "sleep longer", this could mean this problem is
already known.

Problem is here since very first implementation of lapic timer as a clock event
e9e2cdb [PATCH] clockevents: i386 drivers
cc contributors of the first patch and x86 maintainers

CC: Arjan van de Ven <arjan@xxxxxxxxxxxxx>
CC: Adrian Bunk <bunk@xxxxxxxxx>
CC: Andrew Morton <akpm@xxxxxxxx>
CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
CC: H. Peter Anvin <hpa@xxxxxxxxxxxxxxx>
CC: Ingo Molnar <mingo@xxxxxxx>
Cc: john stultz <johnstul@xxxxxxxxxx>
Cc: Roman Zippel <zippel@xxxxxxxxxxxxxx>
Cc: Andi Kleen <ak@xxxxxxx>
TO: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
TO: Ingo Molnar <mingo@xxxxxxxxxx>
TO: "H. Peter Anvin" <hpa@xxxxxxxxx>
TO: x86@xxxxxxxxxx
TO: Suresh Siddha <suresh.b.siddha@xxxxxxxxx>
TO: Yinghai Lu <yinghai@xxxxxxxxxx>
TO: Robert Richter <robert.richter@xxxxxxx>

Signed-off-by: Suresh Siddha <suresh.b.siddha@xxxxxxxxx>
Signed-off-by: Pierre Tardy <pierre.tardy@xxxxxxxxx>
---
arch/x86/kernel/apic/apic.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 7821813..c031f1d 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -684,7 +684,7 @@ static int __init calibrate_APIC_clock(void)
lapic_clockevent.mult = div_sc(delta, TICK_NSEC * LAPIC_CAL_LOOPS,
lapic_clockevent.shift);
lapic_clockevent.max_delta_ns =
- clockevent_delta2ns(0x7FFFFF, &lapic_clockevent);
+ clockevent_delta2ns(0x7FFFFFFF, &lapic_clockevent);
lapic_clockevent.min_delta_ns =
clockevent_delta2ns(0xF, &lapic_clockevent);

--
1.7.0.4

---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris,
92196 Meudon Cedex, France
Registration Number: 302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/