Re: [PATCH] tracing/hwlat: Store the maximum latency in nanoseconds
From: Steven Rostedt
Date: Thu Nov 12 2026 - 05:20:06 EST
On Wed, 11 Nov 2026 11:13:04 +0800
Wenwu Hou <hwenwur@xxxxxxxxx> wrote:
> tr->max_latency is expected to hold nanoseconds: tracing_max_lat_read()
> converts it with nsecs_to_usecs() to print the usecs documented in
> hwlat_detector.rst, and the other latency tracers store nanoseconds there
> too.
>
> Fixes: e7c15cd8a1133 ("tracing: Added hardware latency tracer")
> Signed-off-by: Wenwu Hou <hwenwur@xxxxxxxxx>
Amazing that this bug has been here for 10 years and nobody noticed.
> ---
> kernel/trace/trace_hwlat.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c
> index 65e184d800ff1..701b6a542e51a 100644
> --- a/kernel/trace/trace_hwlat.c
> +++ b/kernel/trace/trace_hwlat.c
> @@ -293,7 +293,7 @@ static int get_sample(void)
> s.count = count;
> trace_hwlat_sample(&s);
>
> - latency = max(sample, outer_sample);
> + latency = max(sample, outer_sample) * NSEC_PER_USEC;
The real fix is to just use nanoseconds in the calculations. The only
reason it was doing the conversions was to match max_latency anyway.
The time recorded in the events would need to be converted to
microseconds too, if the raw numbers are in nanos.
Thanks,
-- Steve
>
> /* Keep a running maximum ever recorded hardware latency */
> if (latency > tr->max_latency) {