linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] vdso fixups
@ 2019-03-07 16:05 Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 1/4] vdso: ARM: fix building without ARM_ARCH_TIMER Arnd Bergmann
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Arnd Bergmann @ 2019-03-07 16:05 UTC (permalink / raw)
  To: Vincenzo Frascino; +Cc: linux-arch, Arnd Bergmann

Hi Vincento,

Here are a couple more patches that I had to apply on top of your series
to get the combined vdso to build cleanly in all randconfig configurations.

Unfortunately, I haven't managed to build the arm64 compat vdso at
all here, so there may be additional patches needed for that.

      Arnd

Arnd Bergmann (4):
  vdso: ARM: fix building without ARM_ARCH_TIMER
  x86: vdso: fix compat_vdso build
  vdso: arm: use __iter_div_u64_rem() for 64-bit division
  arm64: vdso: turn off profiling etc

 arch/arm/include/asm/vdso/gettimeofday.h |  4 ++
 arch/arm/kernel/vdso.c                   |  7 +--
 arch/arm64/kernel/vdso/Makefile          |  6 ++
 arch/x86/include/asm/mshyperv-tsc.h      | 76 ++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h          | 70 +---------------------
 arch/x86/include/asm/pvclock.h           |  2 +-
 arch/x86/include/asm/vdso/gettimeofday.h |  2 +-
 arch/x86/include/asm/vgtod.h             |  2 +-
 arch/x86/kernel/pvclock.c                |  1 +
 include/linux/hrtimer.h                  | 15 +----
 include/linux/hrtimer_defs.h             | 25 ++++++++
 lib/vdso/gettimeofday.c                  |  3 +-
 12 files changed, 121 insertions(+), 92 deletions(-)
 create mode 100644 arch/x86/include/asm/mshyperv-tsc.h
 create mode 100644 include/linux/hrtimer_defs.h

-- 
2.20.0

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

* [PATCH 1/4] vdso: ARM: fix building without ARM_ARCH_TIMER
  2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
@ 2019-03-07 16:05 ` Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 2/4] x86: vdso: fix compat_vdso build Arnd Bergmann
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2019-03-07 16:05 UTC (permalink / raw)
  To: Vincenzo Frascino; +Cc: linux-arch, Arnd Bergmann

When the arch timer is disabled, the vdso fails to build:

In file included from lib/vdso/gettimeofday.c:26,
                 from <command-line>:
arch/arm/include/asm/vdso/gettimeofday.h: In function '__arch_get_hw_counter':
arch/arm/include/asm/vdso/gettimeofday.h:72:9: error: implicit declaration of function 'arch_counter_get_cntvct'; did you mean 'arch_timer_get_rate'? [-Werror=implicit-function-declaration]
  return arch_counter_get_cntvct();
         ^~~~~~~~~~~~~~~~~~~~~~~

Make it use the fallback path instead by returning a negative
error code here.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/include/asm/vdso/gettimeofday.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/include/asm/vdso/gettimeofday.h b/arch/arm/include/asm/vdso/gettimeofday.h
index 112df50920b0..77ace4a757c1 100644
--- a/arch/arm/include/asm/vdso/gettimeofday.h
+++ b/arch/arm/include/asm/vdso/gettimeofday.h
@@ -69,7 +69,11 @@ static __always_inline notrace int clock_getres_fallback(
 
 static __always_inline notrace u64 __arch_get_hw_counter(int clock_mode)
 {
+#ifdef CONFIG_ARM_ARCH_TIMER
 	return arch_counter_get_cntvct();
+#else
+	return -EINVAL; /* use fallback */
+#endif
 }
 
 static __always_inline notrace const struct vdso_data *__arch_get_vdso_data(void)
-- 
2.20.0

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

* [PATCH 2/4] x86: vdso: fix compat_vdso build
  2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 1/4] vdso: ARM: fix building without ARM_ARCH_TIMER Arnd Bergmann
@ 2019-03-07 16:05 ` Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 3/4] vdso: arm: use __iter_div_u64_rem() for 64-bit division Arnd Bergmann
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2019-03-07 16:05 UTC (permalink / raw)
  To: Vincenzo Frascino; +Cc: linux-arch, Arnd Bergmann

When we build the compat vdso, the kernel headers will be used
with a 32-bit compiler combined with configuration options
for the 64-bit kernel, which leads to many undesired effects
from header files that make assumptions about the configuration
options, such as:

