Re: [PATCH] tracing: Explicitly cast divisor to fix Coccinelle warning

From: Thorsten Blum
Date: Wed Mar 20 2024 - 12:30:19 EST


On 20. Mar 2024, at 16:01, Thorsten Blum <thorsten.blum@xxxxxxxxxx> wrote:
>
> Coccinelle also finds this one, but please ignore this patch as I just realized
> this was already fixed in another patch of mine from February.
>
> Sorry for the inconvenience.
>
> Link: https://lore.kernel.org/linux-kernel/20240225164507.232942-2-thorsten.blum@xxxxxxxxxx/

Actually, I will submit a new patch to revert

delta = div64_u64(delta, bm_cnt);

back to

do_div(delta, bm_cnt);

but this time include an explicit cast to u32

do_div(delta, (u32)bm_cnt);

to remove the Coccinelle warning reported by do_div.cocci and to improve
performance.

The do_div() macro does a 64-by-32 division which is faster than the 64-by-64
division done by div64_u64(). Casting the divisor bm_cnt to u32 is safe since
we return early from trace_do_benchmark() if bm_cnt > UINT_MAX (something I
missed in d6cb38e10810).

This approach is already used when calculating the standard deviation:

do_div(stddev, (u32)bm_cnt);
do_div(stddev, (u32)bm_cnt - 1);

Thanks,
Thorsten