]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: cxd2841er: fix 64-bit division on gcc-9
authorArnd Bergmann <arnd@arndb.de>
Mon, 11 Nov 2024 10:41:42 +0000 (11:41 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Mon, 2 Dec 2024 13:05:23 +0000 (14:05 +0100)
It appears that do_div() once more gets confused by a complex
expression that ends up not quite being constant despite
__builtin_constant_p() thinking it is:

ERROR: modpost: "__aeabi_uldivmod" [drivers/media/dvb-frontends/cxd2841er.ko] undefined!

Use div_u64() instead, forcing the expression to be evaluated
first, and making it a bit more readable.

Cc: Dan Carpenter <dan.carpenter@linaro.org>
Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
Closes: https://lore.kernel.org/linux-media/CA+G9fYvvNm-aYodLaAwwTjEGtX0YxR-1R14FOA5aHKt0sSVsYg@mail.gmail.com/
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Closes: https://lore.kernel.org/linux-media/CA+G9fYvvNm-aYodLaAwwTjEGtX0YxR-1R14FOA5aHKt0sSVsYg@mail.gmail.com/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
[hverkuil: added Closes tags]

drivers/media/dvb-frontends/cxd2841er.c

index d925ca24183b50175b36cb57a84b9a29e817f14d..415f1f91cc30724a77b6bb417e33f25aacf5a909 100644 (file)
@@ -311,12 +311,8 @@ static int cxd2841er_set_reg_bits(struct cxd2841er_priv *priv,
 
 static u32 cxd2841er_calc_iffreq_xtal(enum cxd2841er_xtal xtal, u32 ifhz)
 {
-       u64 tmp;
-
-       tmp = (u64) ifhz * 16777216;
-       do_div(tmp, ((xtal == SONY_XTAL_24000) ? 48000000 : 41000000));
-
-       return (u32) tmp;
+       return div_u64(ifhz * 16777216ull,
+                      (xtal == SONY_XTAL_24000) ? 48000000 : 41000000);
 }
 
 static u32 cxd2841er_calc_iffreq(u32 ifhz)