hrtimers: increase clock min delta threshold while interrupt hanging
authorFrederic Weisbecker <fweisbec@gmail.com>
Mon, 22 Dec 2008 01:24:48 +0000 (02:24 +0100)
committerIngo Molnar <mingo@elte.hu>
Fri, 30 Jan 2009 21:35:10 +0000 (22:35 +0100)
commit7f22391cbe82a80a9f891d8bd10fc28ff248d1e2
treee0ed719d43c6f03bab7f4dbb6c2224603f7268fa
parentf2257b70b0f9b2fe8f2afd83fc6798dca75930b8
hrtimers: increase clock min delta threshold while interrupt hanging

Impact: avoid timer IRQ hanging slow systems

While using the function graph tracer on a virtualized system, the
hrtimer_interrupt can hang the system on an infinite loop.

This can be caused in several situations:

 - the hardware is very slow and HZ is set too high

 - something intrusive is slowing the system down (tracing under emulation)

... and the next clock events to program are always before the current time.

This patch implements a reasonable compromise: if such a situation is
detected, we share the CPUs time in 1/4 to process the hrtimer interrupts.
This is enough to let the system running without serious starvation.

It has been successfully tested under VirtualBox with 1000 HZ and 100 HZ
with function graph tracer launched. On both cases, the clock events were
increased until about 25 ms periodic ticks, which means 40 HZ.

So we change a hard to debug hang into a warning message and a system that
still manages to limp along.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/hrtimer.c