diff options
Diffstat (limited to 'kernel/timer.c')
-rw-r--r-- | kernel/timer.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index 1a69705c2fb9..b7792fb03387 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
@@ -305,6 +305,20 @@ void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr) | |||
305 | memcpy(timer->start_comm, current->comm, TASK_COMM_LEN); | 305 | memcpy(timer->start_comm, current->comm, TASK_COMM_LEN); |
306 | timer->start_pid = current->pid; | 306 | timer->start_pid = current->pid; |
307 | } | 307 | } |
308 | |||
309 | static void timer_stats_account_timer(struct timer_list *timer) | ||
310 | { | ||
311 | unsigned int flag = 0; | ||
312 | |||
313 | if (unlikely(tbase_get_deferrable(timer->base))) | ||
314 | flag |= TIMER_STATS_FLAG_DEFERRABLE; | ||
315 | |||
316 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | ||
317 | timer->function, timer->start_comm, flag); | ||
318 | } | ||
319 | |||
320 | #else | ||
321 | static void timer_stats_account_timer(struct timer_list *timer) {} | ||
308 | #endif | 322 | #endif |
309 | 323 | ||
310 | /** | 324 | /** |
@@ -1114,6 +1128,7 @@ int do_sysinfo(struct sysinfo *info) | |||
1114 | getnstimeofday(&tp); | 1128 | getnstimeofday(&tp); |
1115 | tp.tv_sec += wall_to_monotonic.tv_sec; | 1129 | tp.tv_sec += wall_to_monotonic.tv_sec; |
1116 | tp.tv_nsec += wall_to_monotonic.tv_nsec; | 1130 | tp.tv_nsec += wall_to_monotonic.tv_nsec; |
1131 | monotonic_to_bootbased(&tp); | ||
1117 | if (tp.tv_nsec - NSEC_PER_SEC >= 0) { | 1132 | if (tp.tv_nsec - NSEC_PER_SEC >= 0) { |
1118 | tp.tv_nsec = tp.tv_nsec - NSEC_PER_SEC; | 1133 | tp.tv_nsec = tp.tv_nsec - NSEC_PER_SEC; |
1119 | tp.tv_sec++; | 1134 | tp.tv_sec++; |
@@ -1206,7 +1221,8 @@ static int __devinit init_timers_cpu(int cpu) | |||
1206 | /* | 1221 | /* |
1207 | * The APs use this path later in boot | 1222 | * The APs use this path later in boot |
1208 | */ | 1223 | */ |
1209 | base = kmalloc_node(sizeof(*base), GFP_KERNEL, | 1224 | base = kmalloc_node(sizeof(*base), |
1225 | GFP_KERNEL | __GFP_ZERO, | ||
1210 | cpu_to_node(cpu)); | 1226 | cpu_to_node(cpu)); |
1211 | if (!base) | 1227 | if (!base) |
1212 | return -ENOMEM; | 1228 | return -ENOMEM; |
@@ -1217,7 +1233,6 @@ static int __devinit init_timers_cpu(int cpu) | |||
1217 | kfree(base); | 1233 | kfree(base); |
1218 | return -ENOMEM; | 1234 | return -ENOMEM; |
1219 | } | 1235 | } |
1220 | memset(base, 0, sizeof(*base)); | ||
1221 | per_cpu(tvec_bases, cpu) = base; | 1236 | per_cpu(tvec_bases, cpu) = base; |
1222 | } else { | 1237 | } else { |
1223 | /* | 1238 | /* |