From: Arnd Bergmann <arnd@arndb.de> To: Vincenzo Frascino <vincenzo.frascino@arm.com> Cc: linux-arch <linux-arch@vger.kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Daniel Lezcano <daniel.lezcano@linaro.org>, Will Deacon <will.deacon@arm.com>, Russell King - ARM Linux <linux@armlinux.org.uk>, Ralf Baechle <ralf@linux-mips.org>, Mark Salyzyn <salyzyn@android.com>, Paul Burton <paul.burton@mips.com>, Thomas Gleixner <tglx@linutronix.de>, Peter Collingbourne <pcc@google.com>, Linux ARM <linux-arm-kernel@lists.infradead.org> Subject: Re: [PATCH v2 06/28] kernel: Define gettimeofday vdso common code Date: Thu, 29 Nov 2018 21:42:35 +0100 [thread overview] Message-ID: <CAK8P3a1njNBWiMExBevqbT+AuUHdU4T2sc1o1rRTn+Ji=y2SbA@mail.gmail.com> (raw) In-Reply-To: <20181129170530.37789-7-vincenzo.frascino@arm.com> On Thu, Nov 29, 2018 at 6:06 PM Vincenzo Frascino <vincenzo.frascino@arm.com> wrote: > +/* > + * The definitions below are required to overcome the limitations > + * of time_t on 32 bit architectures, which overflows in 2038. > + * The new code should use the replacements based on time64_t and > + * timespec64. > + * > + * The abstraction below will be updated once the migration to > + * time64_t is complete. > + */ > +#ifdef CONFIG_GENERIC_VDSO_32 > +#define __vdso_timespec old_timespec32 > +#define __vdso_timeval old_timeval32 > +#else > +#ifdef ENABLE_COMPAT_VDSO > +#define __vdso_timespec old_timespec32 > +#define __vdso_timeval old_timeval32 > +#else > +#define __vdso_timespec __kernel_timespec > +#define __vdso_timeval __kernel_old_timeval > +#endif /* CONFIG_COMPAT_VDSO */ > +#endif /* CONFIG_GENERIC_VDSO_32 */ > Have you considered doing this in the reverse way, by including the common parts from multiple implementations (32 and 64 bit), instead of compiling the same source file multiple times with different macros set? I think that would make it easier to understand. > + > +#ifdef CONFIG_HAVE_ARCH_TIMER > +static __always_inline notrace int __do_realtime_or_tai( > + const struct vdso_data *vd, > + struct __vdso_timespec *ts, > + bool is_tai) > +{ > + u32 seq, cs_mono_mult, cs_shift; > + u64 ns, sec; > + u64 cycle_last, cs_mono_mask; > + > + if (vd->use_syscall) > + return -1; > +repeat: Maybe instead of the #ifdef, do it like if (!IS_ENABLED(CONFIG_HAVE_ARCH_TIMER) || vd->use_syscall) return -1; > +static notrace int __cvdso_clock_gettime(clockid_t clock, > + struct __vdso_timespec *ts) > +{ > + const struct vdso_data *vd = __arch_get_vdso_data(); > + > + if (!__arch_valid_arg(ts)) > + return -EFAULT; > + > + switch (clock) { > + case CLOCK_REALTIME: > + if (do_realtime(vd, ts)) > + goto fallback; > + break; > + case CLOCK_TAI: > + if (do_tai(vd, ts)) > + goto fallback; > + break; > + case CLOCK_MONOTONIC: > + if (do_monotonic(vd, ts)) > + goto fallback; > + break; > + case CLOCK_MONOTONIC_RAW: > + if (do_monotonic_raw(vd, ts)) > + goto fallback; > + break; Please sync this up with the latest x86 version in arch/x86/entry/vdso/vclock_gettime.c, that version has seen a lot of improvements recently, so I'd recommend using a copy of that file as the base, and then modifying it as needed to make it work on the other architectures. Arnd
WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de> To: Vincenzo Frascino <vincenzo.frascino@arm.com> Cc: linux-arch <linux-arch@vger.kernel.org>, Linux ARM <linux-arm-kernel@lists.infradead.org>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, Russell King - ARM Linux <linux@armlinux.org.uk>, Ralf Baechle <ralf@linux-mips.org>, Paul Burton <paul.burton@mips.com>, Daniel Lezcano <daniel.lezcano@linaro.org>, Thomas Gleixner <tglx@linutronix.de>, Mark Salyzyn <salyzyn@android.com>, Peter Collingbourne <pcc@google.com> Subject: Re: [PATCH v2 06/28] kernel: Define gettimeofday vdso common code Date: Thu, 29 Nov 2018 21:42:35 +0100 [thread overview] Message-ID: <CAK8P3a1njNBWiMExBevqbT+AuUHdU4T2sc1o1rRTn+Ji=y2SbA@mail.gmail.com> (raw) Message-ID: <20181129204235.vJycSnvpr2f2aoiuianUhcKEj9xp01iFIDBMXqu5l5w@z> (raw) In-Reply-To: <20181129170530.37789-7-vincenzo.frascino@arm.com> On Thu, Nov 29, 2018 at 6:06 PM Vincenzo Frascino <vincenzo.frascino@arm.com> wrote: > +/* > + * The definitions below are required to overcome the limitations > + * of time_t on 32 bit architectures, which overflows in 2038. > + * The new code should use the replacements based on time64_t and > + * timespec64. > + * > + * The abstraction below will be updated once the migration to > + * time64_t is complete. > + */ > +#ifdef CONFIG_GENERIC_VDSO_32 > +#define __vdso_timespec old_timespec32 > +#define __vdso_timeval old_timeval32 > +#else > +#ifdef ENABLE_COMPAT_VDSO > +#define __vdso_timespec old_timespec32 > +#define __vdso_timeval old_timeval32 > +#else > +#define __vdso_timespec __kernel_timespec > +#define __vdso_timeval __kernel_old_timeval > +#endif /* CONFIG_COMPAT_VDSO */ > +#endif /* CONFIG_GENERIC_VDSO_32 */ > Have you considered doing this in the reverse way, by including the common parts from multiple implementations (32 and 64 bit), instead of compiling the same source file multiple times with different macros set? I think that would make it easier to understand. > + > +#ifdef CONFIG_HAVE_ARCH_TIMER > +static __always_inline notrace int __do_realtime_or_tai( > + const struct vdso_data *vd, > + struct __vdso_timespec *ts, > + bool is_tai) > +{ > + u32 seq, cs_mono_mult, cs_shift; > + u64 ns, sec; > + u64 cycle_last, cs_mono_mask; > + > + if (vd->use_syscall) > + return -1; > +repeat: Maybe instead of the #ifdef, do it like if (!IS_ENABLED(CONFIG_HAVE_ARCH_TIMER) || vd->use_syscall) return -1; > +static notrace int __cvdso_clock_gettime(clockid_t clock, > + struct __vdso_timespec *ts) > +{ > + const struct vdso_data *vd = __arch_get_vdso_data(); > + > + if (!__arch_valid_arg(ts)) > + return -EFAULT; > + > + switch (clock) { > + case CLOCK_REALTIME: > + if (do_realtime(vd, ts)) > + goto fallback; > + break; > + case CLOCK_TAI: > + if (do_tai(vd, ts)) > + goto fallback; > + break; > + case CLOCK_MONOTONIC: > + if (do_monotonic(vd, ts)) > + goto fallback; > + break; > + case CLOCK_MONOTONIC_RAW: > + if (do_monotonic_raw(vd, ts)) > + goto fallback; > + break; Please sync this up with the latest x86 version in arch/x86/entry/vdso/vclock_gettime.c, that version has seen a lot of improvements recently, so I'd recommend using a copy of that file as the base, and then modifying it as needed to make it work on the other architectures. Arnd
next prev parent reply other threads:[~2018-11-29 20:42 UTC|newest] Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-11-29 17:05 [PATCH v2 00/28] Unify vDSOs across more architectures Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 01/28] kernel: Standardize vdso_datapage Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 22:39 ` Thomas Gleixner 2018-11-29 22:39 ` Thomas Gleixner 2018-12-11 13:22 ` Vincenzo Frascino 2018-12-11 13:22 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 02/28] kernel: Add Monotonic boot time support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 03/28] kernel: Add International Atomic Time support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 04/28] kernel: Add masks support for Raw and NTP time Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 22:41 ` Thomas Gleixner 2018-11-29 22:41 ` Thomas Gleixner 2018-12-11 13:24 ` Vincenzo Frascino 2018-12-11 13:24 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 05/28] kernel: Add clock_mode support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 06/28] kernel: Define gettimeofday vdso common code Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 20:42 ` Arnd Bergmann [this message] 2018-11-29 20:42 ` Arnd Bergmann 2018-12-11 13:39 ` Vincenzo Frascino 2018-12-11 13:39 ` Vincenzo Frascino 2018-12-11 21:41 ` Arnd Bergmann 2018-12-11 21:41 ` Arnd Bergmann 2018-12-13 9:46 ` Vincenzo Frascino 2018-12-13 9:46 ` Vincenzo Frascino 2018-11-29 22:11 ` Thomas Gleixner 2018-11-29 22:11 ` Thomas Gleixner 2018-11-30 14:29 ` Arnd Bergmann 2018-11-30 14:29 ` Arnd Bergmann 2018-12-11 14:02 ` Vincenzo Frascino 2018-12-11 14:02 ` Vincenzo Frascino 2018-12-07 17:53 ` Will Deacon 2018-12-07 17:53 ` Will Deacon 2019-02-08 17:35 ` Will Deacon 2019-02-08 17:35 ` Will Deacon 2019-02-08 19:28 ` Thomas Gleixner 2019-02-08 19:28 ` Thomas Gleixner 2019-02-08 19:30 ` Thomas Gleixner 2019-02-08 19:30 ` Thomas Gleixner 2019-02-13 17:04 ` Will Deacon 2019-02-13 17:04 ` Will Deacon 2019-02-13 19:35 ` Thomas Gleixner 2019-02-13 19:35 ` Thomas Gleixner 2019-02-13 17:05 ` Will Deacon 2019-02-13 17:05 ` Will Deacon 2018-12-11 13:54 ` Vincenzo Frascino 2018-12-11 13:54 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 07/28] arm64: Build vDSO with -ffixed-x18 Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 08/28] arm64: Substitute gettimeofday with C implementation Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 09/28] arm64: compat: Alloc separate pages for vectors and sigpage Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 10/28] arm64: compat: Split kuser32 Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 11/28] arm64: compat: Refactor aarch32_alloc_vdso_pages() Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 12/28] arm64: compat: Add KUSER_HELPERS config option Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 13/28] arm64: compat: Add missing syscall numbers Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 14/28] arm64: compat: Expose signal related structures Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 15/28] arm64: compat: Generate asm offsets for signals Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 16/28] lib: vdso: Add compat support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 17/28] arm64: compat: Add vDSO Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 18/28] arm64: Refactor vDSO code Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 19/28] arm64: compat: vDSO setup for compat layer Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 20/28] arm64: elf: vDSO code page discovery Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 21/28] arm64: compat: Get sigreturn trampolines from vDSO Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 22/28] arm64: Add vDSO compat support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 23/28] arm64: Enable compat vDSO support Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 24/28] arm: Add support for generic vDSO Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-12-10 22:13 ` Mark Salyzyn 2018-12-10 22:13 ` Mark Salyzyn 2018-12-11 14:15 ` Vincenzo Frascino 2018-12-11 14:15 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 25/28] mips: Introduce vdso_direct Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 26/28] clock: csrc-4k: Add support for vdso_direct Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 27/28] clock: gic-timer: " Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino 2018-11-29 17:05 ` [PATCH v2 28/28] mips: Add support for generic vDSO Vincenzo Frascino 2018-11-29 17:05 ` Vincenzo Frascino
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAK8P3a1njNBWiMExBevqbT+AuUHdU4T2sc1o1rRTn+Ji=y2SbA@mail.gmail.com' \ --to=arnd@arndb.de \ --cc=catalin.marinas@arm.com \ --cc=daniel.lezcano@linaro.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux@armlinux.org.uk \ --cc=paul.burton@mips.com \ --cc=pcc@google.com \ --cc=ralf@linux-mips.org \ --cc=salyzyn@android.com \ --cc=tglx@linutronix.de \ --cc=vincenzo.frascino@arm.com \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).