linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] arm64: vdso: getcpu() support
@ 2020-06-05 13:11 Mark Brown
  2020-06-05 13:11 ` [PATCH 1/5] arm64: vdso: Provide a define when building the vDSO Mark Brown
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Mark Brown @ 2020-06-05 13:11 UTC (permalink / raw)
  To: Will Deacon, Catalin Marinas
  Cc: Mark Brown, Andrei Vagin, Vincenzo Frascino, linux-arm-kernel

Some applications, especially tracing ones, benefit from avoiding the
syscall overhead for getcpu() so it is common for architectures to have
vDSO implementations. Add one for arm64, using TPIDRRO_EL0 to pass a
pointer to per-CPU data rather than just store the immediate value in
order to allow for future extensibility.

It is questionable if something TPIDRRO_EL0 based is worthwhile at all
on current kernels, since v4.18 we have had support for restartable
sequences which can be used to provide a sched_getcpu() implementation
with generally better performance than the vDSO approach on
architectures which have that[1].  Work is ongoing to implement this for
glibc:

    https://lore.kernel.org/lkml/20200527185130.5604-3-mathieu.desnoyers@efficios.com/

but is not yet merged and will need similar work for other userspaces.
The main advantages for the vDSO implementation are the node parameter
(though this is a static mapping to CPU number so could be looked up
separately when processing data if it's needed, it shouldn't need to be
in the hot path) and ease of implementation for users.  

This is currently not compatible with KPTI due to what Will suggests is
a misunderstanding on my part about the use of TPIDRRO_EL0 by the KPTI
trampoline, since this posting is mainly for discussion of the approach
as a whole and Will only just mentioned this that's not been addressed
here.

Since we currently only have a single data page for the vDSO this will
also only currently work for lower numbered CPUs, this restriction will
be addressed separately.

There is some overlap with an in flight patch series from Andrei Vagin
supporting time namespaces in the vDSO, there shouldn't be a fundamental
issue integrating the two serieses.

This builds on work done by Kristina Martsenko some time ago but is a
new implementation.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d7822b1e24f2df5df98c76f0e94a5416349ff759

Mark Brown (5):
  arm64: vdso: Provide a define when building the vDSO
  arm64: vdso: Add per-CPU data
  arm64: vdso: Initialise the per-CPU vDSO data
  arm64: vdso: Add getcpu() implementation
  selftests: vdso: Support arm64 in getcpu() test

 arch/arm64/include/asm/processor.h            | 12 +----
 arch/arm64/include/asm/vdso/datapage.h        | 54 +++++++++++++++++++
 arch/arm64/kernel/process.c                   | 26 ++++++++-
 arch/arm64/kernel/vdso.c                      | 33 +++++++++++-
 arch/arm64/kernel/vdso/Makefile               |  4 +-
 arch/arm64/kernel/vdso/vdso.lds.S             |  1 +
 arch/arm64/kernel/vdso/vgetcpu.c              | 48 +++++++++++++++++
 .../testing/selftests/vDSO/vdso_test_getcpu.c | 10 ++++
 8 files changed, 172 insertions(+), 16 deletions(-)
 create mode 100644 arch/arm64/include/asm/vdso/datapage.h
 create mode 100644 arch/arm64/kernel/vdso/vgetcpu.c

-- 
2.20.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-06-17 18:25 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-05 13:11 [PATCH 0/5] arm64: vdso: getcpu() support Mark Brown
2020-06-05 13:11 ` [PATCH 1/5] arm64: vdso: Provide a define when building the vDSO Mark Brown
2020-06-05 13:11 ` [PATCH 2/5] arm64: vdso: Add per-CPU data Mark Brown
2020-06-05 13:11 ` [PATCH 3/5] arm64: vdso: Initialise the per-CPU vDSO data Mark Brown
2020-06-05 13:11 ` [PATCH 4/5] arm64: vdso: Add getcpu() implementation Mark Brown
2020-06-05 16:11   ` kernel test robot
2020-06-05 16:35     ` Mark Brown
2020-06-08  7:46       ` [kbuild-all] " Li Zhijian
2020-06-08 11:09         ` Mark Brown
2020-06-08 14:20           ` Philip Li
2020-06-07  2:04   ` kernel test robot
2020-06-05 13:11 ` [PATCH 5/5] selftests: vdso: Support arm64 in getcpu() test Mark Brown
2020-06-17 18:25 ` [PATCH 0/5] arm64: vdso: getcpu() support Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).