aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/timer_list.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2010-03-12 17:34:14 +0100
committerThomas Gleixner <tglx@linutronix.de>2010-03-12 19:10:29 +0100
commit80a05b9ffa7dc13f6693902dd8999a2b61a3a0d7 (patch)
tree5612eeb26804b135de66779d1a00eaf35a4ceca1 /kernel/time/timer_list.c
parentad6759fbf35d104dbf573cd6f4c6784ad6823f7e (diff)
downloadkernel_samsung_espresso10-80a05b9ffa7dc13f6693902dd8999a2b61a3a0d7.zip
kernel_samsung_espresso10-80a05b9ffa7dc13f6693902dd8999a2b61a3a0d7.tar.gz
kernel_samsung_espresso10-80a05b9ffa7dc13f6693902dd8999a2b61a3a0d7.tar.bz2
clockevents: Sanitize min_delta_ns adjustment and prevent overflows
The current logic which handles clock events programming failures can increase min_delta_ns unlimited and even can cause overflows. Sanitize it by: - prevent zero increase when min_delta_ns == 1 - limiting min_delta_ns to a jiffie - bail out if the jiffie limit is hit - add retries stats for /proc/timer_list so we can gather data Reported-by: Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/time/timer_list.c')
-rw-r--r--kernel/time/timer_list.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index bdfb8dd..1a4a7dd 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -228,6 +228,7 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
SEQ_printf(m, " event_handler: ");
print_name_offset(m, dev->event_handler);
SEQ_printf(m, "\n");
+ SEQ_printf(m, " retries: %lu\n", dev->retries);
}
static void timer_list_show_tickdevices(struct seq_file *m)
@@ -257,7 +258,7 @@ static int timer_list_show(struct seq_file *m, void *v)
u64 now = ktime_to_ns(ktime_get());
int cpu;
- SEQ_printf(m, "Timer List Version: v0.5\n");
+ SEQ_printf(m, "Timer List Version: v0.6\n");
SEQ_printf(m, "HRTIMER_MAX_CLOCK_BASES: %d\n", HRTIMER_MAX_CLOCK_BASES);
SEQ_printf(m, "now at %Ld nsecs\n", (unsigned long long)now);