In file included from include/linux/mm_types.h:15,
                 from include/asm-generic/fixmap.h:19,
                 from arch/x86/include/asm/fixmap.h:193,
                 from arch/x86/include/asm/apic.h:10,
                 from arch/x86/include/asm/smp.h:13,
                 from include/linux/smp.h:68,
                 from include/linux/percpu.h:7,
                 from include/linux/hrtimer.h:19,
                 from arch/x86/entry/vdso/vdso32/../../../../../lib/vdso/gettimeofday.c:9,
                 from arch/x86/entry/vdso/vdso32/../vclock_gettime.c:13,
                 from arch/x86/entry/vdso/vdso32/vclock_gettime.c:31:
include/linux/page-flags-layout.h:95:2: error: #warning "KASAN: not enough bits in page flags for tag" [-Werror=cpp]
 #warning "KASAN: not enough bits in page flags for tag"
  ^~~~~~~

Limit the scope of the headers much more, by removing linux/hrtimer.h
and asm/mshyperv.h from the list of included files. Instead, the parts
we actually need are moved into separate headers that are included
by the normal ones.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/x86/include/asm/mshyperv-tsc.h      | 76 ++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h          | 70 +---------------------
 arch/x86/include/asm/pvclock.h           |  2 +-
 arch/x86/include/asm/vdso/gettimeofday.h |  2 +-
 arch/x86/include/asm/vgtod.h             |  2 +-
 arch/x86/kernel/pvclock.c                |  1 +
 include/linux/hrtimer.h                  | 15 +----
 include/linux/hrtimer_defs.h             | 25 ++++++++
 lib/vdso/gettimeofday.c                  |  3 +-
 9 files changed, 109 insertions(+), 87 deletions(-)
 create mode 100644 arch/x86/include/asm/mshyperv-tsc.h
 create mode 100644 include/linux/hrtimer_defs.h

diff --git a/arch/x86/include/asm/mshyperv-tsc.h b/arch/x86/include/asm/mshyperv-tsc.h
new file mode 100644
index 000000000000..99c98ccea0bf
--- /dev/null
+++ b/arch/x86/include/asm/mshyperv-tsc.h
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_X86_MSHYPER_TSCPAGE_H
+#define _ASM_X86_MSHYPER_TSCPAGE_H
+
+#include <asm/hyperv-tlfs.h>
+
+#ifdef CONFIG_HYPERV_TSCPAGE
+struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
+static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
+				       u64 *cur_tsc)
+{
+	u64 scale, offset;
+	u32 sequence;
+
+	/*
+	 * The protocol for reading Hyper-V TSC page is specified in Hypervisor
+	 * Top-Level Functional Specification ver. 3.0 and above. To get the
+	 * reference time we must do the following:
+	 * - READ ReferenceTscSequence
+	 *   A special '0' value indicates the time source is unreliable and we
+	 *   need to use something else. The currently published specification
+	 *   versions (up to 4.0b) contain a mistake and wrongly claim '-1'
+	 *   instead of '0' as the special value, see commit c35b82ef0294.
+	 * - ReferenceTime =
+	 *        ((RDTSC() * ReferenceTscScale) >> 64) + ReferenceTscOffset
+	 * - READ ReferenceTscSequence again. In case its value has changed
+	 *   since our first reading we need to discard ReferenceTime and repeat
+	 *   the whole sequence as the hypervisor was updating the page in
+	 *   between.
+	 */
+	do {
+		sequence = READ_ONCE(tsc_pg->tsc_sequence);
+		if (!sequence)
+			return U64_MAX;
+		/*
+		 * Make sure we read sequence before we read other values from
+		 * TSC page.
+		 */
+		smp_rmb();
+
+		scale = READ_ONCE(tsc_pg->tsc_scale);
+		offset = READ_ONCE(tsc_pg->tsc_offset);
+		*cur_tsc = rdtsc_ordered();
+
+		/*
+		 * Make sure we read sequence after we read all other values
+		 * from TSC page.
+		 */
+		smp_rmb();
+
+	} while (READ_ONCE(tsc_pg->tsc_sequence) != sequence);
+
+	return mul_u64_u64_shr(*cur_tsc, scale, 64) + offset;
+}
+
+static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
+{
+	u64 cur_tsc;
+
+	return hv_read_tsc_page_tsc(tsc_pg, &cur_tsc);
+}
+
+#else
+static inline struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
+{
+	return NULL;
+}
+
+static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
+				       u64 *cur_tsc)
+{
+	BUG();
+	return U64_MAX;
+}
+#endif
+#endif
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index cc60e617931c..db095a992f3e 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -7,6 +7,7 @@
 #include <linux/nmi.h>
 #include <asm/io.h>
 #include <asm/hyperv-tlfs.h>
+#include <asm/mshyperv-tsc.h>
 #include <asm/nospec-branch.h>
 
 #define VP_INVAL	U32_MAX
