Linux-MIPS Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 00/19] Introduce common headers
@ 2020-02-13 16:15 Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 01/19] linux/const.h: Extract common header for vDSO Vincenzo Frascino
                   ` (18 more replies)
  0 siblings, 19 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:15 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

Back in July last year we started having a problem in building compat
vDSOs on arm64 [1] [2] that was not present when the arm64 porting to
the Unified vDSO was done. In particular when the compat vDSO on such
architecture is built with gcc it generates the warning below:

In file included from ./arch/arm64/include/asm/thread_info.h:17:0,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/arm64/include/asm/preempt.h:5,
                 from ./include/linux/preempt.h:78,
                 from ./include/linux/spinlock.h:51,
                 from ./include/linux/seqlock.h:36,
                 from ./include/linux/time.h:6,
                 from ./lib/vdso/gettimeofday.c:7,
                 from <command-line>:0:
./arch/arm64/include/asm/memory.h: In function ‘__tag_set’:
./arch/arm64/include/asm/memory.h:233:15: warning: cast from pointer
                to integer of different size [-Wpointer-to-int-cast]
  u64 __addr = (u64)addr & ~__tag_shifted(0xff);
               ^
In file included from ./arch/arm64/include/asm/pgtable-hwdef.h:8:0,
                 from ./arch/arm64/include/asm/processor.h:34,
                 from ./arch/arm64/include/asm/elf.h:118,
                 from ./include/linux/elf.h:5,
                 from ./include/linux/elfnote.h:62,
                 from arch/arm64/kernel/vdso32/note.c:11:
./arch/arm64/include/asm/memory.h: In function ‘__tag_set’:
./arch/arm64/include/asm/memory.h:233:15: warning: cast from pointer
                to integer of different size [-Wpointer-to-int-cast]
  u64 __addr = (u64)addr & ~__tag_shifted(0xff);

The same porting does not build at all when the selected compiler is
clang.

I started an investigation to try to understand better the problem and
after various discussions at Plumbers and Recipes last year the
conclusion was that the vDSO library as it stands it is including more
headers that it needs. In particular, being a user-space library, it
should require only the UAPI and a minimal vDSO kernel interface instead
of all the kernel-related inline functions which are not directly used
and in some cases can have side effects.

To solve the problem, I decided to use the approach below:
  * Extract from include/linux/ the vDSO required kernel interface
    and place it in include/common/
  * Make sure that where meaningful the kernel includes "common"
  * Limit the vDSO library to include headers coming only from UAPI
    and "common" (with 2 exceptions compiler.h for barriers and
    param.h for HZ).
  * Adapt all the architectures that support the unified vDSO library
    to use "common" headers.

According to me this approach allows up to exercise a better control on
what the vDSO library can include and to prevent potential issues in
future.

This patch series contains the implementation of the described approach.

The "common" headers have been verified on all the architectures that support
unified vDSO using the vdsotest [3] testsuite for what concerns the vDSO part
and randconfig to verify that they are included in the correct places.

To simplify the testing, a copy of the patchset on top of a recent linux
tree can be found at [4].

[1] https://github.com/ClangBuiltLinux/linux/issues/595
[2] https://lore.kernel.org/lkml/20190926151704.GH9689@arrakis.emea.arm.com
[3] https://github.com/nathanlynch/vdsotest
[4] git://linux-arm.org/linux-vf.git common-headers/v1

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Paul Burton <paul.burton@mips.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Stephen Boyd <sboyd@kernel.org>
Cc: Mark Salyzyn <salyzyn@android.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Peter Collingbourne <pcc@google.com>
Cc: Dmitry Safonov <0x7f454c46@gmail.com>
Cc: Andrei Vagin <avagin@openvz.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>

Vincenzo Frascino (19):
  linux/const.h: Extract common header for vDSO
  linux/bits.h: Extract common header for vDSO
  linux/limits.h: Extract common header for vDSO
  linux/math64.h: Extract common header for vDSO
  linux/time.h: Extract common header for vDSO
  linux/time32.h: Extract common header for vDSO
  linux/time64.h: Extract common header for vDSO
  linux/jiffies.h: Extract common header for vDSO
  linux/ktime.h: Extract common header for vDSO
  common: Introduce processor.h
  linux/elfnote.h: Replace elf.h with UAPI equivalent
  arm64: Introduce asm/common/processor.h
  arm64: vdso: Include common headers in the vdso library
  arm64: vdso32: Include common headers in the vdso library
  mips: vdso: Enable mips to use common headers
  x86: vdso: Enable x86 to use common headers
  arm: vdso: Enable arm to use common headers
  lib: vdso: Enable common headers
  arm64: vdso32: Enable Clang Compilation

 arch/arm/include/asm/common/cp15.h            | 38 +++++++++++++++++++
 arch/arm/include/asm/common/processor.h       | 22 +++++++++++
 arch/arm/include/asm/cp15.h                   | 20 +---------
 arch/arm/include/asm/processor.h              | 11 +-----
 arch/arm/include/asm/vdso/gettimeofday.h      |  4 +-
 arch/arm64/include/asm/common/processor.h     | 31 +++++++++++++++
 arch/arm64/include/asm/processor.h            | 16 +-------
 .../include/asm/vdso/compat_gettimeofday.h    |  2 +-
 arch/arm64/include/asm/vdso/gettimeofday.h    |  1 -
 arch/arm64/kernel/vdso/vgettimeofday.c        |  2 -
 arch/arm64/kernel/vdso32/Makefile             |  4 +-
 arch/arm64/kernel/vdso32/vgettimeofday.c      |  3 --
 arch/mips/include/asm/common/processor.h      | 27 +++++++++++++
 arch/mips/include/asm/processor.h             | 16 +-------
 arch/mips/include/asm/vdso/gettimeofday.h     |  4 --
 arch/x86/include/asm/common/processor.h       | 23 +++++++++++
 arch/x86/include/asm/processor.h              | 12 +-----
 include/common/bits.h                         |  9 +++++
 include/common/const.h                        | 10 +++++
 include/common/jiffies.h                      | 11 ++++++
 include/common/ktime.h                        | 16 ++++++++
 include/common/limits.h                       | 18 +++++++++
 include/common/math64.h                       | 24 ++++++++++++
 include/common/processor.h                    | 14 +++++++
 include/common/time.h                         | 12 ++++++
 include/common/time32.h                       | 17 +++++++++
 include/common/time64.h                       | 14 +++++++
 include/linux/bits.h                          |  2 +-
 include/linux/const.h                         |  5 +--
 include/linux/elfnote.h                       |  2 +-
 include/linux/jiffies.h                       |  4 +-
 include/linux/ktime.h                         |  9 +----
 include/linux/limits.h                        | 13 +------
 include/linux/math64.h                        | 20 +---------
 include/linux/time.h                          |  5 +--
 include/linux/time32.h                        | 13 +------
 include/linux/time64.h                        | 10 +----
 include/vdso/datapage.h                       | 32 ++++++++++++++--
 lib/vdso/gettimeofday.c                       | 21 ----------
 39 files changed, 337 insertions(+), 180 deletions(-)
 create mode 100644 arch/arm/include/asm/common/cp15.h
 create mode 100644 arch/arm/include/asm/common/processor.h
 create mode 100644 arch/arm64/include/asm/common/processor.h
 create mode 100644 arch/mips/include/asm/common/processor.h
 create mode 100644 arch/x86/include/asm/common/processor.h
 create mode 100644 include/common/bits.h
 create mode 100644 include/common/const.h
 create mode 100644 include/common/jiffies.h
 create mode 100644 include/common/ktime.h
 create mode 100644 include/common/limits.h
 create mode 100644 include/common/math64.h
 create mode 100644 include/common/processor.h
 create mode 100644 include/common/time.h
 create mode 100644 include/common/time32.h
 create mode 100644 include/common/time64.h

-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 01/19] linux/const.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
@ 2020-02-13 16:15 ` Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 02/19] linux/bits.h: " Vincenzo Frascino
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:15 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 const.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>
---
 include/common/const.h | 10 ++++++++++
 include/linux/const.h  |  5 +----
 2 files changed, 11 insertions(+), 4 deletions(-)
 create mode 100644 include/common/const.h

