linux/arch
John Stultz 62627bec8a x86: tsc: Fix calibration refinement conditionals to avoid divide by zero
Konrad Wilk reported that the new delayed calibration crashes with a
divide by zero on Xen. The reason is that Xen sets the pmtimer
address, but reading from it returns 0xffffff. That results in the
ref_start and ref_stop value being the same, so the delta is zero
which causes the divide by zero later in the calculation.

The conditional (!hpet && !ref_start && !ref_stop) which sanity checks
the calibration reference values doesn't really make sense. If the
refs are null, but hpet is on, we still want to break out.

The div by zero would be possible to trigger by chance if both reads
from the hardware provided the exact same value (due to hardware
wrapping).

So checking if both the ref values are the same should handle if we
don't have hardware (both null) or if they are the same value (either by
invalid hardware, or by chance), avoiding the div by zero issue.

[ tglx: Applied the same fix to native_calibrate_tsc() where this
  	check was copied from ]

Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: John Stultz <johnstul@us.ibm.com>
LKML-Reference: <1295024788-15619-1-git-send-email-johnstul@us.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-01-14 18:28:01 +01:00
..
alpha perf: Dynamic pmu types 2010-12-16 11:36:43 +01:00
arm Merge commit 'v2.6.37' into perf/core 2011-01-05 14:22:10 +01:00
avr32 Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
blackfin BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
cris Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
frv BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
h8300 BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
ia64 SCSI host lock push-down 2010-11-16 13:33:23 -08:00
m32r Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
m68k BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
m68knommu BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
microblaze Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
mips Merge commit 'v2.6.37-rc7' into perf/core 2010-12-22 11:53:23 +01:00
mn10300 arch/mn10300/kernel/irq.c: fix build 2011-01-03 16:36:33 -08:00
parisc parisc: convert the rest of the irq handlers to simple/percpu 2010-12-04 11:15:19 -05:00
powerpc Merge commit 'v2.6.37-rc8' into perf/core 2011-01-04 08:08:54 +01:00
s390 Merge branch 'linus' into sched/core 2010-12-08 20:15:29 +01:00
score Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
sh Merge commit 'v2.6.37-rc8' into perf/core 2011-01-04 08:08:54 +01:00
sparc Merge commit 'v2.6.37-rc7' into perf/core 2010-12-22 11:53:23 +01:00
tile arch/tile: handle rt_sigreturn() more cleanly 2010-12-17 16:59:29 -05:00
um uml: disable winch irq before freeing handler data 2010-11-25 06:50:39 +09:00
x86 x86: tsc: Fix calibration refinement conditionals to avoid divide by zero 2011-01-14 18:28:01 +01:00
xtensa Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
.gitignore
Kconfig mutexes, sched: Introduce arch_mutex_cpu_relax() 2010-11-26 15:05:34 +01:00