diff options
Diffstat (limited to 'include/linux/hrtimer.h')
-rw-r--r-- | include/linux/hrtimer.h | 60 |
1 files changed, 10 insertions, 50 deletions
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index b984b947f5db..b34823755ee4 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -162,19 +162,24 @@ 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 | * @to_pull: LITMUS^RT list of timers to be pulled on this cpu | 170 | * @to_pull: LITMUS^RT list of timers to be pulled on this cpu |
170 | */ | 171 | */ |
171 | struct hrtimer_cpu_base { | 172 | struct hrtimer_cpu_base { |
172 | spinlock_t lock; | 173 | raw_spinlock_t lock; |
173 | struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; | 174 | struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; |
174 | #ifdef CONFIG_HIGH_RES_TIMERS | 175 | #ifdef CONFIG_HIGH_RES_TIMERS |
175 | ktime_t expires_next; | 176 | ktime_t expires_next; |
176 | int hres_active; | 177 | int hres_active; |
178 | int hang_detected; | ||
177 | unsigned long nr_events; | 179 | unsigned long nr_events; |
180 | unsigned long nr_retries; | ||
181 | unsigned long nr_hangs; | ||
182 | ktime_t max_hang_time; | ||
178 | #endif | 183 | #endif |
179 | struct list_head to_pull; | 184 | struct list_head to_pull; |
180 | }; | 185 | }; |
@@ -460,49 +465,4 @@ extern u64 ktime_divns(const ktime_t kt, s64 div); | |||
460 | /* Show pending timers: */ | 465 | /* Show pending timers: */ |
461 | extern void sysrq_timer_list_show(void); | 466 | extern void sysrq_timer_list_show(void); |
462 | 467 | ||
463 | /* | ||
464 | * Timer-statistics info: | ||
465 | */ | ||
466 | #ifdef CONFIG_TIMER_STATS | ||
467 | |||
468 | extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | ||
469 | void *timerf, char *comm, | ||
470 | unsigned int timer_flag); | ||
471 | |||
472 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | ||
473 | { | ||
474 | if (likely(!timer->start_site)) | ||
475 | return; | ||
476 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | ||
477 | timer->function, timer->start_comm, 0); | ||
478 | } | ||
479 | |||
480 | extern void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer, | ||
481 | void *addr); | ||
482 | |||
483 | static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) | ||
484 | { | ||
485 | if (likely(!timer_stats_active)) | ||
486 | return; | ||
487 | __timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0)); | ||
488 | } | ||
489 | |||
490 | static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) | ||
491 | { | ||
492 | timer->start_site = NULL; | ||
493 | } | ||
494 | #else | ||
495 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | ||
496 | { | ||
497 | } | ||
498 | |||
499 | static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) | ||
500 | { | ||
501 | } | ||
502 | |||
503 | static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) | ||
504 | { | ||
505 | } | ||
506 | #endif | ||
507 | |||
508 | #endif | 468 | #endif |