Messages in this thread Patch in this message | | | From | Yong Zhang <> | Subject | [RFC PATCH 4/6] hrtimer: change call site of timer_stats_hrtimer_clear_start_info() | Date | Sun, 29 Aug 2010 23:05:07 +0800 |
| |
From: Yong Zhang <yong.zhang@windriver.com>
Put timer_stats_hrtimer_clear_start_info() to the real cancel place.
Because remove_hrtimer() is used for internal, and it could be called as below: int __hrtimer_start_range_ns(ARG) { ... remove_hrtimer(); ... timer_stats_hrtimer_set_start_info(); }
Then if remove_hrtimer() clear the start_site, the following timer_stats_hrtimer_set_start_info() will record the caller of __hrtimer_start_range_ns as start_site. But this is not what we want.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> --- kernel/hrtimer.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index ce66917..2b79ab4 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -772,7 +772,7 @@ static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) static inline void timer_stats_account_hrtimer(struct hrtimer *timer) { #ifdef CONFIG_TIMER_STATS - if (likely(!timer_stats_active)) + if (!timer->start_site) return; timer_stats_update_stats(timer, timer->start_pid, timer->start_site, timer->function, timer->start_comm, 0); @@ -942,7 +942,6 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base) * rare case and less expensive than a smp call. */ debug_deactivate(timer); - timer_stats_hrtimer_clear_start_info(timer); reprogram = base->cpu_base == &__get_cpu_var(hrtimer_bases); __remove_hrtimer(timer, base, HRTIMER_STATE_INACTIVE, reprogram); @@ -1055,9 +1054,10 @@ int hrtimer_try_to_cancel(struct hrtimer *timer) base = lock_hrtimer_base(timer, &flags); - if (!hrtimer_callback_running(timer)) + if (!hrtimer_callback_running(timer)){ + timer_stats_hrtimer_clear_start_info(timer); ret = remove_hrtimer(timer, base); - + } unlock_hrtimer_base(timer, &flags); return ret; -- 1.7.0.4
| |