lkml.org 
[lkml]   [2018]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:timers/core] tracing/hrtimer: Print the hrtimer mode in the 'hrtimer_start' tracepoint
    Commit-ID:  63e2ed3659752a4850e0ef3a07f809988fcd74a4
    Gitweb: https://git.kernel.org/tip/63e2ed3659752a4850e0ef3a07f809988fcd74a4
    Author: Anna-Maria Gleixner <anna-maria@linutronix.de>
    AuthorDate: Thu, 21 Dec 2017 11:41:38 +0100
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Tue, 16 Jan 2018 02:35:46 +0100

    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>
    ---
    include/trace/events/timer.h | 13 ++++++++-----
    kernel/time/hrtimer.c | 16 +++++++++-------
    2 files changed, 17 insertions(+), 12 deletions(-)

    diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h
    index c6f7280..744b431 100644
    --- a/include/trace/events/timer.h
    +++ b/include/trace/events/timer.h
    @@ -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))
    );

    /**
    diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
    index 60faade..f4f4658 100644
    --- a/kernel/time/hrtimer.c
    +++ b/kernel/time/hrtimer.c
    @@ -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);
    }
    }

    \
     
     \ /
      Last update: 2018-01-16 04:48    [W:4.213 / U:0.496 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site