@@ -387,73 +388,4 @@ static inline int hyperv_flush_guest_mapping_range(u64 as,
 }
 #endif /* CONFIG_HYPERV */
 
-#ifdef CONFIG_HYPERV_TSCPAGE
-struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
-static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
-				       u64 *cur_tsc)
-{
-	u64 scale, offset;
-	u32 sequence;
-
-	/*
-	 * The protocol for reading Hyper-V TSC page is specified in Hypervisor
-	 * Top-Level Functional Specification ver. 3.0 and above. To get the
-	 * reference time we must do the following:
-	 * - READ ReferenceTscSequence
-	 *   A special '0' value indicates the time source is unreliable and we
-	 *   need to use something else. The currently published specification
-	 *   versions (up to 4.0b) contain a mistake and wrongly claim '-1'
-	 *   instead of '0' as the special value, see commit c35b82ef0294.
-	 * - ReferenceTime =
-	 *        ((RDTSC() * ReferenceTscScale) >> 64) + ReferenceTscOffset
-	 * - READ ReferenceTscSequence again. In case its value has changed
-	 *   since our first reading we need to discard ReferenceTime and repeat
-	 *   the whole sequence as the hypervisor was updating the page in
-	 *   between.
-	 */
-	do {
-		sequence = READ_ONCE(tsc_pg->tsc_sequence);
-		if (!sequence)
-			return U64_MAX;
-		/*
-		 * Make sure we read sequence before we read other values from
-		 * TSC page.
-		 */
-		smp_rmb();
-
-		scale = READ_ONCE(tsc_pg->tsc_scale);
-		offset = READ_ONCE(tsc_pg->tsc_offset);
-		*cur_tsc = rdtsc_ordered();
-
-		/*
-		 * Make sure we read sequence after we read all other values
-		 * from TSC page.
-		 */
-		smp_rmb();
-
-	} while (READ_ONCE(tsc_pg->tsc_sequence) != sequence);
-
-	return mul_u64_u64_shr(*cur_tsc, scale, 64) + offset;
-}
-
-static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
-{
-	u64 cur_tsc;
-
-	return hv_read_tsc_page_tsc(tsc_pg, &cur_tsc);
-}
-
-#else
-static inline struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
-{
-	return NULL;
-}
-
-static inline u64 hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg,
-				       u64 *cur_tsc)
-{
-	BUG();
-	return U64_MAX;
-}
-#endif
 #endif
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
index b6033680d458..19b695ff2c68 100644
--- a/arch/x86/include/asm/pvclock.h
+++ b/arch/x86/include/asm/pvclock.h
@@ -2,7 +2,7 @@
 #ifndef _ASM_X86_PVCLOCK_H
 #define _ASM_X86_PVCLOCK_H
 
-#include <linux/clocksource.h>
+#include <asm/clocksource.h>
 #include <asm/pvclock-abi.h>
 
 /* some helper functions for xen and kvm pv clock sources */
diff --git a/arch/x86/include/asm/vdso/gettimeofday.h b/arch/x86/include/asm/vdso/gettimeofday.h
index 510a0ebd5748..6b2d6ce26bcc 100644
--- a/arch/x86/include/asm/vdso/gettimeofday.h
+++ b/arch/x86/include/asm/vdso/gettimeofday.h
@@ -18,7 +18,7 @@
 #include <asm/unistd.h>
 #include <asm/msr.h>
 #include <asm/pvclock.h>
-#include <asm/mshyperv.h>
+#include <asm/mshyperv-tsc.h>
 
 #define _vdso_data (&VVAR(vdso_data))
 
diff --git a/arch/x86/include/asm/vgtod.h b/arch/x86/include/asm/vgtod.h
index 0b4e343c62be..cd60f292c553 100644
--- a/arch/x86/include/asm/vgtod.h
+++ b/arch/x86/include/asm/vgtod.h
@@ -3,7 +3,7 @@
 #define _ASM_X86_VGTOD_H
 
 #include <linux/compiler.h>
-#include <linux/clocksource.h>
+#include <asm/clocksource.h>
 #include <vdso/datapage.h>
 #include <vdso/helpers.h>
 
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
index 9b158b4716d2..747264182df7 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -15,6 +15,7 @@
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
+#include <linux/clocksource.h>
 #include <linux/kernel.h>
 #include <linux/percpu.h>
 #include <linux/notifier.h>
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index 2e8957eac4d4..c922ce02e2e6 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -12,6 +12,7 @@
 #ifndef _LINUX_HRTIMER_H
 #define _LINUX_HRTIMER_H
 
