Skip to content

Clean up and unify the vDSO

Andy Lutomirski linux-next lkml 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v5 Latest7 patches 5 repliesIn review
  2. v36 patches 1 replySuperseded
  3. v26 patches 3 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v16 patches1 replySuperseded

Changes in v5 from the cover letter

- Fixed the alignment of fixmap (build / functionality fix)

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7x86,mm: Ensure correct alignment of the fixmaparch/x86/mm/ioremap.c arch/x86/mm/pgtable.c+9 -30 replies
2/7x86: Clean up 32-bit vs 64-bit vdso paramsarch/x86/include/asm/elf.h arch/x86/um/vdso/vma.c arch/x86/vdso/vdso32-setup.c +2 more+30 -220 replies
3/7x86: Move syscall and sysenter setup into kernel/cpu/common.carch/x86/include/asm/proto.h arch/x86/kernel/cpu/common.c arch/x86/vdso/vdso32-setup.c+32 -320 replies
4/7x86: Reimplement vdso.so preparation in build-time Carch/x86/ia32/ia32_signal.c arch/x86/include/asm/elf.h arch/x86/include/asm/mmu.h +15 more+400 -26020 replies
5/7x86: Move the 32-bit vdso special pages after the textarch/x86/include/asm/elf.h arch/x86/include/asm/vdso.h arch/x86/include/asm/vdso32.h +5 more+173 -1660 replies
6/7x86: Move the vvar and hpet mappings next to the 64-bit vDSOarch/x86/include/asm/fixmap.h arch/x86/include/asm/vvar.h arch/x86/include/uapi/asm/vsyscall.h +8 more+27 -770 replies
7/7x86: Remove vestiges of VDSO_PRELINK and some outdated commentsarch/x86/vdso/vdso.lds.S arch/x86/vdso/vdso32/vdso32.lds.S arch/x86/vdso/vdsox32.lds.S+3 -160 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v5 yet.

Read the v5 thread

Cover letter [PATCH v5 0/7] Clean up and unify the vDSO

This rewrites a bunch of the vdso code. After these patches, the vvar and hpet pages are mapped directly after the vdso text on all five vdso variants. The fixmaps are gone on 64-bit systems.

It would be possible to build the x32 vdso the normal way on top of these patches.

I haven't touched the pvclock code. In a discussion with Marcello Tosatti, I think we concluded that the kvmclock code could be significantly simplified and sped up without breaking anything, but I want to save that for later.

There's a further change for 32-bit in here: the fixmap is now always aligned to a PMD (i.e. 4M) boundary. This may waste up to 4M-4k of address space if a hypervisor is in use. If that's a problem, then that part of this change could be reverted, but the existing code was asking for trouble.

This should apply to -linus or to tip/x86/vdso. It's also here:

https://git.kernel.org/cgit/linux/kernel/git/luto/linux.git/log/?h=vdso/cleanups

Changed from v4:
- Fixed the alignment of fixmap (build / functionality fix)

Changes from v3:
- Improve the changelog message for patch 2.

Changes from v2:
- Fixed the 32-bit build. Hopefully I didn't screw
up bisection.

Changes from v1:
- Rebased
- I think Gold is working (this is a side effect of the rebase)

Andy Lutomirski (7):
x86,mm: Ensure correct alignment of the fixmap
x86: Clean up 32-bit vs 64-bit vdso params
x86: Move syscall and sysenter setup into kernel/cpu/common.c
x86: Reimplement vdso.so preparation in build-time C
x86: Move the 32-bit vdso special pages after the text
x86: Move the vvar and hpet mappings next to the 64-bit vDSO
x86: Remove vestiges of VDSO_PRELINK and some outdated comments

 arch/x86/ia32/ia32_signal.c          |   8 +-
 arch/x86/include/asm/elf.h           |  35 +++---
 arch/x86/include/asm/fixmap.h        |  11 +-
 arch/x86/include/asm/mmu.h           |   2 +-
 arch/x86/include/asm/proto.h         |   2 -
 arch/x86/include/asm/vdso.h          |  74 +++++-------
 arch/x86/include/asm/vdso32.h        |  11 --
 arch/x86/include/asm/vvar.h          |  20 +---
 arch/x86/include/uapi/asm/vsyscall.h |   7 +-
 arch/x86/kernel/cpu/common.c         |  33 ++++++
 arch/x86/kernel/hpet.c               |   3 -
 arch/x86/kernel/signal.c             |   6 +-
 arch/x86/kernel/vsyscall_64.c        |  15 +--
 arch/x86/mm/fault.c                  |   5 +-
 arch/x86/mm/init_64.c                |  13 +-
 arch/x86/mm/ioremap.c                |   6 +
 arch/x86/mm/pgtable.c                |   6 +-
 arch/x86/um/vdso/vma.c               |   2 +-
 arch/x86/vdso/.gitignore             |   5 +-
 arch/x86/vdso/Makefile               |  90 +++++---------
 arch/x86/vdso/vclock_gettime.c       |  26 ++--
 arch/x86/vdso/vdso-layout.lds.S      |  40 ++++---
 arch/x86/vdso/vdso.S                 |   3 -
 arch/x86/vdso/vdso.lds.S             |   7 +-
 arch/x86/vdso/vdso2c.c               | 156 ++++++++++++++++++++++++
 arch/x86/vdso/vdso2c.h               | 154 ++++++++++++++++++++++++
 arch/x86/vdso/vdso32-setup.c         | 196 ++++---------------------------
 arch/x86/vdso/vdso32.S               |   9 --
 arch/x86/vdso/vdso32/vdso32.lds.S    |  15 +--
 arch/x86/vdso/vdsox32.S              |   3 -
 arch/x86/vdso/vdsox32.lds.S          |   7 +-
 arch/x86/vdso/vma.c                  | 222 +++++++++++++++++++----------------
 arch/x86/xen/mmu.c                   |   8 +-
 arch/x86/xen/setup.c                 |  11 +-
 kernel/sysctl.c                      |   5 +
 35 files changed, 657 insertions(+), 559 deletions(-)
 delete mode 100644 arch/x86/include/asm/vdso32.h
 delete mode 100644 arch/x86/vdso/vdso.S
 create mode 100644 arch/x86/vdso/vdso2c.c
 create mode 100644 arch/x86/vdso/vdso2c.h
 delete mode 100644 arch/x86/vdso/vdso32.S
 delete mode 100644 arch/x86/vdso/vdsox32.S
Signature · 1 line
1.9.0