tracing/hrtimer: Print the hrtimer mode in the 'hrtimer_start' tracepoint
The 'hrtimer_start' tracepoint lacks the mode information. The mode is important because consecutive starts can switch from ABS to REL or from PINNED to non PINNED. Append the mode field. Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> Cc: Christoph Hellwig <hch@lst.de> Cc: John Stultz <john.stultz@linaro.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: keescook@chromium.org Link: http://lkml.kernel.org/r/20171221104205.7269-10-anna-maria@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
91633eed73
commit
63e2ed3659
|
@ -186,15 +186,16 @@ TRACE_EVENT(hrtimer_init,
|
|||
*/
|
||||
TRACE_EVENT(hrtimer_start,
|
||||
|
||||
TP_PROTO(struct hrtimer *hrtimer),
|
||||
TP_PROTO(struct hrtimer *hrtimer, enum hrtimer_mode mode),
|
||||
|
||||
TP_ARGS(hrtimer),
|
||||
TP_ARGS(hrtimer, mode),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, hrtimer )
|
||||
__field( void *, function )
|
||||
__field( s64, expires )
|
||||
__field( s64, softexpires )
|
||||
__field( enum hrtimer_mode, mode )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
|
@ -202,12 +203,14 @@ TRACE_EVENT(hrtimer_start,
|
|||
__entry->function = hrtimer->function;
|
||||
__entry->expires = hrtimer_get_expires(hrtimer);
|
||||
__entry->softexpires = hrtimer_get_softexpires(hrtimer);
|
||||
__entry->mode = mode;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer=%p function=%pf expires=%llu softexpires=%llu",
|
||||
__entry->hrtimer, __entry->function,
|
||||
TP_printk("hrtimer=%p function=%pf expires=%llu softexpires=%llu "
|
||||
"mode=%s", __entry->hrtimer, __entry->function,
|
||||
(unsigned long long) __entry->expires,
|
||||
(unsigned long long) __entry->softexpires)
|
||||
(unsigned long long) __entry->softexpires,
|
||||
decode_hrtimer_mode(__entry->mode))
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
@ -435,10 +435,11 @@ debug_init(struct hrtimer *timer, clockid_t clockid,
|
|||
trace_hrtimer_init(timer, clockid, mode);
|
||||
}
|
||||
|
||||
static inline void debug_activate(struct hrtimer *timer)
|
||||
static inline void debug_activate(struct hrtimer *timer,
|
||||
enum hrtimer_mode mode)
|
||||
{
|
||||
debug_hrtimer_activate(timer);
|
||||
trace_hrtimer_start(timer);
|
||||
trace_hrtimer_start(timer, mode);
|
||||
}
|
||||
|
||||
static inline void debug_deactivate(struct hrtimer *timer)
|
||||
|
@ -828,9 +829,10 @@ EXPORT_SYMBOL_GPL(hrtimer_forward);
|
|||
* Returns 1 when the new timer is the leftmost timer in the tree.
|
||||
*/
|
||||
static int enqueue_hrtimer(struct hrtimer *timer,
|
||||
struct hrtimer_clock_base *base)
|
||||
struct hrtimer_clock_base *base,
|
||||
enum hrtimer_mode mode)
|
||||
{
|
||||
debug_activate(timer);
|
||||
debug_activate(timer, mode);
|
||||
|
||||
base->cpu_base->active_bases |= 1 << base->index;
|
||||
|
||||
|
@ -953,7 +955,7 @@ void hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
|
|||
/* Switch the timer base, if necessary: */
|
||||
new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED);
|
||||
|
||||
leftmost = enqueue_hrtimer(timer, new_base);
|
||||
leftmost = enqueue_hrtimer(timer, new_base, mode);
|
||||
if (!leftmost)
|
||||
goto unlock;
|
||||
|
||||
|
@ -1222,7 +1224,7 @@ static void __run_hrtimer(struct hrtimer_cpu_base *cpu_base,
|
|||
*/
|
||||
if (restart != HRTIMER_NORESTART &&
|
||||
!(timer->state & HRTIMER_STATE_ENQUEUED))
|
||||
enqueue_hrtimer(timer, base);
|
||||
enqueue_hrtimer(timer, base, HRTIMER_MODE_ABS);
|
||||
|
||||
/*
|
||||
* Separate the ->running assignment from the ->state assignment.
|
||||
|
@ -1621,7 +1623,7 @@ static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
|
|||
* sort out already expired timers and reprogram the
|
||||
* event device.
|
||||
*/
|
||||
enqueue_hrtimer(timer, new_base);
|
||||
enqueue_hrtimer(timer, new_base, HRTIMER_MODE_ABS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue