diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/hrtimer.c | 7 | ||||
| -rw-r--r-- | kernel/posix-cpu-timers.c | 3 | ||||
| -rw-r--r-- | kernel/time/tick-sched.c | 8 |
3 files changed, 13 insertions, 5 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index ab80515008f4..ffca825d24bc 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -300,11 +300,10 @@ EXPORT_SYMBOL_GPL(ktime_sub_ns); | |||
| 300 | */ | 300 | */ |
| 301 | u64 ktime_divns(const ktime_t kt, s64 div) | 301 | u64 ktime_divns(const ktime_t kt, s64 div) |
| 302 | { | 302 | { |
| 303 | u64 dclc, inc, dns; | 303 | u64 dclc; |
| 304 | int sft = 0; | 304 | int sft = 0; |
| 305 | 305 | ||
| 306 | dclc = dns = ktime_to_ns(kt); | 306 | dclc = ktime_to_ns(kt); |
| 307 | inc = div; | ||
| 308 | /* Make sure the divisor is less than 2^32: */ | 307 | /* Make sure the divisor is less than 2^32: */ |
| 309 | while (div >> 32) { | 308 | while (div >> 32) { |
| 310 | sft++; | 309 | sft++; |
| @@ -632,8 +631,6 @@ void clock_was_set(void) | |||
| 632 | */ | 631 | */ |
| 633 | void hres_timers_resume(void) | 632 | void hres_timers_resume(void) |
| 634 | { | 633 | { |
| 635 | WARN_ON_ONCE(num_online_cpus() > 1); | ||
| 636 | |||
| 637 | /* Retrigger the CPU local events: */ | 634 | /* Retrigger the CPU local events: */ |
| 638 | retrigger_next_event(NULL); | 635 | retrigger_next_event(NULL); |
| 639 | } | 636 | } |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index f1525ad06cb3..c42a03aef36f 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -1037,6 +1037,9 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 1037 | sig->rlim[RLIMIT_RTTIME].rlim_cur += | 1037 | sig->rlim[RLIMIT_RTTIME].rlim_cur += |
| 1038 | USEC_PER_SEC; | 1038 | USEC_PER_SEC; |
| 1039 | } | 1039 | } |
| 1040 | printk(KERN_INFO | ||
| 1041 | "RT Watchdog Timeout: %s[%d]\n", | ||
| 1042 | tsk->comm, task_pid_nr(tsk)); | ||
| 1040 | __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); | 1043 | __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); |
| 1041 | } | 1044 | } |
| 1042 | } | 1045 | } |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index b854a895591e..86baa4f0dfe4 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -48,6 +48,13 @@ static void tick_do_update_jiffies64(ktime_t now) | |||
| 48 | unsigned long ticks = 0; | 48 | unsigned long ticks = 0; |
| 49 | ktime_t delta; | 49 | ktime_t delta; |
| 50 | 50 | ||
| 51 | /* | ||
| 52 | * Do a quick check without holding xtime_lock: | ||
| 53 | */ | ||
| 54 | delta = ktime_sub(now, last_jiffies_update); | ||
| 55 | if (delta.tv64 < tick_period.tv64) | ||
| 56 | return; | ||
| 57 | |||
| 51 | /* Reevalute with xtime_lock held */ | 58 | /* Reevalute with xtime_lock held */ |
| 52 | write_seqlock(&xtime_lock); | 59 | write_seqlock(&xtime_lock); |
| 53 | 60 | ||
| @@ -228,6 +235,7 @@ void tick_nohz_stop_sched_tick(void) | |||
| 228 | local_softirq_pending()); | 235 | local_softirq_pending()); |
| 229 | ratelimit++; | 236 | ratelimit++; |
| 230 | } | 237 | } |
| 238 | goto end; | ||
| 231 | } | 239 | } |
| 232 | 240 | ||
| 233 | ts->idle_calls++; | 241 | ts->idle_calls++; |
