From c370026b0a077ba9491b07c559b343fde6353074 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Mon, 25 May 2026 10:38:18 -0400 Subject: [PATCH] fix: hrtimer: Reduce trace noise in hrtimer_start() (v7.1) See upstream commit: commit f2e388a019e4cf83a15883a3d1f1384298e9a6aa Author: Thomas Gleixner Date: Tue Feb 24 17:36:59 2026 +0100 hrtimer: Reduce trace noise in hrtimer_start() hrtimer_start() when invoked with an already armed timer traces like: -.. [032] d.h2. 5.002263: hrtimer_cancel: hrtimer= .... -.. [032] d.h1. 5.002263: hrtimer_start: hrtimer= .... Which is incorrect as the timer doesn't get canceled. Just the expiry time changes. The internal dequeue operation which is required for that is not really interesting for trace analysis. But it makes it tedious to keep real cancellations and the above case apart. Remove the cancel tracing in hrtimer_start() and add a 'was_armed' indicator to the hrtimer start tracepoint, which clearly indicates what the state of the hrtimer is when hrtimer_start() is invoked: -.. [032] d.h1. 6.200103: hrtimer_start: hrtimer= .... was_armed=0 -.. [032] d.h1. 6.200558: hrtimer_start: hrtimer= .... was_armed=1 Change-Id: I37ee0ae0af665a51fd4f92adffb6b1dcb2ecd9d2 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers Upstream-Status: Backport [https://github.com/lttng/lttng-modules/commit/b77f94c7a7109e70a97bf936b72d66d611187d61] Signed-off-by: He Zhe [YC: Backport: revert usage of non-defined-yet ctf_enum] Signed-off-by: Yoann Congal --- include/instrumentation/events/timer.h | 39 ++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/include/instrumentation/events/timer.h b/include/instrumentation/events/timer.h index bd21c03..9d4476a 100644 --- a/include/instrumentation/events/timer.h +++ b/include/instrumentation/events/timer.h @@ -203,12 +203,43 @@ LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_init, ) ) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(7,1,0) || \ + LTTNG_KERNEL_RANGE(7,0,10, 7,1,0) || \ + LTTNG_KERNEL_RANGE(6,18,33, 6,19,0) || \ + LTTNG_KERNEL_RANGE(6,12,91, 6,13,0) || \ + LTTNG_KERNEL_RANGE(6,6,141, 6,7,0)) /** * hrtimer_start - called when the hrtimer is started - * @timer: pointer to struct hrtimer + * @hrtimer: pointer to struct hrtimer + * @mode: the hrtimers mode + * @was_armed: Was armed when hrtimer_start*() was invoked */ -#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,16,0) || \ +LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, + + timer_hrtimer_start, + + TP_PROTO(struct hrtimer *hrtimer, enum hrtimer_mode mode, bool was_armed), + + TP_ARGS(hrtimer, mode, was_armed), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ctf_integer_hex(void *, function, hrtimer->function) + ctf_integer(s64, expires, + lttng_ktime_get_tv64(hrtimer_get_expires(hrtimer))) + ctf_integer(s64, softexpires, + lttng_ktime_get_tv64(hrtimer_get_softexpires(hrtimer))) + ctf_integer(enum hrtimer_mode, mode, mode) + ctf_integer(bool, was_armed, was_armed) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,16,0) || \ LTTNG_RT_KERNEL_RANGE(4,14,0,0, 4,15,0,0)) +/** + * hrtimer_start - called when the hrtimer is started + * @hrtimer: pointer to struct hrtimer + * @mode: the hrtimers mode + */ LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, timer_hrtimer_start, @@ -228,6 +259,10 @@ LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, ) ) #else +/** + * hrtimer_start - called when the hrtimer is started + * @hrtimer: pointer to struct hrtimer + */ LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, timer_hrtimer_start,