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>
Sat, 27 Dec 2008 10:53:07 +0000 (11:53 +0100)
commit1cc4fff0b360aeffeedb7d6db5089d88dd861700
tree8c71507911722595731853f8b67add46abb78b5e
parent32e8d18683adb322c994d1a0fe02d66380991f45
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