diff --git a/include/common/const.h b/include/common/const.h
new file mode 100644
index 000000000000..cc209eec47a1
--- /dev/null
+++ b/include/common/const.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_CONST_H
+#define __COMMON_CONST_H
+
+#include <uapi/linux/const.h>
+
+#define UL(x)		(_UL(x))
+#define ULL(x)		(_ULL(x))
+
+#endif /* __COMMON_CONST_H */
diff --git a/include/linux/const.h b/include/linux/const.h
index 7b55a55f5911..447a5b98d5a3 100644
--- a/include/linux/const.h
+++ b/include/linux/const.h
@@ -1,9 +1,6 @@
 #ifndef _LINUX_CONST_H
 #define _LINUX_CONST_H
 
-#include <uapi/linux/const.h>
-
-#define UL(x)		(_UL(x))
-#define ULL(x)		(_ULL(x))
+#include <common/const.h>
 
 #endif /* _LINUX_CONST_H */
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 02/19] linux/bits.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 01/19] linux/const.h: Extract common header for vDSO Vincenzo Frascino
@ 2020-02-13 16:15 ` " Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 03/19] linux/limits.h: " Vincenzo Frascino
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:15 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 bits.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>
---
 include/common/bits.h | 9 +++++++++
 include/linux/bits.h  | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 include/common/bits.h

diff --git a/include/common/bits.h b/include/common/bits.h
new file mode 100644
index 000000000000..6da493992e52
--- /dev/null
+++ b/include/common/bits.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_BITS_H
+#define __COMMON_BITS_H
+
+#include <common/const.h>
+
+#define BIT(nr)			(UL(1) << (nr))
+
+#endif	/* __COMMON_BITS_H */
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 669d69441a62..aeb76fede77a 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -3,9 +3,9 @@
 #define __LINUX_BITS_H
 
 #include <linux/const.h>
+#include <common/bits.h>
 #include <asm/bitsperlong.h>
 
-#define BIT(nr)			(UL(1) << (nr))
 #define BIT_ULL(nr)		(ULL(1) << (nr))
 #define BIT_MASK(nr)		(UL(1) << ((nr) % BITS_PER_LONG))
 #define BIT_WORD(nr)		((nr) / BITS_PER_LONG)
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 03/19] linux/limits.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 01/19] linux/const.h: Extract common header for vDSO Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 02/19] linux/bits.h: " Vincenzo Frascino
@ 2020-02-13 16:15 ` " Vincenzo Frascino
  2020-02-13 16:15 ` [PATCH 04/19] linux/math64.h: " Vincenzo Frascino
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:15 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 limits.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>
---
 include/common/limits.h | 18 ++++++++++++++++++
 include/linux/limits.h  | 13 +------------
 2 files changed, 19 insertions(+), 12 deletions(-)
 create mode 100644 include/common/limits.h

diff --git a/include/common/limits.h b/include/common/limits.h
new file mode 100644
index 000000000000..587269010add
--- /dev/null
+++ b/include/common/limits.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_LIMITS_H
+#define __COMMON_LIMITS_H
+
+#define USHRT_MAX	((unsigned short)~0U)
+#define SHRT_MAX	((short)(USHRT_MAX >> 1))
+#define SHRT_MIN	((short)(-SHRT_MAX - 1))
+#define INT_MAX		((int)(~0U >> 1))
+#define INT_MIN		(-INT_MAX - 1)
+#define UINT_MAX	(~0U)
+#define LONG_MAX	((long)(~0UL >> 1))
+#define LONG_MIN	(-LONG_MAX - 1)
+#define ULONG_MAX	(~0UL)
+#define LLONG_MAX	((long long)(~0ULL >> 1))
+#define LLONG_MIN	(-LLONG_MAX - 1)
+#define ULLONG_MAX	(~0ULL)
+
+#endif /* __COMMON_LIMITS_H */
diff --git a/include/linux/limits.h b/include/linux/limits.h
index 76afcd24ff8c..ac20d2b2edd9 100644
--- a/include/linux/limits.h
+++ b/include/linux/limits.h
@@ -4,19 +4,8 @@
 
 #include <uapi/linux/limits.h>
 #include <linux/types.h>
+#include <common/limits.h>
 
-#define USHRT_MAX	((unsigned short)~0U)
-#define SHRT_MAX	((short)(USHRT_MAX >> 1))
-#define SHRT_MIN	((short)(-SHRT_MAX - 1))
-#define INT_MAX		((int)(~0U >> 1))
-#define INT_MIN		(-INT_MAX - 1)
-#define UINT_MAX	(~0U)
-#define LONG_MAX	((long)(~0UL >> 1))
-#define LONG_MIN	(-LONG_MAX - 1)
-#define ULONG_MAX	(~0UL)
-#define LLONG_MAX	((long long)(~0ULL >> 1))
-#define LLONG_MIN	(-LLONG_MAX - 1)
-#define ULLONG_MAX	(~0ULL)
 #define SIZE_MAX	(~(size_t)0)
 #define PHYS_ADDR_MAX	(~(phys_addr_t)0)
 
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 04/19] linux/math64.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (2 preceding siblings ...)
  2020-02-13 16:15 ` [PATCH 03/19] linux/limits.h: " Vincenzo Frascino
@ 2020-02-13 16:15 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 05/19] linux/time.h: " Vincenzo Frascino
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:15 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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>
---
 include/common/math64.h | 24 ++++++++++++++++++++++++
 include/linux/math64.h  | 20 +-------------------
 2 files changed, 25 insertions(+), 19 deletions(-)
 create mode 100644 include/common/math64.h

diff --git a/include/common/math64.h b/include/common/math64.h
new file mode 100644
index 000000000000..4e1870e40182
--- /dev/null
+++ b/include/common/math64.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_MATH64_H
+#define __COMMON_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 /* __COMMON_MATH64_H */
diff --git a/include/linux/math64.h b/include/linux/math64.h
index 65bef21cdddb..54eb486b5d1a 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -3,6 +3,7 @@
 #define _LINUX_MATH64_H
 
 #include <linux/types.h>
