]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
can: dev: print bitrate error with two decimal digits
authorOliver Hartkopp <socketcan@hartkopp.net>
Wed, 26 Nov 2025 10:16:18 +0000 (11:16 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 26 Nov 2025 10:20:44 +0000 (11:20 +0100)
Increase the resolution when printing the bitrate error and round-up the
value to 0.01% in the case the resolution would still provide values
which would lead to 0.00%.

Suggested-by: Vincent Mailhol <mailhol@kernel.org>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://patch.msgid.link/20251126-canxl-v8-17-e7e3eb74f889@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/dev/calc_bittiming.c

index 60a505ce69de53f79511383ccbcafbd64eba93b6..cc4022241553fa6389c2cde698456de723ef6929 100644 (file)
@@ -153,19 +153,22 @@ int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt,
        }
 
        if (best_bitrate_error) {
-               /* Error in one-tenth of a percent */
-               v64 = (u64)best_bitrate_error * 1000;
+               /* Error in one-hundredth of a percent */
+               v64 = (u64)best_bitrate_error * 10000;
                do_div(v64, bt->bitrate);
                bitrate_error = (u32)v64;
+               /* print at least 0.01% if the error is smaller */
+               bitrate_error = max(bitrate_error, 1U);
                if (bitrate_error > CAN_CALC_MAX_ERROR) {
                        NL_SET_ERR_MSG_FMT(extack,
-                                          "bitrate error: %u.%u%% too high",
-                                          bitrate_error / 10, bitrate_error % 10);
+                                          "bitrate error: %u.%02u%% too high",
+                                          bitrate_error / 100,
+                                          bitrate_error % 100);
                        return -EINVAL;
                }
                NL_SET_ERR_MSG_FMT(extack,
-                                  "bitrate error: %u.%u%%",
-                                  bitrate_error / 10, bitrate_error % 10);
+                                  "bitrate error: %u.%02u%%",
+                                  bitrate_error / 100, bitrate_error % 100);
        }
 
        /* real sample point */