[PATCH] backports: make backports-4.18 compatible with kernel < 3.19

Oleksandr Suvorov <[email protected]>
Newsgroups org.kernel.vger.backports
Message-ID <[email protected]>
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 <[email protected]>
---

 backport/compat/backport-4.18.c | 36 +++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

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);
+
-- 
2.25.1

--
To unsubscribe from this list: send the line "unsubscribe backports" in
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.