diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-11 23:49:09 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-11 23:49:09 -0500 |
commit | 3070f27d6ecb69364e7cffe16c8b15e1b8ef41dd (patch) | |
tree | 6a624eb764265b67b2765b978c749fbe08871886 /include | |
parent | 1e57c2186fc204ecd5e47f279d00eba3c3db245c (diff) | |
parent | e9c0748b687aa70179a9e6d8ffc24b2874fe350b (diff) |
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
itimer: Fix the itimer trace print format
hrtimer: move timer stats helper functions to hrtimer.c
hrtimer: Tune hrtimer_interrupt hang logic
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/hrtimer.h | 56 | ||||
-rw-r--r-- | include/trace/events/timer.h | 8 |
2 files changed, 13 insertions, 51 deletions
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 9bace4b9f4fe..af634e95871d 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -162,10 +162,11 @@ struct hrtimer_clock_base { | |||
162 | * @expires_next: absolute time of the next event which was scheduled | 162 | * @expires_next: absolute time of the next event which was scheduled |
163 | * via clock_set_next_event() | 163 | * via clock_set_next_event() |
164 | * @hres_active: State of high resolution mode | 164 | * @hres_active: State of high resolution mode |
165 | * @check_clocks: Indictator, when set evaluate time source and clock | 165 | * @hang_detected: The last hrtimer interrupt detected a hang |
166 | * event devices whether high resolution mode can be | 166 | * @nr_events: Total number of hrtimer interrupt events |
167 | * activated. | 167 | * @nr_retries: Total number of hrtimer interrupt retries |
168 | * @nr_events: Total number of timer interrupt events | 168 | * @nr_hangs: Total number of hrtimer interrupt hangs |
169 | * @max_hang_time: Maximum time spent in hrtimer_interrupt | ||
169 | */ | 170 | */ |
170 | struct hrtimer_cpu_base { | 171 | struct hrtimer_cpu_base { |
171 | spinlock_t lock; | 172 | spinlock_t lock; |
@@ -173,7 +174,11 @@ struct hrtimer_cpu_base { | |||
173 | #ifdef CONFIG_HIGH_RES_TIMERS | 174 | #ifdef CONFIG_HIGH_RES_TIMERS |
174 | ktime_t expires_next; | 175 | ktime_t expires_next; |
175 | int hres_active; | 176 | int hres_active; |
177 | int hang_detected; | ||
176 | unsigned long nr_events; | 178 | unsigned long nr_events; |
179 | unsigned long nr_retries; | ||
180 | unsigned long nr_hangs; | ||
181 | ktime_t max_hang_time; | ||
177 | #endif | 182 | #endif |
178 | }; | 183 | }; |
179 | 184 | ||
@@ -435,47 +440,4 @@ extern u64 ktime_divns(const ktime_t kt, s64 div); | |||
435 | /* Show pending timers: */ | 440 | /* Show pending timers: */ |
436 | extern void sysrq_timer_list_show(void); | 441 | extern void sysrq_timer_list_show(void); |
437 | 442 | ||
438 | /* | ||
439 | * Timer-statistics info: | ||
440 | */ | ||
441 | #ifdef CONFIG_TIMER_STATS | ||
442 | |||
443 | extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | ||
444 | void *timerf, char *comm, | ||
445 | unsigned int timer_flag); | ||
446 | |||
447 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | ||
448 | { | ||
449 | if (likely(!timer_stats_active)) | ||
450 | return; | ||
451 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | ||
452 | timer->function, timer->start_comm, 0); | ||
453 | } | ||
454 | |||
455 | extern void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer, | ||
456 | void *addr); | ||
457 | |||
458 | static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) | ||
459 | { | ||
460 | __timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0)); | ||
461 | } | ||
462 | |||
463 | static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) | ||
464 | { | ||
465 | timer->start_site = NULL; | ||
466 | } | ||
467 | #else | ||
468 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | ||
469 | { | ||
470 | } | ||
471 | |||
472 | static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) | ||
473 | { | ||
474 | } | ||
475 | |||
476 | static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) | ||
477 | { | ||
478 | } | ||
479 | #endif | ||
480 | |||
481 | #endif | 443 | #endif |
diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h index e5ce87a0498d..9496b965d62a 100644 --- a/include/trace/events/timer.h +++ b/include/trace/events/timer.h | |||
@@ -301,8 +301,8 @@ TRACE_EVENT(itimer_state, | |||
301 | __entry->interval_usec = value->it_interval.tv_usec; | 301 | __entry->interval_usec = value->it_interval.tv_usec; |
302 | ), | 302 | ), |
303 | 303 | ||
304 | TP_printk("which=%d expires=%lu it_value=%lu.%lu it_interval=%lu.%lu", | 304 | TP_printk("which=%d expires=%llu it_value=%ld.%ld it_interval=%ld.%ld", |
305 | __entry->which, __entry->expires, | 305 | __entry->which, (unsigned long long)__entry->expires, |
306 | __entry->value_sec, __entry->value_usec, | 306 | __entry->value_sec, __entry->value_usec, |
307 | __entry->interval_sec, __entry->interval_usec) | 307 | __entry->interval_sec, __entry->interval_usec) |
308 | ); | 308 | ); |
@@ -331,8 +331,8 @@ TRACE_EVENT(itimer_expire, | |||
331 | __entry->pid = pid_nr(pid); | 331 | __entry->pid = pid_nr(pid); |
332 | ), | 332 | ), |
333 | 333 | ||
334 | TP_printk("which=%d pid=%d now=%lu", __entry->which, | 334 | TP_printk("which=%d pid=%d now=%llu", __entry->which, |
335 | (int) __entry->pid, __entry->now) | 335 | (int) __entry->pid, (unsigned long long)__entry->now) |
336 | ); | 336 | ); |
337 | 337 | ||
338 | #endif /* _TRACE_TIMER_H */ | 338 | #endif /* _TRACE_TIMER_H */ |