From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 20007C4332F for ; Fri, 10 Nov 2023 11:55:04 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4SRch64GXpz3d95 for ; Fri, 10 Nov 2023 22:55:02 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=arm.com (client-ip=217.140.110.172; helo=foss.arm.com; envelope-from=vincenzo.frascino@arm.com; receiver=lists.ozlabs.org) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lists.ozlabs.org (Postfix) with ESMTP id 4SRZWw1FGKz3cP5 for ; Fri, 10 Nov 2023 21:17:44 +1100 (AEDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6DC7712FC; Fri, 10 Nov 2023 02:17:56 -0800 (PST) Received: from [192.168.4.21] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2EC783F6C4; Fri, 10 Nov 2023 02:16:58 -0800 (PST) Message-ID: <8288a2e5-afa3-462a-9470-0b010e4bc5bc@arm.com> Date: Fri, 10 Nov 2023 10:16:46 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 15/22] arch: vdso: consolidate gettime prototypes To: Arnd Bergmann , Andrew Morton , linux-kernel@vger.kernel.org, Masahiro Yamada , linux-kbuild@vger.kernel.org References: <20231108125843.3806765-1-arnd@kernel.org> <20231108125843.3806765-16-arnd@kernel.org> Content-Language: en-US From: Vincenzo Frascino In-Reply-To: <20231108125843.3806765-16-arnd@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Mailman-Approved-At: Fri, 10 Nov 2023 22:54:36 +1100 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Juri Lelli , linux-fbdev@vger.kernel.org, x86@kernel.org, loongarch@lists.linux.dev, linux-sh@vger.kernel.org, Peter Zijlstra , Catalin Marinas , dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, Guo Ren , Anil S Keshavamurthy , sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org, Will Deacon , Greg Ungerer , Nicolas Schier , linux-s390@vger.kernel.org, Vincent Guittot , Helge Deller , Huacai Chen , Russell King , Ard Biesheuvel , linux-bcachefs@vger.kernel.org, Ingo Molnar , Vineet Gupta , "Naveen N. Rao" , Matt Turner , linux-snps-arc@lists.infradead.org, linux-tra ce-kernel@vger.kernel.org, Kees Cook , Arnd Bergmann , Heiko Carstens , =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= , linuxppc-dev@lists.ozlabs.org, Nicholas Piggin , Nathan Chancellor , linux-m68k@lists.linux-m68k.org, linux-csky@vger.kernel.org, Steven Rostedt , Andy Lutomirski , John Paul Adrian Glaubitz , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Michal Simek , Thomas Bogendoerfer , linux-parisc@vger.kernel.org, Timur Tabi , Geoff Levand , Greg Kroah-Hartman , Kent Overstreet , Nick Desaulniers , linux-mips@vger.kernel.org, Sudip Mukherjee , Dinh Nguyen , linux-usb@vger.kernel.org, Palmer Dabbelt , Masami Hiramatsu , linux-alpha@vger.kernel.org, linux-mtd@lists.infradead.org, David Woodhouse , "David S. Miller" , Al Viro Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Hi Arnd, On 11/8/23 12:58, Arnd Bergmann wrote: > From: Arnd Bergmann > > The VDSO functions are defined as globals in the kernel sources but intended > to be called from userspace, so there is no need to declare them in a kernel > side header. > > Without a prototype, this now causes warnings such as > > arch/mips/vdso/vgettimeofday.c:14:5: error: no previous prototype for '__vdso_clock_gettime' [-Werror=missing-prototypes] > arch/mips/vdso/vgettimeofday.c:28:5: error: no previous prototype for '__vdso_gettimeofday' [-Werror=missing-prototypes] > arch/mips/vdso/vgettimeofday.c:36:5: error: no previous prototype for '__vdso_clock_getres' [-Werror=missing-prototypes] > arch/mips/vdso/vgettimeofday.c:42:5: error: no previous prototype for '__vdso_clock_gettime64' [-Werror=missing-prototypes] > arch/sparc/vdso/vclock_gettime.c:254:1: error: no previous prototype for '__vdso_clock_gettime' [-Werror=missing-prototypes] > arch/sparc/vdso/vclock_gettime.c:282:1: error: no previous prototype for '__vdso_clock_gettime_stick' [-Werror=missing-prototypes] > arch/sparc/vdso/vclock_gettime.c:307:1: error: no previous prototype for '__vdso_gettimeofday' [-Werror=missing-prototypes] > arch/sparc/vdso/vclock_gettime.c:343:1: error: no previous prototype for '__vdso_gettimeofday_stick' [-Werror=missing-prototypes] > > Most architectures have already added workarounds for these by adding > declarations somewhere, but since these are all compatible, we should > really just have one copy, with an #ifdef check for the 32-bit vs > 64-bit variant and use that everywhere. > I agree, it is a good idea to have a single header for this purpose. > Unfortunately, the sparc version is currently incompatible since > that never added support for __vdso_clock_gettime64() in 32-bit > userland. For the moment, I'm leaving this one out, as I can't > easily test it and it requires a larger rework. > > Signed-off-by: Arnd Bergmann Reviewed-by: Vincenzo Frascino > --- > arch/arm/include/asm/vdso.h | 5 ----- > arch/arm/vdso/vgettimeofday.c | 1 + > arch/arm64/kernel/vdso32/vgettimeofday.c | 1 + > arch/csky/kernel/vdso/vgettimeofday.c | 11 +---------- > arch/loongarch/vdso/vgettimeofday.c | 7 +------ > arch/mips/vdso/vgettimeofday.c | 1 + > arch/riscv/kernel/vdso/vgettimeofday.c | 7 +------ > arch/x86/entry/vdso/vclock_gettime.c | 10 +--------- > arch/x86/include/asm/vdso/gettimeofday.h | 2 -- > arch/x86/um/vdso/um_vdso.c | 1 + > include/vdso/gettime.h | 23 +++++++++++++++++++++++ > 11 files changed, 31 insertions(+), 38 deletions(-) > create mode 100644 include/vdso/gettime.h > > diff --git a/arch/arm/include/asm/vdso.h b/arch/arm/include/asm/vdso.h > index 422c3afa806a..5b85889f82ee 100644 > --- a/arch/arm/include/asm/vdso.h > +++ b/arch/arm/include/asm/vdso.h > @@ -24,11 +24,6 @@ static inline void arm_install_vdso(struct mm_struct *mm, unsigned long addr) > > #endif /* CONFIG_VDSO */ > > -int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts); > -int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts); > -int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); > -int __vdso_clock_getres(clockid_t clock_id, struct old_timespec32 *res); > - > #endif /* __ASSEMBLY__ */ > > #endif /* __KERNEL__ */ > diff --git a/arch/arm/vdso/vgettimeofday.c b/arch/arm/vdso/vgettimeofday.c > index a003beacac76..3554aa35f1ba 100644 > --- a/arch/arm/vdso/vgettimeofday.c > +++ b/arch/arm/vdso/vgettimeofday.c > @@ -8,6 +8,7 @@ > #include > #include > #include > +#include > > int __vdso_clock_gettime(clockid_t clock, > struct old_timespec32 *ts) > diff --git a/arch/arm64/kernel/vdso32/vgettimeofday.c b/arch/arm64/kernel/vdso32/vgettimeofday.c > index 5acff29c5991..e23c7f4ef26b 100644 > --- a/arch/arm64/kernel/vdso32/vgettimeofday.c > +++ b/arch/arm64/kernel/vdso32/vgettimeofday.c > @@ -5,6 +5,7 @@ > * Copyright (C) 2018 ARM Limited > * > */ > +#include > > int __vdso_clock_gettime(clockid_t clock, > struct old_timespec32 *ts) > diff --git a/arch/csky/kernel/vdso/vgettimeofday.c b/arch/csky/kernel/vdso/vgettimeofday.c > index c4831145eed5..55af30e83752 100644 > --- a/arch/csky/kernel/vdso/vgettimeofday.c > +++ b/arch/csky/kernel/vdso/vgettimeofday.c > @@ -2,36 +2,27 @@ > > #include > #include > +#include > > extern > -int __vdso_clock_gettime(clockid_t clock, > - struct old_timespec32 *ts); > int __vdso_clock_gettime(clockid_t clock, > struct old_timespec32 *ts) > { > return __cvdso_clock_gettime32(clock, ts); > } > > -int __vdso_clock_gettime64(clockid_t clock, > - struct __kernel_timespec *ts); > int __vdso_clock_gettime64(clockid_t clock, > struct __kernel_timespec *ts) > { > return __cvdso_clock_gettime(clock, ts); > } > > -extern > -int __vdso_gettimeofday(struct __kernel_old_timeval *tv, > - struct timezone *tz); > int __vdso_gettimeofday(struct __kernel_old_timeval *tv, > struct timezone *tz) > { > return __cvdso_gettimeofday(tv, tz); > } > > -extern > -int __vdso_clock_getres(clockid_t clock_id, > - struct old_timespec32 *res); > int __vdso_clock_getres(clockid_t clock_id, > struct old_timespec32 *res) > { > diff --git a/arch/loongarch/vdso/vgettimeofday.c b/arch/loongarch/vdso/vgettimeofday.c > index 8f22863bd7ea..0885c1f3a89d 100644 > --- a/arch/loongarch/vdso/vgettimeofday.c > +++ b/arch/loongarch/vdso/vgettimeofday.c > @@ -5,23 +5,18 @@ > * Copyright (C) 2020-2022 Loongson Technology Corporation Limited > */ > #include > +#include > > -extern > -int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts); > int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts) > { > return __cvdso_clock_gettime(clock, ts); > } > > -extern > -int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); > int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) > { > return __cvdso_gettimeofday(tv, tz); > } > > -extern > -int __vdso_clock_getres(clockid_t clock_id, struct __kernel_timespec *res); > int __vdso_clock_getres(clockid_t clock_id, struct __kernel_timespec *res) > { > return __cvdso_clock_getres(clock_id, res); > diff --git a/arch/mips/vdso/vgettimeofday.c b/arch/mips/vdso/vgettimeofday.c > index 6b83b6376a4b..604afea3f336 100644 > --- a/arch/mips/vdso/vgettimeofday.c > +++ b/arch/mips/vdso/vgettimeofday.c > @@ -9,6 +9,7 @@ > */ > #include > #include > +#include > > #if _MIPS_SIM != _MIPS_SIM_ABI64 > int __vdso_clock_gettime(clockid_t clock, > diff --git a/arch/riscv/kernel/vdso/vgettimeofday.c b/arch/riscv/kernel/vdso/vgettimeofday.c > index cc0d80699c31..b35057802584 100644 > --- a/arch/riscv/kernel/vdso/vgettimeofday.c > +++ b/arch/riscv/kernel/vdso/vgettimeofday.c > @@ -8,23 +8,18 @@ > > #include > #include > +#include > > -extern > -int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts); > int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts) > { > return __cvdso_clock_gettime(clock, ts); > } > > -extern > -int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); > int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) > { > return __cvdso_gettimeofday(tv, tz); > } > > -extern > -int __vdso_clock_getres(clockid_t clock_id, struct __kernel_timespec *res); > int __vdso_clock_getres(clockid_t clock_id, struct __kernel_timespec *res) > { > return __cvdso_clock_getres(clock_id, res); > diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c > index 7d70935b6758..0debc194bd78 100644 > --- a/arch/x86/entry/vdso/vclock_gettime.c > +++ b/arch/x86/entry/vdso/vclock_gettime.c > @@ -11,12 +11,10 @@ > #include > #include > #include > +#include > > #include "../../../../lib/vdso/gettimeofday.c" > > -extern int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); > -extern __kernel_old_time_t __vdso_time(__kernel_old_time_t *t); > - > int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) > { > return __cvdso_gettimeofday(tv, tz); > @@ -35,9 +33,6 @@ __kernel_old_time_t time(__kernel_old_time_t *t) __attribute__((weak, alias("__v > > #if defined(CONFIG_X86_64) && !defined(BUILD_VDSO32_64) > /* both 64-bit and x32 use these */ > -extern int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts); > -extern int __vdso_clock_getres(clockid_t clock, struct __kernel_timespec *res); > - > int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts) > { > return __cvdso_clock_gettime(clock, ts); > @@ -56,9 +51,6 @@ int clock_getres(clockid_t, struct __kernel_timespec *) > > #else > /* i386 only */ > -extern int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts); > -extern int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res); > - > int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts) > { > return __cvdso_clock_gettime32(clock, ts); > diff --git a/arch/x86/include/asm/vdso/gettimeofday.h b/arch/x86/include/asm/vdso/gettimeofday.h > index c81858d903dc..a46edb0e0cf7 100644 > --- a/arch/x86/include/asm/vdso/gettimeofday.h > +++ b/arch/x86/include/asm/vdso/gettimeofday.h > @@ -337,8 +337,6 @@ u64 vdso_calc_delta(u64 cycles, u64 last, u64 mask, u32 mult) > } > #define vdso_calc_delta vdso_calc_delta > > -int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts); > - > #endif /* !__ASSEMBLY__ */ > > #endif /* __ASM_VDSO_GETTIMEOFDAY_H */ > diff --git a/arch/x86/um/vdso/um_vdso.c b/arch/x86/um/vdso/um_vdso.c > index ff0f3b4b6c45..63768dd347ce 100644 > --- a/arch/x86/um/vdso/um_vdso.c > +++ b/arch/x86/um/vdso/um_vdso.c > @@ -12,6 +12,7 @@ > #include > #include > #include > +#include > > int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts) > { > diff --git a/include/vdso/gettime.h b/include/vdso/gettime.h > new file mode 100644 > index 000000000000..c50d152e7b3e > --- /dev/null > +++ b/include/vdso/gettime.h > @@ -0,0 +1,23 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _VDSO_GETTIME_H > +#define _VDSO_GETTIME_H > + > +#include > + > +struct __kernel_timespec; > +struct timezone; > + > +#if !defined(CONFIG_64BIT) || defined(BUILD_VDSO32_64) > +struct old_timespec32; > +int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res); > +int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts); > +#else > +int __vdso_clock_getres(clockid_t clock, struct __kernel_timespec *res); > +int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts); > +#endif > + > +__kernel_old_time_t __vdso_time(__kernel_old_time_t *t); > +int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); > +int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts); > + > +#endif -- Regards, Vincenzo