+#include <common/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 :-(
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 05/19] linux/time.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (3 preceding siblings ...)
  2020-02-13 16:15 ` [PATCH 04/19] linux/math64.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 06/19] linux/time32.h: " Vincenzo Frascino
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 time.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>
---
 include/common/time.h | 12 ++++++++++++
 include/linux/time.h  |  5 +----
 2 files changed, 13 insertions(+), 4 deletions(-)
 create mode 100644 include/common/time.h

diff --git a/include/common/time.h b/include/common/time.h
new file mode 100644
index 000000000000..90eb9bdb40ec
--- /dev/null
+++ b/include/common/time.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_TIME_H
+#define __COMMON_TIME_H
+
+#include <uapi/linux/types.h>
+
+struct timens_offset {
+	s64	sec;
+	u64	nsec;
+};
+
+#endif /* __COMMON_TIME_H */
diff --git a/include/linux/time.h b/include/linux/time.h
index 8ef5e5cc9f57..617a01e2c8bb 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -111,9 +111,6 @@ static inline bool itimerspec64_valid(const struct itimerspec64 *its)
  */
 #define time_between32(t, l, h) ((u32)(h) - (u32)(l) >= (u32)(t) - (u32)(l))
 
-struct timens_offset {
-	s64	sec;
-	u64	nsec;
-};
+# include <common/time.h>
 
 #endif
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 06/19] linux/time32.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (4 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 05/19] linux/time.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 07/19] linux/time64.h: " Vincenzo Frascino
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 time32.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>
---
 include/common/time32.h | 17 +++++++++++++++++
 include/linux/time32.h  | 13 +------------
 2 files changed, 18 insertions(+), 12 deletions(-)
 create mode 100644 include/common/time32.h

diff --git a/include/common/time32.h b/include/common/time32.h
new file mode 100644
index 000000000000..d5b85abdfaf1
--- /dev/null
+++ b/include/common/time32.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_TIME32_H
+#define __COMMON_TIME32_H
+
+typedef s32		old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t	tv_sec;
+	s32		tv_nsec;
+};
+
+struct old_timeval32 {
+	old_time32_t	tv_sec;
+	s32		tv_usec;
+};
+
+#endif /* __COMMON_TIME32_H */
diff --git a/include/linux/time32.h b/include/linux/time32.h
index cad4c3186002..39ff2f55e8d7 100644
--- a/include/linux/time32.h
+++ b/include/linux/time32.h
@@ -11,21 +11,10 @@
 
 #include <linux/time64.h>
 #include <linux/timex.h>
+#include <common/time32.h>
 
 #define TIME_T_MAX	(__kernel_old_time_t)((1UL << ((sizeof(__kernel_old_time_t) << 3) - 1)) - 1)
 
-typedef s32		old_time32_t;
-
-struct old_timespec32 {
-	old_time32_t	tv_sec;
-	s32		tv_nsec;
-};
-
-struct old_timeval32 {
-	old_time32_t	tv_sec;
-	s32		tv_usec;
-};
-
 struct old_itimerspec32 {
 	struct old_timespec32 it_interval;
 	struct old_timespec32 it_value;
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 07/19] linux/time64.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (5 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 06/19] linux/time32.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 08/19] linux/jiffies.h: " Vincenzo Frascino
                   ` (11 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 time64.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>
---
 include/common/time64.h | 14 ++++++++++++++
 include/linux/time64.h  | 10 +---------
 2 files changed, 15 insertions(+), 9 deletions(-)
 create mode 100644 include/common/time64.h

diff --git a/include/common/time64.h b/include/common/time64.h
new file mode 100644
index 000000000000..ff5a72fafb30
--- /dev/null
+++ b/include/common/time64.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_TIME64_H
+#define __COMMON_TIME64_H
+
+/* Parameters used to convert the timespec values: */
+#define MSEC_PER_SEC	1000L
+#define USEC_PER_MSEC	1000L
+#define NSEC_PER_USEC	1000L
+#define NSEC_PER_MSEC	1000000L
+#define USEC_PER_SEC	1000000L
+#define NSEC_PER_SEC	1000000000L
+#define FSEC_PER_SEC	1000000000000000LL
+
+#endif /* __COMMON_TIME64_H */
diff --git a/include/linux/time64.h b/include/linux/time64.h
index 19125489ae94..3d8b3739e885 100644
--- a/include/linux/time64.h
+++ b/include/linux/time64.h
@@ -3,6 +3,7 @@
 #define _LINUX_TIME64_H
 
 #include <linux/math64.h>
+#include <common/time64.h>
 
 typedef __s64 time64_t;
 typedef __u64 timeu64_t;
@@ -19,15 +20,6 @@ struct itimerspec64 {
 	struct timespec64 it_value;
 };
 
-/* Parameters used to convert the timespec values: */
-#define MSEC_PER_SEC	1000L
-#define USEC_PER_MSEC	1000L
-#define NSEC_PER_USEC	1000L
-#define NSEC_PER_MSEC	1000000L
-#define USEC_PER_SEC	1000000L
-#define NSEC_PER_SEC	1000000000L
-#define FSEC_PER_SEC	1000000000000000LL
-
 /* Located here for timespec[64]_valid_strict */
 #define TIME64_MAX			((s64)~((u64)1 << 63))
 #define TIME64_MIN			(-TIME64_MAX - 1)
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 08/19] linux/jiffies.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (6 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 07/19] linux/time64.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 09/19] linux/ktime.h: " Vincenzo Frascino
                   ` (10 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 jiffies.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>
---
 include/common/jiffies.h | 11 +++++++++++
 include/linux/jiffies.h  |  4 +---
 2 files changed, 12 insertions(+), 3 deletions(-)
 create mode 100644 include/common/jiffies.h

diff --git a/include/common/jiffies.h b/include/common/jiffies.h
new file mode 100644
index 000000000000..ff0207f00550
--- /dev/null
+++ b/include/common/jiffies.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_JIFFIES_H
+#define __COMMON_JIFFIES_H
+
+#include <asm/param.h>			/* for HZ */
+#include <common/time64.h>
+
+/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
+#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
+
+#endif /* __COMMON_JIFFIES_H */
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index e3279ef24d28..710539d1e39b 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/time.h>
 #include <linux/timex.h>
+#include <common/jiffies.h>
 #include <asm/param.h>			/* for HZ */
 #include <generated/timeconst.h>
 
@@ -59,9 +60,6 @@
 
 extern int register_refined_jiffies(long clock_tick_rate);
 
-/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
-#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
-
 /* TICK_USEC is the time between ticks in usec assuming SHIFTED_HZ */
 #define TICK_USEC ((USEC_PER_SEC + HZ/2) / HZ)
 
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 09/19] linux/ktime.h: Extract common header for vDSO
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (7 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 08/19] linux/jiffies.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 10/19] common: Introduce processor.h Vincenzo Frascino
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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 ktime.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>
---
 include/common/ktime.h | 16 ++++++++++++++++
 include/linux/ktime.h  |  9 +--------
 2 files changed, 17 insertions(+), 8 deletions(-)
 create mode 100644 include/common/ktime.h

diff --git a/include/common/ktime.h b/include/common/ktime.h
new file mode 100644
index 000000000000..4dd6c6762ad4
--- /dev/null
+++ b/include/common/ktime.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __COMMON_KTIME_H
+#define __COMMON_KTIME_H
+
+#include <common/jiffies.h>
+
+/*
+ * The resolution of the clocks. The resolution value is returned in
+ * the clock_getres() system call to give application programmers an
+ * idea of the (in)accuracy of timers. Timer values are rounded up to
+ * this resolution values.
+ */
+#define LOW_RES_NSEC		TICK_NSEC
+#define KTIME_LOW_RES		(LOW_RES_NSEC)
+
+#endif /* __COMMON_KTIME_H */
diff --git a/include/linux/ktime.h b/include/linux/ktime.h
index b2bb44f87f5a..0e1fadeb23c3 100644
--- a/include/linux/ktime.h
+++ b/include/linux/ktime.h
@@ -253,14 +253,7 @@ static inline __must_check bool ktime_to_timespec64_cond(const ktime_t kt,
 	}
 }
 
-/*
- * The resolution of the clocks. The resolution value is returned in
- * the clock_getres() system call to give application programmers an
- * idea of the (in)accuracy of timers. Timer values are rounded up to
- * this resolution values.
- */
-#define LOW_RES_NSEC		TICK_NSEC
-#define KTIME_LOW_RES		(LOW_RES_NSEC)
+#include <common/ktime.h>
 
 static inline ktime_t ns_to_ktime(u64 ns)
 {
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 10/19] common: Introduce processor.h
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (8 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 09/19] linux/ktime.h: " Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 11/19] linux/elfnote.h: Replace elf.h with UAPI equivalent Vincenzo Frascino
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Introduce processor.h to contain all the processor specific functions
that are suitable for vDSO inclusion.

Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 include/common/processor.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 include/common/processor.h

diff --git a/include/common/processor.h b/include/common/processor.h
new file mode 100644
index 000000000000..f9f971cb4235
--- /dev/null
+++ b/include/common/processor.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __COMMON_PROCESSOR_H
+#define __COMMON_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/common/processor.h>
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __COMMON_PROCESSOR_H */
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 11/19] linux/elfnote.h: Replace elf.h with UAPI equivalent
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (9 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 10/19] common: Introduce processor.h Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 12/19] arm64: Introduce asm/common/processor.h Vincenzo Frascino
                   ` (7 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Replace linux/elf.h with UAPI equivalent in elfnote.h to make the header
suitable for vDSO inclusion.

Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 include/linux/elfnote.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/elfnote.h b/include/linux/elfnote.h
index f236f5b931b2..594d4e78654f 100644
--- a/include/linux/elfnote.h
+++ b/include/linux/elfnote.h
@@ -59,7 +59,7 @@
 	ELFNOTE_END
 
 #else	/* !__ASSEMBLER__ */
-#include <linux/elf.h>
+#include <uapi/linux/elf.h>
 /*
  * Use an anonymous structure which matches the shape of
  * Elf{32,64}_Nhdr, but includes the name and desc data.  The size and
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 12/19] arm64: Introduce asm/common/processor.h
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (10 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 11/19] linux/elfnote.h: Replace elf.h with UAPI equivalent Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 13/19] arm64: vdso: Include common headers in the vdso library Vincenzo Frascino
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Introduce asm/common/processor.h to contain all the arm64 specific
functions that are suitable for vDSO inclusion.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/include/asm/common/processor.h | 31 +++++++++++++++++++++++
 arch/arm64/include/asm/processor.h        | 16 ++----------
 2 files changed, 33 insertions(+), 14 deletions(-)
 create mode 100644 arch/arm64/include/asm/common/processor.h

diff --git a/arch/arm64/include/asm/common/processor.h b/arch/arm64/include/asm/common/processor.h
new file mode 100644
index 000000000000..d02b0f392923
--- /dev/null
+++ b/arch/arm64/include/asm/common/processor.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_COMMON_PROCESSOR_H
+#define __ASM_COMMON_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/page-def.h>
+
+#ifdef CONFIG_COMPAT
+#if defined(CONFIG_ARM64_64K_PAGES) && defined(CONFIG_KUSER_HELPERS)
+/*
+ * With CONFIG_ARM64_64K_PAGES enabled, the last page is occupied
+ * by the compat vectors page.
+ */
+#define TASK_SIZE_32		UL(0x100000000)
+#else
+#define TASK_SIZE_32		(UL(0x100000000) - PAGE_SIZE)
+#endif /* CONFIG_ARM64_64K_PAGES */
+#endif /* CONFIG_COMPAT */
+
+static inline void cpu_relax(void)
+{
+	asm volatile("yield" ::: "memory");
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_COMMON_PROCESSOR_H */
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index 5ba63204d078..2866afc33f24 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -28,6 +28,8 @@
 #include <linux/string.h>
 #include <linux/thread_info.h>
 
+#include <common/processor.h>
+
 #include <asm/alternative.h>
 #include <asm/cpufeature.h>
 #include <asm/hw_breakpoint.h>
@@ -47,15 +49,6 @@
 #define TASK_SIZE_64		(UL(1) << vabits_actual)
 
 #ifdef CONFIG_COMPAT
-#if defined(CONFIG_ARM64_64K_PAGES) && defined(CONFIG_KUSER_HELPERS)
-/*
- * With CONFIG_ARM64_64K_PAGES enabled, the last page is occupied
- * by the compat vectors page.
- */
-#define TASK_SIZE_32		UL(0x100000000)
-#else
-#define TASK_SIZE_32		(UL(0x100000000) - PAGE_SIZE)
-#endif /* CONFIG_ARM64_64K_PAGES */
 #define TASK_SIZE		(test_thread_flag(TIF_32BIT) ? \
 				TASK_SIZE_32 : TASK_SIZE_64)
 #define TASK_SIZE_OF(tsk)	(test_tsk_thread_flag(tsk, TIF_32BIT) ? \
@@ -256,11 +249,6 @@ extern void release_thread(struct task_struct *);
 
 unsigned long get_wchan(struct task_struct *p);
 
-static inline void cpu_relax(void)
-{
-	asm volatile("yield" ::: "memory");
-}
-
 /* Thread switching */
 extern struct task_struct *cpu_switch_to(struct task_struct *prev,
 					 struct task_struct *next);
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 13/19] arm64: vdso: Include common headers in the vdso library
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (11 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 12/19] arm64: Introduce asm/common/processor.h Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 14/19] arm64: vdso32: " Vincenzo Frascino
                   ` (5 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Refactor the vdso implementation to include common headers.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/include/asm/vdso/gettimeofday.h | 1 -
 arch/arm64/kernel/vdso/vgettimeofday.c     | 2 --
 2 files changed, 3 deletions(-)

diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index b08f476b72b4..cc3456416096 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,7 +8,6 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
 
 #define __VDSO_USE_SYSCALL		ULLONG_MAX
 
diff --git a/arch/arm64/kernel/vdso/vgettimeofday.c b/arch/arm64/kernel/vdso/vgettimeofday.c
index 747635501a14..4236cf34d7d9 100644
--- a/arch/arm64/kernel/vdso/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso/vgettimeofday.c
@@ -5,8 +5,6 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
 
 int __kernel_clock_gettime(clockid_t clock,
 			   struct __kernel_timespec *ts)
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 14/19] arm64: vdso32: Include common headers in the vdso library
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (12 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 13/19] arm64: vdso: Include common headers in the vdso library Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 15/19] mips: vdso: Enable mips to use common headers Vincenzo Frascino
                   ` (4 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Refactor the vdso32 implementation to include common headers.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/include/asm/vdso/compat_gettimeofday.h | 2 +-
 arch/arm64/kernel/vdso32/vgettimeofday.c          | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index 537b1e695365..a1f21474f11f 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,7 +8,7 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
+#include <asm/errno.h>
 
 #include <asm/vdso/compat_barrier.h>
 
diff --git a/arch/arm64/kernel/vdso32/vgettimeofday.c b/arch/arm64/kernel/vdso32/vgettimeofday.c
index 54fc1c2ce93f..9366ceb635a1 100644
--- a/arch/arm64/kernel/vdso32/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso32/vgettimeofday.c
@@ -5,9 +5,6 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
-
 int __vdso_clock_gettime(clockid_t clock,
 			 struct old_timespec32 *ts)
 {
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 15/19] mips: vdso: Enable mips to use common headers
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (13 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 14/19] arm64: vdso32: " Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 16/19] x86: vdso: Enable x86 " Vincenzo Frascino
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

Enable mips to use only the common headers in the implementation of
the vDSO library.

Cc: Paul Burton <paulburton@kernel.org>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/mips/include/asm/common/processor.h  | 27 +++++++++++++++++++++++
 arch/mips/include/asm/processor.h         | 16 +-------------
 arch/mips/include/asm/vdso/gettimeofday.h |  4 ----
 3 files changed, 28 insertions(+), 19 deletions(-)
 create mode 100644 arch/mips/include/asm/common/processor.h

diff --git a/arch/mips/include/asm/common/processor.h b/arch/mips/include/asm/common/processor.h
new file mode 100644
index 000000000000..d2ee5d397d2b
--- /dev/null
+++ b/arch/mips/include/asm/common/processor.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_COMMON_PROCESSOR_H
+#define __ASM_COMMON_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#ifdef CONFIG_CPU_LOONGSON64
+/*
+ * Loongson-3's SFB (Store-Fill-Buffer) may buffer writes indefinitely when a
+ * tight read loop is executed, because reads take priority over writes & the
+ * hardware (incorrectly) doesn't ensure that writes will eventually occur.
+ *
+ * Since spin loops of any kind should have a cpu_relax() in them, force an SFB
+ * flush from cpu_relax() such that any pending writes will become visible as
+ * expected.
+ */
+#define cpu_relax()	smp_mb()
+#else
+#define cpu_relax()	barrier()
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_COMMON_PROCESSOR_H */
diff --git a/arch/mips/include/asm/processor.h b/arch/mips/include/asm/processor.h
index 7619ad319400..b7eca25e2066 100644
--- a/arch/mips/include/asm/processor.h
+++ b/arch/mips/include/asm/processor.h
@@ -22,6 +22,7 @@
 #include <asm/dsemul.h>
 #include <asm/mipsregs.h>
 #include <asm/prefetch.h>
+#include <asm/common/processor.h>
 
 /*
  * System setup and hardware flags..
@@ -385,21 +386,6 @@ unsigned long get_wchan(struct task_struct *p);
 #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29])
 #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status)
 
-#ifdef CONFIG_CPU_LOONGSON64
-/*
- * Loongson-3's SFB (Store-Fill-Buffer) may buffer writes indefinitely when a
- * tight read loop is executed, because reads take priority over writes & the
- * hardware (incorrectly) doesn't ensure that writes will eventually occur.
- *
- * Since spin loops of any kind should have a cpu_relax() in them, force an SFB
- * flush from cpu_relax() such that any pending writes will become visible as
- * expected.
- */
-#define cpu_relax()	smp_mb()
-#else
-#define cpu_relax()	barrier()
-#endif
-
 /*
  * Return_address is a replacement for __builtin_return_address(count)
  * which on certain architectures cannot reasonably be implemented in GCC
diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h
index a58687e26c5d..e8ab2fafe067 100644
--- a/arch/mips/include/asm/vdso/gettimeofday.h
+++ b/arch/mips/include/asm/vdso/gettimeofday.h
@@ -13,12 +13,8 @@
 
 #ifndef __ASSEMBLY__
 
-#include <linux/compiler.h>
-#include <linux/time.h>
-
 #include <asm/vdso/vdso.h>
 #include <asm/clocksource.h>
-#include <asm/io.h>
 #include <asm/unistd.h>
 #include <asm/vdso.h>
 
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 16/19] x86: vdso: Enable x86 to use common headers
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (14 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 15/19] mips: vdso: Enable mips to use common headers Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 17/19] arm: vdso: Enable arm " Vincenzo Frascino
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

Enable x86 to use only the common headers in the implementation
of the vDSO library.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/x86/include/asm/common/processor.h | 23 +++++++++++++++++++++++
 arch/x86/include/asm/processor.h        | 12 +-----------
 2 files changed, 24 insertions(+), 11 deletions(-)
 create mode 100644 arch/x86/include/asm/common/processor.h

diff --git a/arch/x86/include/asm/common/processor.h b/arch/x86/include/asm/common/processor.h
new file mode 100644
index 000000000000..60ca2ee6e672
--- /dev/null
+++ b/arch/x86/include/asm/common/processor.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_COMMON_PROCESSOR_H
+#define __ASM_COMMON_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
+static __always_inline void rep_nop(void)
+{
+	asm volatile("rep; nop" ::: "memory");
+}
+
+static __always_inline void cpu_relax(void)
+{
+	rep_nop();
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_COMMON_PROCESSOR_H */
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 09705ccc393c..d66c5dd42cff 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -26,6 +26,7 @@ struct vm86;
 #include <asm/fpu/types.h>
 #include <asm/unwind_hints.h>
 #include <asm/vmxfeatures.h>
+#include <asm/common/processor.h>
 
 #include <linux/personality.h>
 #include <linux/cache.h>
@@ -677,17 +678,6 @@ static inline unsigned int cpuid_edx(unsigned int op)
 	return edx;
 }
 
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static __always_inline void rep_nop(void)
-{
-	asm volatile("rep; nop" ::: "memory");
-}
-
-static __always_inline void cpu_relax(void)
-{
-	rep_nop();
-}
-
 /*
  * This function forces the icache and prefetched instruction stream to
  * catch up with reality in two very specific cases:
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 17/19] arm: vdso: Enable arm to use common headers
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (15 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 16/19] x86: vdso: Enable x86 " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 18/19] lib: vdso: Enable " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 19/19] arm64: vdso32: Enable Clang Compilation Vincenzo Frascino
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

Enable arm to use only the common headers in the implementation
of the vDSO library.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm/include/asm/common/cp15.h       | 38 ++++++++++++++++++++++++
 arch/arm/include/asm/common/processor.h  | 22 ++++++++++++++
 arch/arm/include/asm/cp15.h              | 20 +------------
 arch/arm/include/asm/processor.h         | 11 +------
 arch/arm/include/asm/vdso/gettimeofday.h |  4 +--
 5 files changed, 64 insertions(+), 31 deletions(-)
 create mode 100644 arch/arm/include/asm/common/cp15.h
 create mode 100644 arch/arm/include/asm/common/processor.h

diff --git a/arch/arm/include/asm/common/cp15.h b/arch/arm/include/asm/common/cp15.h
new file mode 100644
index 000000000000..d1412c80120f
--- /dev/null
+++ b/arch/arm/include/asm/common/cp15.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_COMMON_CP15_H
+#define __ASM_COMMON_CP15_H
+
+#ifndef __ASSEMBLY__
+
+#ifdef CONFIG_CPU_CP15
+
+#include <linux/stringify.h>
+
+#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
+	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
+#define __ACCESS_CP15_64(Op1, CRm)		\
+	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
+
+#define __read_sysreg(r, w, c, t) ({				\
+	t __val;						\
+	asm volatile(r " " c : "=r" (__val));			\
+	__val;							\
+})
+#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
+
+#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
+#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
+
+#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
+#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
+
+#define CNTVCT				__ACCESS_CP15_64(1, c14)
+
+#endif /* CONFIG_CPU_CP15 */
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_COMMON_CP15_H */
diff --git a/arch/arm/include/asm/common/processor.h b/arch/arm/include/asm/common/processor.h
new file mode 100644
index 000000000000..0e76f3cb0d0d
--- /dev/null
+++ b/arch/arm/include/asm/common/processor.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_COMMON_PROCESSOR_H
+#define __ASM_COMMON_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
+#define cpu_relax()						\
+	do {							\
+		smp_mb();					\
+		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
+	} while (0)
+#else
+#define cpu_relax()			barrier()
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_COMMON_PROCESSOR_H */
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h
index d2453e2d3f1f..fe47a65130ab 100644
--- a/arch/arm/include/asm/cp15.h
+++ b/arch/arm/include/asm/cp15.h
@@ -50,25 +50,7 @@
 
 #ifdef CONFIG_CPU_CP15
 
