On 11/6/2025 3:31 PM, Thomas WeiÃschuh wrote:
The generic vDSO provides a lot common functionality shared between
different architectures. SPARC is the last architecture not using it,
preventing some necessary code cleanup.

Make use of the generic infrastructure.

Follow-up to and replacement for Arnd's SPARC vDSO removal patches:
https://lore.kernel.org/lkml/[email protected]/

SPARC64 can not map .bss into userspace, so the vDSO datapages are
switched over to be allocated dynamically. This requires changes to the
s390 and random subsystem vDSO initialization as preparation.
The random subsystem changes in turn require some cleanup of the vDSO
headers to not end up as ugly #ifdef mess.

Tested on a Niagara T4 and QEMU.

This has a semantic conflict with my series "vdso: Reject absolute
relocations during build" [0]. The last patch of this series expects all
users of the generic vDSO library to use the vdsocheck tool.
This is not the case (yet) for SPARC64. I do have the patches for the
integration, the specifics will depend on which series is applied first.

Based on v6.18-rc1.

[0] 
https://lore.kernel.org/lkml/[email protected]/

Signed-off-by: Thomas Weißschuh <[email protected]>
---
Changes in v5:
- Merge the patches for 'struct page' mapping and dynamic allocation
- Zero out newly-allocated data pages
- Pick up review tags
- Link to v4: 
https://lore.kernel.org/r/[email protected]

Changes in v4:
- Rebase on v6.18-rc1.
- Keep inclusion of asm/clocksource.h from linux/clocksource.h
- Reword description of "s390/time: Set up vDSO datapage later"
- Link to v3: 
https://lore.kernel.org/r/[email protected]

Changes in v3:
- Allocate vDSO data pages dynamically (and lots of preparations for that)
- Drop clock_getres()
- Fix 32bit clock_gettime() syscall fallback
- Link to v2: 
https://lore.kernel.org/r/[email protected]

Changes in v2:
- Rebase on v6.17-rc1
- Drop RFC state
- Fix typo in commit message
- Drop duplicate 'select GENERIC_TIME_VSYSCALL'
- Merge "sparc64: time: Remove architecture-specific clocksource data" into the
   main conversion patch. It violated the check in 
__clocksource_register_scale()
- Link to v1: 
https://lore.kernel.org/r/[email protected]

---
Arnd Bergmann (1):
       clocksource: remove ARCH_CLOCKSOURCE_DATA

