Message ID | 20200706085624.515714-1-oleksandr.suvorov@toradex.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | backports: make backports-4.18 compatible with kernel < 3.19 | expand |
On 7/6/20 10:56 AM, Oleksandr Suvorov wrote: > backports-4.18.c uses ktime_divns() function. > As ktime_divns() is not exported in kernel < 3.19, this symbol > will not be resolved on compat.ko loading. > This commit fixes the linking issue [1]. > > [1] > ------------------------------- > WARNING: "ktime_divns" [compat/compat.ko] undefined! > ------------------------------- > > Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com> > --- > > backport/compat/backport-4.18.c | 36 +++++++++++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > Thank you for the patches, I applied all 3 of them to master and the 5.4 branch. Hauke
diff --git a/backport/compat/backport-4.18.c b/backport/compat/backport-4.18.c index c47fabe5..40551c76 100644 --- a/backport/compat/backport-4.18.c +++ b/backport/compat/backport-4.18.c @@ -1,11 +1,47 @@ /* * Copyright (C) 2018 Intel Corporation + * Copyright (c) 2020 Toradex */ #include <linux/hrtimer.h> +/* + * Before the commit 8b618628b2b the ktime_divns was non-exported function. + * Add the simple implementation of ktime_divns() to use in + * ktime_get_boottime_seconds(). + */ +#if LINUX_VERSION_IS_LESS(3,19,0) + +#include <linux/ktime.h> + +#if BITS_PER_LONG < 64 +/* + * Divide a ktime value by a nanosecond value + */ +u64 ktime_divns(const ktime_t kt, s64 div) +{ + int sft = 0; + s64 dclc; + u64 tmp; + + dclc = ktime_to_ns(kt); + tmp = dclc < 0 ? -dclc : dclc; + + /* Make sure the divisor is less than 2^32: */ + while (div >> 32) { + sft++; + div >>= 1; + } + tmp >>= sft; + do_div(tmp, (unsigned long) div); + return dclc < 0 ? -tmp : tmp; +} +#endif /* BITS_PER_LONG >= 64 */ +#endif /* < 3.19 */ + time64_t ktime_get_boottime_seconds(void) { return ktime_divns(ktime_get_boottime(), NSEC_PER_SEC); } EXPORT_SYMBOL_GPL(ktime_get_boottime_seconds); +
backports-4.18.c uses ktime_divns() function. As ktime_divns() is not exported in kernel < 3.19, this symbol will not be resolved on compat.ko loading. This commit fixes the linking issue [1]. [1] ------------------------------- WARNING: "ktime_divns" [compat/compat.ko] undefined! ------------------------------- Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com> --- backport/compat/backport-4.18.c | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+)