-#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
-	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
-#define __ACCESS_CP15_64(Op1, CRm)		\
-	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
-
-#define __read_sysreg(r, w, c, t) ({				\
-	t __val;						\
-	asm volatile(r " " c : "=r" (__val));			\
-	__val;							\
-})
-#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
-
-#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
-#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
-
-#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
-#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
-
-#define CNTVCT				__ACCESS_CP15_64(1, c14)
+#include <asm/common/cp15.h>
 
 extern unsigned long cr_alignment;	/* defined in entry-armv.S */
 
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h
index 614bf829e454..c098d95a88fa 100644
--- a/arch/arm/include/asm/processor.h
+++ b/arch/arm/include/asm/processor.h
@@ -14,6 +14,7 @@
 #include <asm/ptrace.h>
 #include <asm/types.h>
 #include <asm/unified.h>
+#include <asm/common/processor.h>
 
 #ifdef __KERNEL__
 #define STACK_TOP	((current->personality & ADDR_LIMIT_32BIT) ? \
@@ -85,16 +86,6 @@ extern void release_thread(struct task_struct *);
 
 unsigned long get_wchan(struct task_struct *p);
 
-#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
-#define cpu_relax()						\
-	do {							\
-		smp_mb();					\
-		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
-	} while (0)
-#else
-#define cpu_relax()			barrier()
-#endif
-
 #define task_pt_regs(p) \
 	((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
 
diff --git a/arch/arm/include/asm/vdso/gettimeofday.h b/arch/arm/include/asm/vdso/gettimeofday.h
index fe6e1f65932d..ffb88cef8cbb 100644
--- a/arch/arm/include/asm/vdso/gettimeofday.h
+++ b/arch/arm/include/asm/vdso/gettimeofday.h
@@ -7,9 +7,9 @@
 
 #ifndef __ASSEMBLY__
 
-#include <asm/barrier.h>
-#include <asm/cp15.h>
+#include <asm/errno.h>
 #include <asm/unistd.h>
+#include <asm/common/cp15.h>
 #include <uapi/linux/time.h>
 
 #define VDSO_HAS_CLOCK_GETRES		1
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 18/19] lib: vdso: Enable common headers
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (16 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 17/19] arm: vdso: Enable arm " Vincenzo Frascino
@ 2020-02-13 16:16 ` " Vincenzo Frascino
  2020-02-13 16:16 ` [PATCH 19/19] arm64: vdso32: Enable Clang Compilation Vincenzo Frascino
  18 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

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.

Refactor the unified vdso code to use the common headers.

Cc: Andy Lutomirski <luto@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 include/vdso/datapage.h | 32 +++++++++++++++++++++++++++++---
 lib/vdso/gettimeofday.c | 21 ---------------------
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/include/vdso/datapage.h b/include/vdso/datapage.h
index c5f347cc5e55..21842a73cbcf 100644
--- a/include/vdso/datapage.h
+++ b/include/vdso/datapage.h
@@ -4,9 +4,19 @@
 
 #ifndef __ASSEMBLY__
 
-#include <linux/bits.h>
-#include <linux/time.h>
-#include <linux/types.h>
+#include <linux/compiler.h>
+#include <uapi/linux/time.h>
+#include <uapi/linux/types.h>
+#include <uapi/asm-generic/errno-base.h>
+
+#include <common/bits.h>
+#include <common/ktime.h>
+#include <common/limits.h>
+#include <common/math64.h>
+#include <common/processor.h>
+#include <common/time.h>
+#include <common/time32.h>
+#include <common/time64.h>
 
 #define VDSO_BASES	(CLOCK_TAI + 1)
 #define VDSO_HRES	(BIT(CLOCK_REALTIME)		| \
@@ -101,6 +111,22 @@ struct vdso_data {
  */
 extern struct vdso_data _vdso_data[CS_BASES] __attribute__((visibility("hidden")));
 
+/*
+ * The generic vDSO implementation requires that gettimeofday.h
+ * provides:
+ * - __arch_get_vdso_data(): to get the vdso datapage.
+ * - __arch_get_hw_counter(): to get the hw counter based on the
+ *   clock_mode.
+ * - gettimeofday_fallback(): fallback for gettimeofday.
+ * - clock_gettime_fallback(): fallback for clock_gettime.
+ * - clock_getres_fallback(): fallback for clock_getres.
+ */
+#ifdef ENABLE_COMPAT_VDSO
+#include <asm/vdso/compat_gettimeofday.h>
+#else
+#include <asm/vdso/gettimeofday.h>
+#endif /* ENABLE_COMPAT_VDSO */
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* __VDSO_DATAPAGE_H */
diff --git a/lib/vdso/gettimeofday.c b/lib/vdso/gettimeofday.c
index f8b8ec5e63ac..e3244f74feea 100644
--- a/lib/vdso/gettimeofday.c
+++ b/lib/vdso/gettimeofday.c
@@ -2,30 +2,9 @@
 /*
  * Generic userspace implementations of gettimeofday() and similar.
  */
-#include <linux/compiler.h>
-#include <linux/math64.h>
-#include <linux/time.h>
-#include <linux/kernel.h>
-#include <linux/hrtimer_defs.h>
 #include <vdso/datapage.h>
 #include <vdso/helpers.h>
 
-/*
- * The generic vDSO implementation requires that gettimeofday.h
- * provides:
- * - __arch_get_vdso_data(): to get the vdso datapage.
- * - __arch_get_hw_counter(): to get the hw counter based on the
- *   clock_mode.
- * - gettimeofday_fallback(): fallback for gettimeofday.
- * - clock_gettime_fallback(): fallback for clock_gettime.
- * - clock_getres_fallback(): fallback for clock_getres.
- */
-#ifdef ENABLE_COMPAT_VDSO
-#include <asm/vdso/compat_gettimeofday.h>
-#else
-#include <asm/vdso/gettimeofday.h>
-#endif /* ENABLE_COMPAT_VDSO */
-
 #ifndef vdso_calc_delta
 /*
  * Default implementation which works for all sane clocksources. That
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
                   ` (17 preceding siblings ...)
  2020-02-13 16:16 ` [PATCH 18/19] lib: vdso: Enable " Vincenzo Frascino
@ 2020-02-13 16:16 ` Vincenzo Frascino
  2020-02-13 18:44   ` Nathan Chancellor
  18 siblings, 1 reply; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-13 16:16 UTC (permalink / raw)
  To: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86
  Cc: catalin.marinas, will.deacon, arnd, linux, paul.burton, tglx,
	luto, mingo, bp, sboyd, salyzyn, pcc, 0x7f454c46, ndesaulniers,
	avagin

Enable Clang Compilation for the vdso32 library.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/kernel/vdso32/Makefile | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
index 04df57b43cb1..209639101044 100644
--- a/arch/arm64/kernel/vdso32/Makefile
+++ b/arch/arm64/kernel/vdso32/Makefile
@@ -11,8 +11,10 @@ include $(srctree)/lib/vdso/Makefile
 # Same as cc-*option, but using CC_COMPAT instead of CC
 ifeq ($(CONFIG_CC_IS_CLANG), y)
 CC_COMPAT ?= $(CC)
+LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
 else
 CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
+LD_COMPAT ?= $(CC_COMPAT)
 endif
 
 cc32-option = $(call try-run,\
@@ -171,7 +173,7 @@ quiet_cmd_vdsold_and_vdso_check = LD32    $@
       cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
 
 quiet_cmd_vdsold = LD32    $@
-      cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
+      cmd_vdsold = $(LD_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
                    -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
 quiet_cmd_vdsocc = CC32    $@
       cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
-- 
2.25.0


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-13 16:16 ` [PATCH 19/19] arm64: vdso32: Enable Clang Compilation Vincenzo Frascino
@ 2020-02-13 18:44   ` Nathan Chancellor
  2020-02-17 12:26     ` Vincenzo Frascino
  0 siblings, 1 reply; 25+ messages in thread
From: Nathan Chancellor @ 2020-02-13 18:44 UTC (permalink / raw)
  To: Vincenzo Frascino
  Cc: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86, catalin.marinas, will.deacon, arnd,
	linux, paul.burton, tglx, luto, mingo, bp, sboyd, salyzyn, pcc,
	0x7f454c46, ndesaulniers, avagin

On Thu, Feb 13, 2020 at 04:16:14PM +0000, Vincenzo Frascino wrote:
> Enable Clang Compilation for the vdso32 library.
> 
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
> ---
>  arch/arm64/kernel/vdso32/Makefile | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
> index 04df57b43cb1..209639101044 100644
> --- a/arch/arm64/kernel/vdso32/Makefile
> +++ b/arch/arm64/kernel/vdso32/Makefile
> @@ -11,8 +11,10 @@ include $(srctree)/lib/vdso/Makefile
>  # Same as cc-*option, but using CC_COMPAT instead of CC
>  ifeq ($(CONFIG_CC_IS_CLANG), y)
>  CC_COMPAT ?= $(CC)
> +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc

Well this is unfortunate :/

It looks like adding the --target flag to VDSO_LDFLAGS allows
clang to link the vDSO just fine although it does warn that -nostdinc
is unused:

clang-11: warning: argument unused during compilation: '-nostdinc'
[-Wunused-command-line-argument]

It would be nice if the logic of commit fe00e50b2db8 ("ARM: 8858/1:
vdso: use $(LD) instead of $(CC) to link VDSO") could be adopted here
but I get that this Makefile is its own beast :) at the very least, I
think that the --target flag should be added to VDSO_LDFLAGS so that gcc
is not a requirement for this but I am curious if you tried that already
and noticed any issues with it.

Cheers,
Nathan

>  else
>  CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
> +LD_COMPAT ?= $(CC_COMPAT)
>  endif
>  
>  cc32-option = $(call try-run,\
> @@ -171,7 +173,7 @@ quiet_cmd_vdsold_and_vdso_check = LD32    $@
>        cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
>  
>  quiet_cmd_vdsold = LD32    $@
> -      cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
> +      cmd_vdsold = $(LD_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
>                     -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
>  quiet_cmd_vdsocc = CC32    $@
>        cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
> -- 
> 2.25.0
> 

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-13 18:44   ` Nathan Chancellor
@ 2020-02-17 12:26     ` Vincenzo Frascino
  2020-02-17 16:46       ` Will Deacon
  0 siblings, 1 reply; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-17 12:26 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-arch, linux-arm-kernel, linux-kernel, linux-mips,
	clang-built-linux, x86, catalin.marinas, will.deacon, arnd,
	linux, paul.burton, tglx, luto, mingo, bp, sboyd, salyzyn, pcc,
	0x7f454c46, ndesaulniers, avagin

[-- Attachment #1: Type: text/plain, Size: 1251 bytes --]

Hi Nathan,

On 13/02/2020 18:44, Nathan Chancellor wrote:
> On Thu, Feb 13, 2020 at 04:16:14PM +0000, Vincenzo Frascino wrote:
>> Enable Clang Compilation for the vdso32 library.

[...]

>> +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
> 
> Well this is unfortunate :/
> 
> It looks like adding the --target flag to VDSO_LDFLAGS allows
> clang to link the vDSO just fine although it does warn that -nostdinc
> is unused:
> 
> clang-11: warning: argument unused during compilation: '-nostdinc'
> [-Wunused-command-line-argument]
>

This is why ended up in this "unfortunate" situation :) I wanted to avoid the
warning.

> It would be nice if the logic of commit fe00e50b2db8 ("ARM: 8858/1:
> vdso: use $(LD) instead of $(CC) to link VDSO") could be adopted here
> but I get that this Makefile is its own beast :) at the very least, I
> think that the --target flag should be added to VDSO_LDFLAGS so that gcc
> is not a requirement for this but I am curious if you tried that already
> and noticed any issues with it.
> 

--target is my preferred way as well, I can try to play another little bit with
the flags and see what I can come up with in the next version.

> Cheers,
> Nathan

[...]

-- 
Regards,
Vincenzo

[-- Attachment #2: pEpkey.asc --]
[-- Type: application/pgp-keys, Size: 14291 bytes --]

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-17 12:26     ` Vincenzo Frascino
@ 2020-02-17 16:46       ` Will Deacon
  2020-02-17 22:39         ` Ard Biesheuvel
  0 siblings, 1 reply; 25+ messages in thread
From: Will Deacon @ 2020-02-17 16:46 UTC (permalink / raw)
  To: Vincenzo Frascino
  Cc: Nathan Chancellor, linux-arch, ndesaulniers, 0x7f454c46, avagin,
	arnd, sboyd, catalin.marinas, x86, will.deacon, linux-kernel,
	linux-mips, clang-built-linux, paul.burton, mingo, bp, luto,
	linux, tglx, salyzyn, pcc, linux-arm-kernel

On Mon, Feb 17, 2020 at 12:26:16PM +0000, Vincenzo Frascino wrote:
> On 13/02/2020 18:44, Nathan Chancellor wrote:
> > On Thu, Feb 13, 2020 at 04:16:14PM +0000, Vincenzo Frascino wrote:
> >> Enable Clang Compilation for the vdso32 library.
> 
> [...]
> 
> >> +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
> > 
> > Well this is unfortunate :/
> > 
> > It looks like adding the --target flag to VDSO_LDFLAGS allows
> > clang to link the vDSO just fine although it does warn that -nostdinc
> > is unused:
> > 
> > clang-11: warning: argument unused during compilation: '-nostdinc'
> > [-Wunused-command-line-argument]
> >
> 
> This is why ended up in this "unfortunate" situation :) I wanted to avoid the
> warning.
> 
> > It would be nice if the logic of commit fe00e50b2db8 ("ARM: 8858/1:
> > vdso: use $(LD) instead of $(CC) to link VDSO") could be adopted here
> > but I get that this Makefile is its own beast :) at the very least, I
> > think that the --target flag should be added to VDSO_LDFLAGS so that gcc
> > is not a requirement for this but I am curious if you tried that already
> > and noticed any issues with it.
> > 
> 
> --target is my preferred way as well, I can try to play another little bit with
> the flags and see what I can come up with in the next version.

Yes, please. I'd even prefer the warning rather than silently assuming that
a cross gcc is kicking around on the path.

Will

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-17 16:46       ` Will Deacon
@ 2020-02-17 22:39         ` Ard Biesheuvel
  2020-02-18 13:03           ` Vincenzo Frascino
  0 siblings, 1 reply; 25+ messages in thread
From: Ard Biesheuvel @ 2020-02-17 22:39 UTC (permalink / raw)
  To: Will Deacon
  Cc: Vincenzo Frascino, Catalin Marinas, 0x7f454c46, linux-mips,
	Thomas Gleixner, linux-arch, the arch/x86 maintainers,
	Russell King, clang-built-linux, Ingo Molnar, Arnd Bergmann,
	Will Deacon, Borislav Petkov, Andy Lutomirski, Nathan Chancellor,
	pcc, linux-arm-kernel, avagin, Stephen Boyd, Nick Desaulniers,
	Linux Kernel Mailing List, salyzyn, Paul Burton

On Mon, 17 Feb 2020 at 17:46, Will Deacon <will@kernel.org> wrote:
>
> On Mon, Feb 17, 2020 at 12:26:16PM +0000, Vincenzo Frascino wrote:
> > On 13/02/2020 18:44, Nathan Chancellor wrote:
> > > On Thu, Feb 13, 2020 at 04:16:14PM +0000, Vincenzo Frascino wrote:
> > >> Enable Clang Compilation for the vdso32 library.
> >
> > [...]
> >
> > >> +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
> > >
> > > Well this is unfortunate :/
> > >
> > > It looks like adding the --target flag to VDSO_LDFLAGS allows
> > > clang to link the vDSO just fine although it does warn that -nostdinc
> > > is unused:
> > >
> > > clang-11: warning: argument unused during compilation: '-nostdinc'
> > > [-Wunused-command-line-argument]
> > >
> >
> > This is why ended up in this "unfortunate" situation :) I wanted to avoid the
> > warning.
> >
> > > It would be nice if the logic of commit fe00e50b2db8 ("ARM: 8858/1:
> > > vdso: use $(LD) instead of $(CC) to link VDSO") could be adopted here
> > > but I get that this Makefile is its own beast :) at the very least, I
> > > think that the --target flag should be added to VDSO_LDFLAGS so that gcc
> > > is not a requirement for this but I am curious if you tried that already
> > > and noticed any issues with it.
> > >
> >
> > --target is my preferred way as well, I can try to play another little bit with
> > the flags and see what I can come up with in the next version.
>
> Yes, please. I'd even prefer the warning rather than silently assuming that
> a cross gcc is kicking around on the path.
>

Doesn't Clang have -Qunused-arguments for that?

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 19/19] arm64: vdso32: Enable Clang Compilation
  2020-02-17 22:39         ` Ard Biesheuvel
@ 2020-02-18 13:03           ` Vincenzo Frascino
  0 siblings, 0 replies; 25+ messages in thread
From: Vincenzo Frascino @ 2020-02-18 13:03 UTC (permalink / raw)
  To: Ard Biesheuvel, Will Deacon
  Cc: Catalin Marinas, 0x7f454c46, linux-mips, Thomas Gleixner,
	linux-arch, the arch/x86 maintainers, Russell King,
	clang-built-linux, Ingo Molnar, Arnd Bergmann, Will Deacon,
	Borislav Petkov, Andy Lutomirski, Nathan Chancellor, pcc,
	linux-arm-kernel, avagin, Stephen Boyd, Nick Desaulniers,
	Linux Kernel Mailing List, salyzyn, Paul Burton

[-- Attachment #1: Type: text/plain, Size: 1745 bytes --]

On 17/02/2020 22:39, Ard Biesheuvel wrote:
> On Mon, 17 Feb 2020 at 17:46, Will Deacon <will@kernel.org> wrote:
>>
>> On Mon, Feb 17, 2020 at 12:26:16PM +0000, Vincenzo Frascino wrote:
>>> On 13/02/2020 18:44, Nathan Chancellor wrote:
>>>> On Thu, Feb 13, 2020 at 04:16:14PM +0000, Vincenzo Frascino wrote:
>>>>> Enable Clang Compilation for the vdso32 library.
>>>
>>> [...]
>>>
>>>>> +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
>>>>
>>>> Well this is unfortunate :/
>>>>
>>>> It looks like adding the --target flag to VDSO_LDFLAGS allows
>>>> clang to link the vDSO just fine although it does warn that -nostdinc
>>>> is unused:
>>>>
>>>> clang-11: warning: argument unused during compilation: '-nostdinc'
>>>> [-Wunused-command-line-argument]
>>>>
>>>
>>> This is why ended up in this "unfortunate" situation :) I wanted to avoid the
>>> warning.
>>>
>>>> It would be nice if the logic of commit fe00e50b2db8 ("ARM: 8858/1:
>>>> vdso: use $(LD) instead of $(CC) to link VDSO") could be adopted here
>>>> but I get that this Makefile is its own beast :) at the very least, I
>>>> think that the --target flag should be added to VDSO_LDFLAGS so that gcc
>>>> is not a requirement for this but I am curious if you tried that already
>>>> and noticed any issues with it.
>>>>
>>>
>>> --target is my preferred way as well, I can try to play another little bit with
>>> the flags and see what I can come up with in the next version.
>>
>> Yes, please. I'd even prefer the warning rather than silently assuming that
>> a cross gcc is kicking around on the path.
>>
> 
> Doesn't Clang have -Qunused-arguments for that?
> 

Yes, this is exactly what I was looking for. Thanks Ard :)

-- 
Regards,
Vincenzo

[-- Attachment #2: pEpkey.asc --]
[-- Type: application/pgp-keys, Size: 14291 bytes --]

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, back to index

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-13 16:15 [PATCH 00/19] Introduce common headers Vincenzo Frascino
2020-02-13 16:15 ` [PATCH 01/19] linux/const.h: Extract common header for vDSO Vincenzo Frascino
2020-02-13 16:15 ` [PATCH 02/19] linux/bits.h: " Vincenzo Frascino
2020-02-13 16:15 ` [PATCH 03/19] linux/limits.h: " Vincenzo Frascino
2020-02-13 16:15 ` [PATCH 04/19] linux/math64.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 05/19] linux/time.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 06/19] linux/time32.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 07/19] linux/time64.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 08/19] linux/jiffies.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 09/19] linux/ktime.h: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 10/19] common: Introduce processor.h Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 11/19] linux/elfnote.h: Replace elf.h with UAPI equivalent Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 12/19] arm64: Introduce asm/common/processor.h Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 13/19] arm64: vdso: Include common headers in the vdso library Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 14/19] arm64: vdso32: " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 15/19] mips: vdso: Enable mips to use common headers Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 16/19] x86: vdso: Enable x86 " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 17/19] arm: vdso: Enable arm " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 18/19] lib: vdso: Enable " Vincenzo Frascino
2020-02-13 16:16 ` [PATCH 19/19] arm64: vdso32: Enable Clang Compilation Vincenzo Frascino
2020-02-13 18:44   ` Nathan Chancellor
2020-02-17 12:26     ` Vincenzo Frascino
2020-02-17 16:46       ` Will Deacon
2020-02-17 22:39         ` Ard Biesheuvel
2020-02-18 13:03           ` Vincenzo Frascino

Linux-MIPS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mips/0 linux-mips/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mips linux-mips/ https://lore.kernel.org/linux-mips \
		linux-mips@vger.kernel.org
	public-inbox-index linux-mips

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-mips


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git