On Fri, Jul 24, 2020 at 06:26:23PM +0100, Catalin Marinas wrote: > On Wed, 24 Jun 2020 01:33:16 -0700, Andrei Vagin wrote: > > Currently the vdso has no awareness of time namespaces, which may > > apply distinct offsets to processes in different namespaces. To handle > > this within the vdso, we'll need to expose a per-namespace data page. > > > > As a preparatory step, this patch separates the vdso data page from > > the code pages, and has it faulted in via its own fault callback. > > Subsquent patches will extend this to support distinct pages per time > > namespace. > > > > [...] > > Applied to arm64 (for-next/timens), provisionally. > > One potential issue I did not check is the compat vDSO. The arm32 port > does not support timens currently. IIUC, with these patches and > COMPAT_VDSO enabled, it will allow timens for compat processes. Normally > I'd like the arm32 support first before updating compat but I don't > think there would be any interface incompatibility here. > > However, does this still work for arm32 processes if COMPAT_VDSO is > disabled in the arm64 kernel?
Yes, it does. I checked that the timens test passes with and without COMPAT_VDSO: [avagin@laptop linux]$ git describe HEAD v5.8-rc3-6-g9614cc576d76 alpine:/tip/tools/testing/selftests/timens# readelf -h ./timens ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: ARM Version: 0x1 Entry point address: 0x711 Start of program headers: 52 (bytes into file) Start of section headers: 15444 (bytes into file) Flags: 0x5000400, Version5 EABI, hard-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 7 Size of section headers: 40 (bytes) Number of section headers: 32 Section header string table index: 31 alpine:/tip/tools/testing/selftests/timens# uname -a Linux arm64-alpine 5.8.0-rc3+ #100 SMP Sun Jul 26 23:21:07 PDT 2020 aarch64 Linux [avagin@laptop linux]$ cat .config | grep VDSO CONFIG_COMPAT_VDSO=y CONFIG_THUMB2_COMPAT_VDSO=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_COMPAT_VDSO=y CONFIG_GENERIC_VDSO_TIME_NS=y alpine:/tip/tools/testing/selftests/timens# ./timens 1..10 ok 1 Passed for CLOCK_BOOTTIME (syscall) ok 2 Passed for CLOCK_BOOTTIME (vdso) not ok 3 # SKIP CLOCK_BOOTTIME_ALARM isn't supported not ok 4 # SKIP CLOCK_BOOTTIME_ALARM isn't supported ok 5 Passed for CLOCK_MONOTONIC (syscall) ok 6 Passed for CLOCK_MONOTONIC (vdso) ok 7 Passed for CLOCK_MONOTONIC_COARSE (syscall) ok 8 Passed for CLOCK_MONOTONIC_COARSE (vdso) ok 9 Passed for CLOCK_MONOTONIC_RAW (syscall) ok 10 Passed for CLOCK_MONOTONIC_RAW (vdso) # Pass 8 Fail 0 Xfail 0 Xpass 0 Skip 2 Error 0 [avagin@laptop linux]$ cat .config | grep VDSO # CONFIG_COMPAT_VDSO is not set CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_VDSO_TIME_NS=y alpine:/tip/tools/testing/selftests/timens# ./timens 1..10 ok 1 Passed for CLOCK_BOOTTIME (syscall) ok 2 Passed for CLOCK_BOOTTIME (vdso) not ok 3 # SKIP CLOCK_BOOTTIME_ALARM isn't supported not ok 4 # SKIP CLOCK_BOOTTIME_ALARM isn't supported ok 5 Passed for CLOCK_MONOTONIC (syscall) ok 6 Passed for CLOCK_MONOTONIC (vdso) ok 7 Passed for CLOCK_MONOTONIC_COARSE (syscall) ok 8 Passed for CLOCK_MONOTONIC_COARSE (vdso) ok 9 Passed for CLOCK_MONOTONIC_RAW (syscall) ok 10 Passed for CLOCK_MONOTONIC_RAW (vdso) # Pass 8 Fail 0 Xfail 0 Xpass 0 Skip 2 Error 0 Thanks, Andrei