diff options
| author | Mikhail Kshevetskiy <[email protected]> | 2025-11-01 09:24:23 +0300 |
|---|---|---|
| committer | Michael Trimarchi <[email protected]> | 2025-11-18 20:06:21 +0100 |
| commit | 5572d9410074b56ad25d35b0d3e17c93d8dbaeb0 (patch) | |
| tree | be0436d6ebd2e5cceaeabd16cae126dbcce52028 | |
| parent | 75153d92a5c02d8eba01c0893f6aff69ad4d2e2b (diff) | |
cmd: mtd: benchmark: use lldiv() instead of 64-bit division
As was noted by Heinrich Schuchardt, some SoCs may not support 64-bit
divisions. Fix an issue by using lldiv() instead.
The code assumes that the benchmark never takes more than 4294 seconds
and thus the difference will be less than U32_MAX.
Also replace (speed / 1024) by (speed >> 10) to avoid potential 64-bit
division.
Signed-off-by: Mikhail Kshevetskiy <[email protected]>
| -rw-r--r-- | cmd/mtd.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/cmd/mtd.c b/cmd/mtd.c index d0072129659..7f25144098b 100644 --- a/cmd/mtd.c +++ b/cmd/mtd.c @@ -10,6 +10,7 @@ #include <command.h> #include <console.h> +#include <div64.h> #include <led.h> #if CONFIG_IS_ENABLED(CMD_MTD_OTP) #include <hexdump.h> @@ -595,10 +596,10 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, int argc, if (benchmark && bench_start) { bench_end = timer_get_us(); - speed = (len * 1000000) / (bench_end - bench_start); + speed = lldiv(len * 1000000, bench_end - bench_start); printf("%s speed: %lukiB/s\n", read ? "Read" : "Write", - (unsigned long)(speed / 1024)); + (unsigned long)(speed >> 10)); } led_activity_off(); |
