summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2017-04-07 17:32:35 +0200
committerDaniel Lezcano <daniel.lezcano@linaro.org>2017-05-16 10:48:45 +0200
commit979a7b878fefea6bb67fa4e3a53eef12e99ddb41 (patch)
tree82199dc60f01012ec105af8fc69b80dc79d0d32c
parent13c31116249fead9aee50aa7dfda82e655f183cf (diff)
trace: irq: Add next event trace
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r--include/trace/events/irq.h29
-rw-r--r--kernel/irq/timings.c3
2 files changed, 32 insertions, 0 deletions
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h
index 1c41b74581f7..dc3c6f22fcb9 100644
--- a/include/trace/events/irq.h
+++ b/include/trace/events/irq.h
@@ -99,6 +99,35 @@ TRACE_EVENT(irq_handler_exit,
__entry->irq, __entry->ret ? "handled" : "unhandled")
);
+#ifdef CONFIG_IRQ_TIMINGS
+/**
+ * irq_timings_next_event - called when the next irq event is computed
+ * @irq: the irq number
+ * @ne: next event timeline in nanosec unit based
+ *
+ * If there is no event predicted at the moment this function is called,
+ * the next event is U64_MAX.
+ */
+TRACE_EVENT(irq_timings_next_event,
+
+ TP_PROTO(int irq, u64 ne),
+
+ TP_ARGS(irq, ne),
+
+ TP_STRUCT__entry(
+ __field( int, irq )
+ __field( u64, ne )
+ ),
+
+ TP_fast_assign(
+ __entry->irq = irq;
+ __entry->ne = ne;
+ ),
+
+ TP_printk("irq=%d next_event=%llu", __entry->irq, __entry->ne)
+);
+#endif
+
DECLARE_EVENT_CLASS(softirq,
TP_PROTO(unsigned int vec_nr),
diff --git a/kernel/irq/timings.c b/kernel/irq/timings.c
index 2dba2e745302..d50736473600 100644
--- a/kernel/irq/timings.c
+++ b/kernel/irq/timings.c
@@ -363,6 +363,9 @@ u64 irq_timings_next_event(u64 now)
}
}
+ if (irq)
+ trace_irq_timings_next_event(irq, ne);
+
return ne;
}