Re: [PATCH 4/4] vdso: avoid including asm/page.h

Christophe Leroy <[email protected]>
Newsgroups gmane.linux.ports.m68k,gmane.linux.kernel,gmane.linux.ports.alpha,gmane.linux.kernel.arc,gmane.linux.ports.arm.kernel,gmane.linux.ports.hexagon,gmane.linux.ports.mips,gmane.linux.ports.parisc,gmane.linux.ports.ppc64.devel,gmane.linux.ports.riscv,gmane.linux.ports.sh.devel,gmane.linux.ports.sparc,gmane.linux.uml.devel
Message-ID <[email protected]>

Le 26/02/2024 à 17:14, Arnd Bergmann a écrit :
> From: Arnd Bergmann <[email protected]>
> 
> The recent change to the vdso_data_store broke building compat VDSO
> on at least arm64 because it includes headers outside of the include/vdso/
> namespace:

I understand that powerpc64 also has an issue, see 
https://patchwork.ozlabs.org/project/linuxppc-dev/patch/[email protected]/

> 
> In file included from arch/arm64/include/asm/lse.h:5,
>                   from arch/arm64/include/asm/cmpxchg.h:14,
>                   from arch/arm64/include/asm/atomic.h:16,
>                   from include/linux/atomic.h:7,
>                   from include/asm-generic/bitops/atomic.h:5,
>                   from arch/arm64/include/asm/bitops.h:25,
>                   from include/linux/bitops.h:68,
>                   from arch/arm64/include/asm/memory.h:209,
>                   from arch/arm64/include/asm/page.h:46,
>                   from include/vdso/datapage.h:22,
>                   from lib/vdso/gettimeofday.c:5,
>                   from <command-line>:
> arch/arm64/include/asm/atomic_ll_sc.h:298:9: error: unknown type name 'u128'
>    298 |         u128 full;
> 
> Use an open-coded page size calculation based on the new CONFIG_PAGE_SHIFT
> Kconfig symbol instead.
> 
> Reported-by: Linux Kernel Functional Testing <[email protected]>
> Fixes: a0d2fcd62ac2 ("vdso/ARM: Make union vdso_data_store available for all architectures")
> Link: https://lore.kernel.org/lkml/CA+G9fYtrXXm_KO9fNPz3XaRxHV7UD_yQp-TEuPQrNRHU+_0W_Q@mail.gmail.com/
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
>   include/vdso/datapage.h | 4 +---
>   1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/include/vdso/datapage.h b/include/vdso/datapage.h
> index 7ba44379a095..2c39a67d7e23 100644
> --- a/include/vdso/datapage.h
> +++ b/include/vdso/datapage.h
> @@ -19,8 +19,6 @@
>   #include <vdso/time32.h>
>   #include <vdso/time64.h>
>   
> -#include <asm/page.h>
> -
>   #ifdef CONFIG_ARCH_HAS_VDSO_DATA
>   #include <asm/vdso/data.h>
>   #else
> @@ -128,7 +126,7 @@ extern struct vdso_data _timens_data[CS_BASES] __attribute__((visibility("hidden
>    */
>   union vdso_data_store {
>   	struct vdso_data	data[CS_BASES];
> -	u8			page[PAGE_SIZE];
> +	u8			page[1ul << CONFIG_PAGE_SHIFT];

Usually 1UL is used (capital letter)

Maybe better to (re)define PAGE_SIZE instead, something like:

#define PAGE_SIZE (1UL << CONFIG_PAGE_SHIFT)


>   };
>   
>   /*
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.