Thomas Gleixner
d36b49b910
[PATCH] i386 rework local apic timer calibration
...
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.
Both are existing and unfixed problems in the current upstream kernel and
prevent certain laptops and other systems from booting Linux.
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: Ingo Molnar <mingo@elte.hu>
Cc: Zachary Amsden <zach@vmware.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Rohit Seth <rohitseth@google.com>
Cc: Andi Kleen <ak@suse.de>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-02-16 08:13:59 -08:00
..
mach-bigsmp
[PATCH] x86: convert bigsmp to use flat physical mode
2006-01-06 08:33:37 -08:00
mach-default
[PATCH] clockevents: i386 drivers
2007-02-16 08:13:59 -08:00
mach-es7000
ACPICA: Remove duplicate table definitions (non-conflicting), cont
2007-02-02 21:14:29 -05:00
mach-generic
[PATCH] x86: sutomatically enable bigsmp when we have more than 8 CPUs
2005-09-05 00:06:10 -07:00
mach-numaq
mach-summit
[PATCH] i386: Fix compilation with UP genericarch
2006-11-28 20:12:59 +01:00
mach-visws
[PATCH] visws build fix
2006-10-28 11:30:52 -07:00
mach-voyager
[PATCH] clockevents: i386 drivers
2007-02-16 08:13:59 -08:00
8253pit.h
a.out.h
acpi.h
ACPICA: Allow ACPI id to be u32 instead of u8.
2007-02-02 21:14:31 -05:00
agp.h
[PATCH] i386: inline asm cleanup
2005-09-05 00:06:11 -07:00
alternative-asm.i
Remove all inclusions of <linux/config.h>
2006-10-04 03:38:54 -04:00
alternative.h
[PATCH] paravirt: Patch inline replacements for paravirt intercepts
2006-12-07 02:14:08 +01:00
apic.h
[PATCH] i386 rework local apic timer calibration
2007-02-16 08:13:59 -08:00
apicdef.h
x86_64: Remove stale lapic definition from apicdef.h
2006-04-01 22:50:03 -05:00
arch_hooks.h
IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
2006-10-05 15:10:12 +01:00
atomic.h
[PATCH] Numerous fixes to kernel-doc info in source files.
2007-02-11 10:51:32 -08:00
auxvec.h
[PATCH] auxiliary vector cleanups
2005-09-07 16:57:21 -07:00
bitops.h
[PATCH] Numerous fixes to kernel-doc info in source files.
2007-02-11 10:51:32 -08:00
boot.h
[PATCH] i386: Restore CONFIG_PHYSICAL_START option
2007-01-05 23:55:23 -08:00
bug.h
[PATCH] Generic BUG for i386
2006-12-08 08:28:39 -08:00
bugs.h
[PATCH] i386: improve sched_clock() on i686
2007-02-13 13:26:22 +01:00
byteorder.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
cache.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
cacheflush.h
[PATCH] Optimize D-cache alias handling on fork
2006-12-13 09:27:08 -08:00
checksum.h
[NET]: I386 checksum annotations and cleanups.
2006-12-02 21:23:19 -08:00
cpu.h
[PATCH] i386: introduce the mechanism of disabling cpu hotplug control
2006-12-07 02:14:10 +01:00
cpufeature.h
[PATCH] i386: i386 add Intel BTS cpufeature bit and detection (take 2)
2006-12-07 02:14:11 +01:00
cputime.h
current.h
[PATCH] i386: Implement "current" with the PDA
2006-12-07 02:14:03 +01:00
debugreg.h
delay.h
[PATCH] paravirt: header and stubs for paravirtualisation
2006-12-07 02:14:07 +01:00
desc.h
[PATCH] i386: Rename cpu_gdt_descr and remove extern declaration from smpboot.c
2007-02-13 13:26:26 +01:00
device.h
ACPI: Change ACPI to use dev_archdata instead of firmware_data
2006-12-01 14:52:01 -08:00
div64.h
[PATCH] include/asm-i386/: "extern inline" -> "static inline"
2005-09-10 10:06:34 -07:00
dma-mapping.h
[PATCH] Pass struct dev pointer to dma_cache_sync()
2006-12-07 08:39:41 -08:00
dma.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
dmi.h
[PATCH] x86_64: Implement early DMI scanning
2006-03-25 09:10:55 -08:00
dwarf2.h
[PATCH] i386/x86-64: Work around gcc bug with noreturn functions in unwinder
2006-09-26 10:52:41 +02:00
e820.h
[PATCH] compile error of register_memory()
2006-12-22 08:55:49 -08:00
edac.h
[PATCH] EDAC: core EDAC support code
2006-01-18 19:20:31 -08:00
elf.h
[PATCH] i386: Convert i386 PDA code to use %fs
2007-02-13 13:26:20 +01:00
emergency-restart.h
errno.h
fcntl.h
[PATCH] Clean up struct flock64 definitions
2005-09-07 16:57:38 -07:00
fixmap.h
[PATCH] Fix CONFIG_COMPAT_VDSO
2007-01-26 13:50:58 -08:00
floppy.h
IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
2006-10-05 15:10:12 +01:00
frame.i
Remove all inclusions of <linux/config.h>
2006-10-04 03:38:54 -04:00
futex.h
[PATCH] mm: pagefault_{disable,enable}()
2006-12-07 08:39:21 -08:00
genapic.h
[PATCH] x86: fix the irqbalance quirk for E7320/E7520/E7525
2006-12-07 02:14:10 +01:00
hardirq.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
highmem.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
hpet.h
[PATCH] clockevents: i386 drivers
2007-02-16 08:13:59 -08:00
hw_irq.h
[PATCH] i386/x86_64: Remove global IO_APIC_VECTOR
2006-10-08 12:24:02 -07:00
hypertransport.h
[PATCH] Initial generic hypertransport interrupt support
2006-10-04 07:55:29 -07:00
i387.h
[PATCH] i386: add sleazy FPU optimization
2006-12-07 02:14:01 +01:00
i8253.h
[PATCH] clockevents: i386 drivers
2007-02-16 08:13:59 -08:00
i8259.h
ide.h
[PATCH] ide: more conversion to pci_get APIs
2006-12-08 08:29:03 -08:00
idle.h
[PATCH] i386: add idle notifier
2007-02-13 13:26:22 +01:00
intel_arch_perfmon.h
[PATCH] x86: i386/x86-64 Add nmi watchdog support for new Intel CPUs
2006-09-26 10:52:27 +02:00
io.h
[PATCH] kill eth_io_copy_and_sum()
2007-02-09 09:14:07 -08:00
io_apic.h
i386: clean up io-apic accesses
2006-11-01 09:11:00 -08:00
ioctl.h
[PATCH] Generic ioctl.h
2006-01-10 08:01:34 -08:00
ioctls.h
ipc.h
ipcbuf.h
irq.h
[PATCH] x86: fix the irqbalance quirk for E7320/E7520/E7525
2006-12-07 02:14:10 +01:00
irq_regs.h
[PATCH] i386: Store the interrupt regs pointer in the PDA
2006-12-07 02:14:03 +01:00
irqflags.h
[PATCH] paravirt: Patch inline replacements for paravirt intercepts
2006-12-07 02:14:08 +01:00
ist.h
k8.h
[PATCH] x86_64: Clean and enhance up K8 northbridge access code
2006-06-26 10:48:15 -07:00
Kbuild
[PATCH] cleanup asm/setup.h userspace visibility
2006-12-07 08:39:46 -08:00
kdebug.h
[PATCH] Notify page fault call chain for i386
2006-06-26 09:58:22 -07:00
kexec.h
[PATCH] i386: Avoid overwriting the current pgd (V4, i386)
2006-09-26 10:52:38 +02:00
kmap_types.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
kprobes.h
[PATCH] IA64: kprobe invalidate icache of jump buffer
2006-07-31 13:28:38 -07:00
ldt.h
linkage.h
local.h
i386: improve and correct inline asm memory constraints
2006-07-08 15:24:18 -07:00
math_emu.h
[PATCH] i386: PDA: Fix math emulator for new pt_regs
2006-12-07 02:14:03 +01:00
mc146818rtc.h
mca.h
mca_dma.h
[PATCH] kernel-doc for kernel/dma.c
2006-10-03 08:03:41 -07:00
mce.h
[PATCH] i386: Move mce_disabled to asm/mce.h
2007-02-13 13:26:26 +01:00
mman.h
[PATCH] add asm-generic/mman.h
2006-02-15 15:32:22 -08:00
mmu.h
[PATCH] vdso: randomize the i386 vDSO by moving it into a vma
2006-06-27 17:32:38 -07:00
mmu_context.h
[PATCH] i386: Convert i386 PDA code to use %fs
2007-02-13 13:26:20 +01:00
mmx.h
mmzone.h
[PATCH] silence unused pgdat warning from alloc_bootmem_node and friends
2006-12-07 08:39:23 -08:00
module.h
[PATCH] i386: always enable regparm
2006-12-07 02:14:12 +01:00
mpspec.h
[PATCH] clockevents: i386 drivers
2007-02-16 08:13:59 -08:00
mpspec_def.h
[PATCH] x86-64: remove remaining pc98 code
2006-12-07 02:14:19 +01:00
msgbuf.h
msidef.h
[PATCH] genirq: i386 irq: Move msi message composition into io_apic.c
2006-10-04 07:55:28 -07:00
msr.h
[PATCH] Mark TSC on GeodeLX reliable
2007-02-16 08:13:58 -08:00
mtrr.h
[PATCH] Don't trigger full rebuild via CONFIG_MTRR
2006-06-23 07:42:56 -07:00
mutex.h
[PATCH] i386: Remove lock section support in mutex.h
2006-09-26 10:52:31 +02:00
namei.h
nmi.h
[PATCH] x86: all cpu backtrace
2006-12-07 02:14:01 +01:00
numa.h
[PATCH] x86-64: Use ACPI PXM to parse PCI<->node assignments
2005-09-12 10:49:57 -07:00
numaq.h
page.h
[PATCH] Fix CONFIG_COMPAT_VDSO
2007-01-26 13:50:58 -08:00
param.h
[PATCH] cleanup asm/setup.h userspace visibility
2006-12-07 08:39:46 -08:00
paravirt.h
[PATCH] i386: Remove fastcall in paravirt.[ch]
2007-02-13 13:26:25 +01:00
parport.h
pci-direct.h
pci.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
pda.h
[PATCH] i386: Convert i386 PDA code to use %fs
2007-02-13 13:26:20 +01:00
percpu.h
[PATCH] i386: espfix cleanup
2006-12-07 02:14:01 +01:00
pgalloc.h
[PATCH] MM: page allocation hooks for VMI backend
2007-02-13 13:26:21 +01:00
pgtable-2level-defs.h
pgtable-2level.h
[PATCH] paravirt: fix missing pte update
2006-12-07 02:14:09 +01:00
pgtable-3level-defs.h
pgtable-3level.h
[PATCH] paravirt: fix missing pte update
2006-12-07 02:14:09 +01:00
pgtable.h
Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
2006-12-07 08:59:11 -08:00
poll.h
[PATCH] POLLRDHUP/EPOLLRDHUP handling for half-closed devices notifications
2006-03-25 08:22:56 -08:00
posix_types.h
i386: improve and correct inline asm memory constraints
2006-07-08 15:24:18 -07:00
processor.h
[PATCH] i386: add idle notifier
2007-02-13 13:26:22 +01:00
ptrace-abi.h
[PATCH] Split i386 and x86_64 ptrace.h
2006-09-26 08:49:10 -07:00
ptrace.h
[PATCH] i386: Profile pc badness
2007-02-13 13:26:21 +01:00
resource.h
rtc.h
rwlock.h
[PATCH] i386: Clean up spin/rwlocks
2006-09-26 10:52:32 +02:00
rwsem.h
[PATCH] lockdep: name some old style locks
2006-12-07 08:39:36 -08:00
scatterlist.h
seccomp.h
sections.h
segment.h
[PATCH] i386: Profile pc badness
2007-02-13 13:26:21 +01:00
semaphore.h
[PATCH] i386: Use early clobbers for semaphores now
2006-09-27 14:39:51 -07:00
sembuf.h
serial.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
setup.h
[PATCH] i386: Remove extern declaration from mm/discontig.c, put in header.
2007-02-13 13:26:26 +01:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
[PATCH] headers_check: move inclusion of <linux/linkage.h> in <asm-i386/signal.h>
2006-09-13 07:32:15 -07:00
smp.h
[PATCH] i386: SMP boot hook for paravirt
2007-02-13 13:26:21 +01:00
socket.h
[AF_UNIX]: Datagram getpeersec
2006-06-29 16:58:06 -07:00
sockios.h
sparsemem.h
spinlock.h
[PATCH] paravirt: Patch inline replacements for paravirt intercepts
2006-12-07 02:14:08 +01:00
spinlock_types.h
[PATCH] Remove 'volatile' from spinlock_types
2006-12-06 14:39:53 -08:00
srat.h
stacktrace.h
[PATCH] i386: Do stacktracer conversion too
2006-09-26 10:52:34 +02:00
stat.h
[PATCH] 2TB files: st_blocks is invalid when calling stat64
2006-03-26 08:57:00 -08:00
statfs.h
string.h
Don't include linux/config.h from anywhere else in include/
2006-04-26 12:56:16 +01:00
suspend.h
Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
2006-12-07 08:59:11 -08:00
sync_bitops.h
[PATCH] x86: implement always-locked bit ops, for memory shared with an SMP hypervisor
2006-09-26 08:48:55 -07:00
system.h
[PATCH] paravirt: header and stubs for paravirtualisation
2006-12-07 02:14:07 +01:00
termbits.h
[PATCH] tty: preparatory structures for termios revamp
2006-12-08 08:28:56 -08:00
termios.h
[PATCH] consolidate line discipline number definitions
2007-02-11 10:51:26 -08:00
therm_throt.h
[PATCH] x86: Add a cumulative thermal throttle event counter.
2006-09-26 10:52:42 +02:00
thread_info.h
[PATCH] PM: Fix SMP races in the freezer
2006-12-13 09:05:49 -08:00
time.h
[PATCH] i386: vMI timer patches
2007-02-13 13:26:21 +01:00
timer.h
[PATCH] i386: vMI timer patches
2007-02-13 13:26:21 +01:00
timex.h
[PATCH] Time: i386 Conversion - part 2: Rework TSC Support
2006-06-26 09:58:21 -07:00
tlb.h
tlbflush.h
[PATCH] paravirt: Add MMU virtualization to paravirt_ops
2006-12-07 02:14:08 +01:00
topology.h
[PATCH] sched: add option to serialize load balancing
2006-12-10 09:55:43 -08:00
tsc.h
[PATCH] x86: rewrite SMP TSC sync code
2007-02-16 08:13:57 -08:00
types.h
[PATCH] Centralise definitions of sector_t and blkcnt_t
2006-12-04 19:41:15 -08:00
uaccess.h
[PATCH] fix sparse warnings from {asm,net}/checksum.h
2007-02-11 10:51:31 -08:00
ucontext.h
unaligned.h
unistd.h
[PATCH] remove kernel syscalls
2006-12-07 08:39:37 -08:00
unwind.h
Remove stack unwinder for now
2006-12-15 08:47:51 -08:00
user.h
vga.h
[PATCH] vgacon: make VGA_MAP_MEM take size, remove extra use
2006-06-22 15:05:58 -07:00
vic.h
[VOYAGER] fix up ptregs removal mess
2006-10-12 22:25:03 -05:00
vm86.h
[PATCH] i386: Update sys_vm86 to cope with changed pt_regs and %gs usage
2006-12-07 02:14:03 +01:00
vmi.h
[PATCH] i386: vMI backend for paravirt-ops
2007-02-13 13:26:21 +01:00
vmi_time.h
[PATCH] i386: vMI timer patches
2007-02-13 13:26:21 +01:00
voyager.h
[VOYAGER] fix up attribute packed specifiers in voyager.h
2006-10-12 22:23:18 -05:00
xor.h
[PATCH] i386: inline asm cleanup
2005-09-05 00:06:11 -07:00