Commit-ID:  91633eed73a3ac37aaece5c8c1f93a18bae616a9
Gitweb:     https://git.kernel.org/tip/91633eed73a3ac37aaece5c8c1f93a18bae616a9
Author:     Anna-Maria Gleixner <[email protected]>
AuthorDate: Thu, 21 Dec 2017 11:41:37 +0100
Committer:  Ingo Molnar <[email protected]>
CommitDate: Tue, 16 Jan 2018 02:35:45 +0100

tracing/hrtimer: Fix tracing bugs by taking all clock bases and modes into 
account

So far only CLOCK_MONOTONIC and CLOCK_REALTIME were taken into account as
well as HRTIMER_MODE_ABS/REL in the hrtimer_init tracepoint. The query for
detecting the ABS or REL timer modes is not valid anymore, it got broken
by the introduction of HRTIMER_MODE_PINNED.

HRTIMER_MODE_PINNED is not evaluated in the hrtimer_init() call, but for the
sake of completeness print all given modes.

Signed-off-by: Anna-Maria Gleixner <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: John Stultz <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: [email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
---
 include/trace/events/timer.h | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h
index 16e305e..c6f7280 100644
--- a/include/trace/events/timer.h
+++ b/include/trace/events/timer.h
@@ -136,6 +136,20 @@ DEFINE_EVENT(timer_class, timer_cancel,
        TP_ARGS(timer)
 );
 
+#define decode_clockid(type)                                           \
+       __print_symbolic(type,                                          \
+               { CLOCK_REALTIME,       "CLOCK_REALTIME"        },      \
+               { CLOCK_MONOTONIC,      "CLOCK_MONOTONIC"       },      \
+               { CLOCK_BOOTTIME,       "CLOCK_BOOTTIME"        },      \
+               { CLOCK_TAI,            "CLOCK_TAI"             })
+
+#define decode_hrtimer_mode(mode)                                      \
+       __print_symbolic(mode,                                          \
+               { HRTIMER_MODE_ABS,             "ABS"           },      \
+               { HRTIMER_MODE_REL,             "REL"           },      \
+               { HRTIMER_MODE_ABS_PINNED,      "ABS|PINNED"    },      \
+               { HRTIMER_MODE_REL_PINNED,      "REL|PINNED"    })
+
 /**
  * hrtimer_init - called when the hrtimer is initialized
  * @hrtimer:   pointer to struct hrtimer
@@ -162,10 +176,8 @@ TRACE_EVENT(hrtimer_init,
        ),
 
        TP_printk("hrtimer=%p clockid=%s mode=%s", __entry->hrtimer,
-                 __entry->clockid == CLOCK_REALTIME ?
-                       "CLOCK_REALTIME" : "CLOCK_MONOTONIC",
-                 __entry->mode == HRTIMER_MODE_ABS ?
-                       "HRTIMER_MODE_ABS" : "HRTIMER_MODE_REL")
+                 decode_clockid(__entry->clockid),
+                 decode_hrtimer_mode(__entry->mode))
 );
 
 /**

Reply via email to