diff options
author | Robert Richter <robert.richter@amd.com> | 2009-06-10 21:47:10 +0200 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2009-06-10 21:47:10 +0200 |
commit | 0886751c5d8b19fcee2e65d34ae21c9111e652a9 (patch) | |
tree | 015e8c2b3d44d46e9e8fccd016340c51bc876d3b /kernel/time/tick-common.c | |
parent | 7e4e0bd50e80df2fe5501f48f872448376cdd997 (diff) | |
parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) |
Merge commit 'v2.6.30' into oprofile/master
Diffstat (limited to 'kernel/time/tick-common.c')
-rw-r--r-- | kernel/time/tick-common.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 21a5ca84951..83c4417b6a3 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c @@ -93,7 +93,17 @@ void tick_handle_periodic(struct clock_event_device *dev) for (;;) { if (!clockevents_program_event(dev, next, ktime_get())) return; - tick_periodic(cpu); + /* + * Have to be careful here. If we're in oneshot mode, + * before we call tick_periodic() in a loop, we need + * to be sure we're using a real hardware clocksource. + * Otherwise we could get trapped in an infinite + * loop, as the tick_periodic() increments jiffies, + * when then will increment time, posibly causing + * the loop to trigger again and again. + */ + if (timekeeping_valid_for_hres()) + tick_periodic(cpu); next = ktime_add(next, tick_period); } } |