summaryrefslogtreecommitdiffstats
path: root/include/vdso/math64.h
diff options
context:
space:
mode:
authorVincenzo Frascino <vincenzo.frascino@arm.com>2020-03-20 15:53:34 +0100
committerThomas Gleixner <tglx@linutronix.de>2020-03-21 15:23:56 +0100
commitb874b8358c756f2503c55686af842d99f5b1f312 (patch)
tree20fe8244e9c84c0b56be66a7e5c9d1c62d537de6 /include/vdso/math64.h
parentlinux/clocksource.h: Extract common header for vDSO (diff)
downloadlinux-b874b8358c756f2503c55686af842d99f5b1f312.tar.xz
linux-b874b8358c756f2503c55686af842d99f5b1f312.zip
linux/math64.h: Extract common header for vDSO
The vDSO library should only include the necessary headers required for a userspace library (UAPI and a minimal set of kernel headers). To make this possible it is necessary to isolate from the kernel headers the common parts that are strictly necessary to build the library. Split math64.h into linux and common headers to make the latter suitable for inclusion in the vDSO library. Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20200320145351.32292-10-vincenzo.frascino@arm.com
Diffstat (limited to 'include/vdso/math64.h')
-rw-r--r--include/vdso/math64.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/include/vdso/math64.h b/include/vdso/math64.h
new file mode 100644
index 000000000000..7da703ee5561
--- /dev/null
+++ b/include/vdso/math64.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_MATH64_H
+#define __VDSO_MATH64_H
+
+static __always_inline u32
+__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
+{
+ u32 ret = 0;
+
+ while (dividend >= divisor) {
+ /* The following asm() prevents the compiler from
+ optimising this loop into a modulo operation. */
+ asm("" : "+rm"(dividend));
+
+ dividend -= divisor;
+ ret++;
+ }
+
+ *remainder = dividend;
+
+ return ret;
+}
+
+#endif /* __VDSO_MATH64_H */