X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=kernel%2Ftimer.c;h=2454172a80d3c6131313007d08f91f12eb85c107;hp=9199f3c5221526a1f7f60e52a33f7a6554cc0adf;hb=29d03fa12bc02c0f8085cd6bb06d11359a4bccaf;hpb=3e766fd41ddc31c47ec5b2840c6a45803d35ff40 diff --git a/kernel/timer.c b/kernel/timer.c index 9199f3c52215..2454172a80d3 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -750,13 +750,18 @@ unsigned long apply_slack(struct timer_list *timer, unsigned long expires) unsigned long expires_limit, mask; int bit; - expires_limit = expires + timer->slack; + expires_limit = expires; - if (timer->slack < 0) /* auto slack: use 0.4% */ - expires_limit = expires + (expires - jiffies)/256; + if (timer->slack >= 0) { + expires_limit = expires + timer->slack; + } else { + unsigned long now = jiffies; + /* No slack, if already expired else auto slack 0.4% */ + if (time_after(expires, now)) + expires_limit = expires + (expires - now)/256; + } mask = expires ^ expires_limit; - if (mask == 0) return expires; @@ -1679,11 +1684,14 @@ static int __cpuinit timer_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { long cpu = (long)hcpu; + int err; + switch(action) { case CPU_UP_PREPARE: case CPU_UP_PREPARE_FROZEN: - if (init_timers_cpu(cpu) < 0) - return NOTIFY_BAD; + err = init_timers_cpu(cpu); + if (err < 0) + return notifier_from_errno(err); break; #ifdef CONFIG_HOTPLUG_CPU case CPU_DEAD: