Messages in this thread Patches in this message | | | Subject | Latency histogram broken after "hrtimer: Set expiry time before switch_hrtimer_base()" | From | Ben Hutchings <> | Date | Sun, 22 Jun 2014 02:04:25 +0100 |
| |
In an rt-kernel with CONFIG_MISSED_TIMER_OFFSETS_HIST enabled, __hrtimer_start_range_ns() now crashes, as new_base is not assigned before it is used.
I'm not sure how this should be fixed; is it:
--- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1108,7 +1108,7 @@ int __hrtimer_start_range_ns(struct hrti #ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST { - ktime_t now = new_base->get_time(); + ktime_t now = base->get_time(); if (ktime_to_ns(tim) < ktime_to_ns(now)) timer->praecox = now; --- END --- or:
--- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1106,6 +1106,11 @@ int __hrtimer_start_range_ns(struct hrti #endif } + hrtimer_set_expires_range_ns(timer, tim, delta_ns); + + /* Switch the timer base, if necessary: */ + new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED); + #ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST { ktime_t now = new_base->get_time(); @@ -1117,11 +1122,6 @@ int __hrtimer_start_range_ns(struct hrti } #endif - hrtimer_set_expires_range_ns(timer, tim, delta_ns); - - /* Switch the timer base, if necessary: */ - new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED); - timer_stats_hrtimer_set_start_info(timer); leftmost = enqueue_hrtimer(timer, new_base); --- END --- or something else?
Ben.
-- Ben Hutchings 73.46% of all statistics are made up. [unhandled content-type:application/pgp-signature] | |