aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/hrtimer/timer_stats.txt7
-rw-r--r--kernel/time/timer_stats.c7
-rw-r--r--lib/Kconfig.debug5
3 files changed, 14 insertions, 5 deletions
diff --git a/Documentation/hrtimer/timer_stats.txt b/Documentation/hrtimer/timer_stats.txt
index 27f782e3593f..22b0814d0ad0 100644
--- a/Documentation/hrtimer/timer_stats.txt
+++ b/Documentation/hrtimer/timer_stats.txt
@@ -2,9 +2,10 @@ timer_stats - timer usage statistics
2------------------------------------ 2------------------------------------
3 3
4timer_stats is a debugging facility to make the timer (ab)usage in a Linux 4timer_stats is a debugging facility to make the timer (ab)usage in a Linux
5system visible to kernel and userspace developers. It is not intended for 5system visible to kernel and userspace developers. If enabled in the config
6production usage as it adds significant overhead to the (hr)timer code and the 6but not used it has almost zero runtime overhead, and a relatively small
7(hr)timer data structures. 7data structure overhead. Even if collection is enabled runtime all the
8locking is per-CPU and lookup is hashed.
8 9
9timer_stats should be used by kernel and userspace developers to verify that 10timer_stats should be used by kernel and userspace developers to verify that
10their code does not make unduly use of timers. This helps to avoid unnecessary 11their code does not make unduly use of timers. This helps to avoid unnecessary
diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c
index fa3d380ca8c0..321693724ad7 100644
--- a/kernel/time/timer_stats.c
+++ b/kernel/time/timer_stats.c
@@ -236,10 +236,15 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
236 /* 236 /*
237 * It doesnt matter which lock we take: 237 * It doesnt matter which lock we take:
238 */ 238 */
239 spinlock_t *lock = &per_cpu(lookup_lock, raw_smp_processor_id()); 239 spinlock_t *lock;
240 struct entry *entry, input; 240 struct entry *entry, input;
241 unsigned long flags; 241 unsigned long flags;
242 242
243 if (likely(!active))
244 return;
245
246 lock = &per_cpu(lookup_lock, raw_smp_processor_id());
247
243 input.timer = timer; 248 input.timer = timer;
244 input.start_func = startf; 249 input.start_func = startf;
245 input.expire_func = timerf; 250 input.expire_func = timerf;
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 1ba77ca7d165..da95e10cfd70 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -126,7 +126,10 @@ config TIMER_STATS
126 reprogrammed. The statistics can be read from /proc/timer_stats. 126 reprogrammed. The statistics can be read from /proc/timer_stats.
127 The statistics collection is started by writing 1 to /proc/timer_stats, 127 The statistics collection is started by writing 1 to /proc/timer_stats,
128 writing 0 stops it. This feature is useful to collect information 128 writing 0 stops it. This feature is useful to collect information
129 about timer usage patterns in kernel and userspace. 129 about timer usage patterns in kernel and userspace. This feature
130 is lightweight if enabled in the kernel config but not activated
131 (it defaults to deactivated on bootup and will only be activated
132 if some application like powertop activates it explicitly).
130 133
131config DEBUG_SLAB 134config DEBUG_SLAB
132 bool "Debug slab memory allocations" 135 bool "Debug slab memory allocations"