diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sysctl.c | 5 | ||||
| -rw-r--r-- | kernel/time/timer_stats.c | 16 | ||||
| -rw-r--r-- | kernel/timer.c | 2 |
3 files changed, 14 insertions, 9 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 62e4ff9968b5..c428ba161db1 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -335,7 +335,10 @@ static struct ctl_table kern_table[] = { | |||
| 335 | .data = &sysctl_timer_migration, | 335 | .data = &sysctl_timer_migration, |
| 336 | .maxlen = sizeof(unsigned int), | 336 | .maxlen = sizeof(unsigned int), |
| 337 | .mode = 0644, | 337 | .mode = 0644, |
| 338 | .proc_handler = &proc_dointvec, | 338 | .proc_handler = &proc_dointvec_minmax, |
| 339 | .strategy = &sysctl_intvec, | ||
| 340 | .extra1 = &zero, | ||
| 341 | .extra2 = &one, | ||
| 339 | }, | 342 | }, |
| 340 | #endif | 343 | #endif |
| 341 | { | 344 | { |
diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c index c994530d166d..4cde8b9c716f 100644 --- a/kernel/time/timer_stats.c +++ b/kernel/time/timer_stats.c | |||
| @@ -96,7 +96,7 @@ static DEFINE_MUTEX(show_mutex); | |||
| 96 | /* | 96 | /* |
| 97 | * Collection status, active/inactive: | 97 | * Collection status, active/inactive: |
| 98 | */ | 98 | */ |
| 99 | static int __read_mostly active; | 99 | int __read_mostly timer_stats_active; |
| 100 | 100 | ||
| 101 | /* | 101 | /* |
| 102 | * Beginning/end timestamps of measurement: | 102 | * Beginning/end timestamps of measurement: |
| @@ -242,7 +242,7 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | |||
| 242 | struct entry *entry, input; | 242 | struct entry *entry, input; |
| 243 | unsigned long flags; | 243 | unsigned long flags; |
| 244 | 244 | ||
| 245 | if (likely(!active)) | 245 | if (likely(!timer_stats_active)) |
| 246 | return; | 246 | return; |
| 247 | 247 | ||
| 248 | lock = &per_cpu(lookup_lock, raw_smp_processor_id()); | 248 | lock = &per_cpu(lookup_lock, raw_smp_processor_id()); |
| @@ -254,7 +254,7 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | |||
| 254 | input.timer_flag = timer_flag; | 254 | input.timer_flag = timer_flag; |
| 255 | 255 | ||
| 256 | spin_lock_irqsave(lock, flags); | 256 | spin_lock_irqsave(lock, flags); |
| 257 | if (!active) | 257 | if (!timer_stats_active) |
| 258 | goto out_unlock; | 258 | goto out_unlock; |
| 259 | 259 | ||
| 260 | entry = tstat_lookup(&input, comm); | 260 | entry = tstat_lookup(&input, comm); |
| @@ -290,7 +290,7 @@ static int tstats_show(struct seq_file *m, void *v) | |||
| 290 | /* | 290 | /* |
| 291 | * If still active then calculate up to now: | 291 | * If still active then calculate up to now: |
| 292 | */ | 292 | */ |
| 293 | if (active) | 293 | if (timer_stats_active) |
| 294 | time_stop = ktime_get(); | 294 | time_stop = ktime_get(); |
| 295 | 295 | ||
| 296 | time = ktime_sub(time_stop, time_start); | 296 | time = ktime_sub(time_stop, time_start); |
| @@ -368,18 +368,18 @@ static ssize_t tstats_write(struct file *file, const char __user *buf, | |||
| 368 | mutex_lock(&show_mutex); | 368 | mutex_lock(&show_mutex); |
| 369 | switch (ctl[0]) { | 369 | switch (ctl[0]) { |
| 370 | case '0': | 370 | case '0': |
| 371 | if (active) { | 371 | if (timer_stats_active) { |
| 372 | active = 0; | 372 | timer_stats_active = 0; |
| 373 | time_stop = ktime_get(); | 373 | time_stop = ktime_get(); |
| 374 | sync_access(); | 374 | sync_access(); |
| 375 | } | 375 | } |
| 376 | break; | 376 | break; |
| 377 | case '1': | 377 | case '1': |
| 378 | if (!active) { | 378 | if (!timer_stats_active) { |
| 379 | reset_entries(); | 379 | reset_entries(); |
| 380 | time_start = ktime_get(); | 380 | time_start = ktime_get(); |
| 381 | smp_mb(); | 381 | smp_mb(); |
| 382 | active = 1; | 382 | timer_stats_active = 1; |
| 383 | } | 383 | } |
| 384 | break; | 384 | break; |
| 385 | default: | 385 | default: |
diff --git a/kernel/timer.c b/kernel/timer.c index 54d3912f8cad..0b36b9e5cc8b 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
| @@ -380,6 +380,8 @@ static void timer_stats_account_timer(struct timer_list *timer) | |||
| 380 | { | 380 | { |
| 381 | unsigned int flag = 0; | 381 | unsigned int flag = 0; |
| 382 | 382 | ||
| 383 | if (likely(!timer->start_site)) | ||
| 384 | return; | ||
| 383 | if (unlikely(tbase_get_deferrable(timer->base))) | 385 | if (unlikely(tbase_get_deferrable(timer->base))) |
| 384 | flag |= TIMER_STATS_FLAG_DEFERRABLE; | 386 | flag |= TIMER_STATS_FLAG_DEFERRABLE; |
| 385 | 387 | ||