Thomas Weißschuh (33):
       selftests: vDSO: vdso_test_correctness: Handle different tv_usec types
       arm64: vDSO: getrandom: Explicitly include asm/alternative.h
       arm64: vDSO: gettimeofday: Explicitly include vdso/clocksource.h
       arm64: vDSO: compat_gettimeofday: Add explicit includes
       ARM: vdso: gettimeofday: Add explicit includes
       powerpc/vdso/gettimeofday: Explicitly include vdso/time32.h
       powerpc/vdso: Explicitly include asm/cputable.h and asm/feature-fixups.h
       LoongArch: vDSO: Explicitly include asm/vdso/vdso.h
       MIPS: vdso: Add include guard to asm/vdso/vdso.h
       MIPS: vdso: Explicitly include asm/vdso/vdso.h
       random: vDSO: Add explicit includes
       vdso/gettimeofday: Add explicit includes
       vdso/helpers: Explicitly include vdso/processor.h
       vdso/datapage: Remove inclusion of gettimeofday.h
       vdso/datapage: Trim down unnecessary includes
       random: vDSO: trim vDSO includes
       random: vDSO: remove ifdeffery
       random: vDSO: split out datapage update into helper functions
       random: vDSO: only access vDSO datapage after random_init()
       s390/time: Set up vDSO datapage later
       vdso/datastore: Reduce scope of some variables in vvar_fault()
       vdso/datastore: Drop inclusion of linux/mmap_lock.h
       vdso/datastore: Allocate data pages dynamically
       sparc64: vdso: Link with -z noexecstack
       sparc64: vdso: Remove obsolete "fake section table" reservation
       sparc64: vdso: Replace code patching with runtime conditional
       sparc64: vdso: Move hardware counter read into header
       sparc64: vdso: Move syscall fallbacks into header
       sparc64: vdso: Introduce vdso/processor.h
       sparc64: vdso: Switch to the generic vDSO library
       sparc64: vdso2c: Drop sym_vvar_start handling
       sparc64: vdso2c: Remove symbol handling
       sparc64: vdso: Implement clock_gettime64()

  arch/arm/include/asm/vdso/gettimeofday.h           |   2 +
  arch/arm64/include/asm/vdso/compat_gettimeofday.h  |   3 +
  arch/arm64/include/asm/vdso/gettimeofday.h         |   2 +
  arch/arm64/kernel/vdso/vgetrandom.c                |   2 +
  arch/loongarch/kernel/process.c                    |   1 +
  arch/loongarch/kernel/vdso.c                       |   1 +
  arch/mips/include/asm/vdso/vdso.h                  |   5 +
  arch/mips/kernel/vdso.c                            |   1 +
  arch/powerpc/include/asm/vdso/gettimeofday.h       |   1 +
  arch/powerpc/include/asm/vdso/processor.h          |   3 +
  arch/s390/kernel/time.c                            |   4 +-
  arch/sparc/Kconfig                                 |   3 +-
  arch/sparc/include/asm/clocksource.h               |   9 -
  arch/sparc/include/asm/processor.h                 |   3 +
  arch/sparc/include/asm/processor_32.h              |   2 -
  arch/sparc/include/asm/processor_64.h              |  25 --
  arch/sparc/include/asm/vdso.h                      |   2 -
  arch/sparc/include/asm/vdso/clocksource.h          |  10 +
  arch/sparc/include/asm/vdso/gettimeofday.h         | 184 ++++++++++
  arch/sparc/include/asm/vdso/processor.h            |  41 +++
  arch/sparc/include/asm/vdso/vsyscall.h             |  10 +
  arch/sparc/include/asm/vvar.h                      |  75 ----
  arch/sparc/kernel/Makefile                         |   1 -
  arch/sparc/kernel/time_64.c                        |   6 +-
  arch/sparc/kernel/vdso.c                           |  69 ----
  arch/sparc/vdso/Makefile                           |   8 +-
  arch/sparc/vdso/vclock_gettime.c                   | 380 ++-------------------
  arch/sparc/vdso/vdso-layout.lds.S                  |  26 +-
  arch/sparc/vdso/vdso.lds.S                         |   2 -
  arch/sparc/vdso/vdso2c.c                           |  24 --
  arch/sparc/vdso/vdso2c.h                           |  45 +--
  arch/sparc/vdso/vdso32/vdso32.lds.S                |   4 +-
  arch/sparc/vdso/vma.c                              | 274 +--------------
  drivers/char/random.c                              |  71 ++--
  include/linux/clocksource.h                        |   6 +-
  include/linux/vdso_datastore.h                     |   6 +
  include/vdso/datapage.h                            |  23 +-
  include/vdso/helpers.h                             |   1 +
  init/main.c                                        |   2 +
  kernel/time/Kconfig                                |   4 -
  lib/vdso/datastore.c                               |  74 ++--
  lib/vdso/getrandom.c                               |   3 +
  lib/vdso/gettimeofday.c                            |  17 +
  .../testing/selftests/vDSO/vdso_test_correctness.c |   8 +-
  44 files changed, 449 insertions(+), 994 deletions(-)
---
base-commit: 28b1ac5ccd8d4900a8f53f0e6e84d517a7ccc71f
change-id: 20250722-vdso-sparc64-generic-2-25f2e058e92c

Best regards,

The regression [1] v4 series patchset [2] had caused as part of [3]
has been fixed by this series.

Tested-by: Srikanth Aithal <[email protected]>

[1] https://lore.kernel.org/all/[email protected]/T/#u [2] https://lore.kernel.org/all/[email protected]/T/#m5a310ed22ed9203672b0d0d85ecda0a8fec481c4 specifically "[PATCH v4 24/35] vdso/datastore: Allocate data pages dynamically" [3] next-20251103, https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

Reply via email to