]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tracing/hrtimer: Print the hrtimer mode in the 'hrtimer_start' tracepoint
authorAnna-Maria Gleixner <anna-maria@linutronix.de>
Thu, 21 Dec 2017 10:41:38 +0000 (11:41 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 16 Jan 2018 01:35:46 +0000 (02:35 +0100)
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>
include/trace/events/timer.h
kernel/time/hrtimer.c

index c6f728037c53b234bacdc7babe85e5b705707f54..744b4310b24b0b8922877a926fd124cf8954efca 100644 (file)
@@ -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))
 );
 
 /**
index 60faade2bb4ed278beae7c0026529b5d49a31eb1..f4f46589d7cc95ac4b4de453f14e8e76b708584f 100644 (file)
@@ -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);
        }
 }