[tip: timers/core] linux/math64.h: Extract common header for vDSO

From: tip-bot2 for Vincenzo Frascino
Date: Sat Mar 21 2020 - 10:33:48 EST


The following commit has been merged into the timers/core branch of tip:

Commit-ID: b874b8358c756f2503c55686af842d99f5b1f312
Gitweb: https://git.kernel.org/tip/b874b8358c756f2503c55686af842d99f5b1f312
Author: Vincenzo Frascino <vincenzo.frascino@xxxxxxx>
AuthorDate: Fri, 20 Mar 2020 14:53:34
Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
CommitterDate: Sat, 21 Mar 2020 15:23:56 +01:00

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@xxxxxxx>
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Link: https://lkml.kernel.org/r/20200320145351.32292-10-vincenzo.frascino@xxxxxxx

---
include/linux/math64.h | 20 +-------------------
include/vdso/math64.h | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 19 deletions(-)
create mode 100644 include/vdso/math64.h

diff --git a/include/linux/math64.h b/include/linux/math64.h
index 65bef21..11a2674 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -3,6 +3,7 @@
#define _LINUX_MATH64_H

#include <linux/types.h>
+#include <vdso/math64.h>
#include <asm/div64.h>

#if BITS_PER_LONG == 64
@@ -142,25 +143,6 @@ static inline s64 div_s64(s64 dividend, s32 divisor)

u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);

-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;
-}
-
#ifndef mul_u32_u32
/*
* Many a GCC version messes this up and generates a 64x64 mult :-(
diff --git a/include/vdso/math64.h b/include/vdso/math64.h
new file mode 100644
index 0000000..7da703e
--- /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 */