+#include <linux/hrtimer_defs.h>
 #include <linux/rbtree.h>
 #include <linux/ktime.h>
 #include <linux/init.h>
@@ -298,26 +299,12 @@ struct clock_event_device;
 
 extern void hrtimer_interrupt(struct clock_event_device *dev);
 
-/*
- * 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 HIGH_RES_NSEC		1
-# define KTIME_HIGH_RES		(HIGH_RES_NSEC)
-# define MONOTONIC_RES_NSEC	HIGH_RES_NSEC
-# define KTIME_MONOTONIC_RES	KTIME_HIGH_RES
-
 extern void clock_was_set_delayed(void);
 
 extern unsigned int hrtimer_resolution;
 
 #else
 
-# define MONOTONIC_RES_NSEC	LOW_RES_NSEC
-# define KTIME_MONOTONIC_RES	KTIME_LOW_RES
-
 #define hrtimer_resolution	(unsigned int)LOW_RES_NSEC
 
 static inline void clock_was_set_delayed(void) { }
diff --git a/include/linux/hrtimer_defs.h b/include/linux/hrtimer_defs.h
new file mode 100644
index 000000000000..1f181d31e29c
--- /dev/null
+++ b/include/linux/hrtimer_defs.h
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef _LINUX_HRTIMER_DEFS_H
+#define _LINUX_HRTIMER_DEFS_H
+
+#ifdef CONFIG_HIGH_RES_TIMERS
+
+/*
+ * 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 HIGH_RES_NSEC		1
+# define KTIME_HIGH_RES		(HIGH_RES_NSEC)
+# define MONOTONIC_RES_NSEC	HIGH_RES_NSEC
+# define KTIME_MONOTONIC_RES	KTIME_HIGH_RES
+
+#else
+
+# define MONOTONIC_RES_NSEC	LOW_RES_NSEC
+# define KTIME_MONOTONIC_RES	KTIME_LOW_RES
+
+#endif
+
+#endif
diff --git a/lib/vdso/gettimeofday.c b/lib/vdso/gettimeofday.c
index f10e3703abaa..9b4944d2c2ed 100644
--- a/lib/vdso/gettimeofday.c
+++ b/lib/vdso/gettimeofday.c
@@ -6,7 +6,8 @@
 #include <linux/math64.h>
 #include <linux/time.h>
 #include <linux/kernel.h>
-#include <linux/hrtimer.h>
+#include <linux/ktime.h>
+#include <linux/hrtimer_defs.h>
 #include <vdso/datapage.h>
 #include <vdso/helpers.h>
 
-- 
2.20.0

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

* [PATCH 3/4] vdso: arm: use __iter_div_u64_rem() for 64-bit division
  2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 1/4] vdso: ARM: fix building without ARM_ARCH_TIMER Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 2/4] x86: vdso: fix compat_vdso build Arnd Bergmann
@ 2019-03-07 16:05 ` Arnd Bergmann
  2019-03-07 16:05 ` [PATCH 4/4] arm64: vdso: turn off profiling etc Arnd Bergmann
  2019-03-08 11:21 ` [PATCH 0/4] vdso fixups Vincenzo Frascino
  4 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2019-03-07 16:05 UTC (permalink / raw)
  To: Vincenzo Frascino; +Cc: linux-arch, Arnd Bergmann

Some compilers, e.g. clang-8, can turn a loop back into a division
operation, which here results in a link failure:

arch/arm/kernel/vdso.o: In function `update_vsyscall':
vdso.c:(.text+0x1c4): undefined reference to `__aeabi_uldivmod'

The problem is already solved in the generic __iter_div_u64_rem()
function, so use that here.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/kernel/vdso.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
index 68930c90c504..32ad392e403b 100644
--- a/arch/arm/kernel/vdso.c
+++ b/arch/arm/kernel/vdso.c
@@ -328,11 +328,8 @@ void update_vsyscall(struct timekeeper *tk)
 	vdso_ts->sec		= tk->xtime_sec + tk->wall_to_monotonic.tv_sec;
 	nsec			= tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift;
 	nsec			= nsec + tk->wall_to_monotonic.tv_nsec;
-	while (nsec >= NSEC_PER_SEC) {
-		nsec = nsec - NSEC_PER_SEC;
-		vdso_ts->sec++;
-	}
-	vdso_ts->nsec		= nsec;
+
+	vdso_ts->sec += __iter_div_u64_rem(nsec, NSEC_PER_SEC, &vdso_ts->nsec);
 
 	if (__tk_is_cntvct) {
 		vdso_data->clock_mode	= 0;
-- 
2.20.0

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

* [PATCH 4/4] arm64: vdso: turn off profiling etc
  2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
                   ` (2 preceding siblings ...)
  2019-03-07 16:05 ` [PATCH 3/4] vdso: arm: use __iter_div_u64_rem() for 64-bit division Arnd Bergmann
@ 2019-03-07 16:05 ` Arnd Bergmann
  2019-03-08 11:21 ` [PATCH 0/4] vdso fixups Vincenzo Frascino
  4 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2019-03-07 16:05 UTC (permalink / raw)
  To: Vincenzo Frascino; +Cc: linux-arch, Arnd Bergmann

I took this from the x86 version, without it, all
kinds of things fail to build in the vdso.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm64/kernel/vdso/Makefile | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index c904b2a9b255..3768600219c0 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -25,6 +25,12 @@ ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 \
 VDSO_LDFLAGS := -Bsymbolic
 
 CFLAGS_REMOVE_vgettimeofday.o = -pg -Os
+KBUILD_CFLAGS			+= $(DISABLE_LTO)
+KASAN_SANITIZE                  := n
+UBSAN_SANITIZE                  := n
+OBJECT_FILES_NON_STANDARD       := y
+KCOV_INSTRUMENT			:= n
+
 ifeq ($(c-gettimeofday-y),)
 CFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny
 else
-- 
2.20.0

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

* Re: [PATCH 0/4] vdso fixups
  2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
                   ` (3 preceding siblings ...)
  2019-03-07 16:05 ` [PATCH 4/4] arm64: vdso: turn off profiling etc Arnd Bergmann
@ 2019-03-08 11:21 ` Vincenzo Frascino
  4 siblings, 0 replies; 6+ messages in thread
From: Vincenzo Frascino @ 2019-03-08 11:21 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: linux-arch

Hi Arnd,

On 07/03/2019 16:05, Arnd Bergmann wrote:
> Hi Vincento,
> 
> Here are a couple more patches that I had to apply on top of your series
> to get the combined vdso to build cleanly in all randconfig configurations.
> 
> Unfortunately, I haven't managed to build the arm64 compat vdso at
> all here, so there may be additional patches needed for that.
> 

Thank you for this. Going forward, I will start using randconfig as well to make
sure that I catch as many issues as I can.

For what concerns arm64 compat vdso, the compilation is currently disabled by
default when the compiler is clang, because there is a problem with the include
paths that requires further investigation. I was planning to provide a separate
patchset to address the problem.



>       Arnd
> 
> Arnd Bergmann (4):
>   vdso: ARM: fix building without ARM_ARCH_TIMER
>   x86: vdso: fix compat_vdso build
>   vdso: arm: use __iter_div_u64_rem() for 64-bit division
>   arm64: vdso: turn off profiling etc
> 
>  arch/arm/include/asm/vdso/gettimeofday.h |  4 ++
>  arch/arm/kernel/vdso.c                   |  7 +--
>  arch/arm64/kernel/vdso/Makefile          |  6 ++
>  arch/x86/include/asm/mshyperv-tsc.h      | 76 ++++++++++++++++++++++++
>  arch/x86/include/asm/mshyperv.h          | 70 +---------------------
>  arch/x86/include/asm/pvclock.h           |  2 +-
>  arch/x86/include/asm/vdso/gettimeofday.h |  2 +-
>  arch/x86/include/asm/vgtod.h             |  2 +-
>  arch/x86/kernel/pvclock.c                |  1 +
>  include/linux/hrtimer.h                  | 15 +----
>  include/linux/hrtimer_defs.h             | 25 ++++++++
>  lib/vdso/gettimeofday.c                  |  3 +-
>  12 files changed, 121 insertions(+), 92 deletions(-)
>  create mode 100644 arch/x86/include/asm/mshyperv-tsc.h
>  create mode 100644 include/linux/hrtimer_defs.h
> 

-- 
Regards,
Vincenzo

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

end of thread, other threads:[~2019-03-08 11:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-07 16:05 [PATCH 0/4] vdso fixups Arnd Bergmann
2019-03-07 16:05 ` [PATCH 1/4] vdso: ARM: fix building without ARM_ARCH_TIMER Arnd Bergmann
2019-03-07 16:05 ` [PATCH 2/4] x86: vdso: fix compat_vdso build Arnd Bergmann
2019-03-07 16:05 ` [PATCH 3/4] vdso: arm: use __iter_div_u64_rem() for 64-bit division Arnd Bergmann
2019-03-07 16:05 ` [PATCH 4/4] arm64: vdso: turn off profiling etc Arnd Bergmann
2019-03-08 11:21 ` [PATCH 0/4] vdso fixups Vincenzo Frascino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).