Subject: [PATCH v3 0/2] LoongArch: Implement getrandom() in vDSO For the rationale to implement getrandom() in vDSO see [1]. The vDSO getrandom() needs a stack-less ChaCha20 implementation, so we need to add architecture-specific code and wire it up with the generic code. Both generic LoongArch implementation and Loongson SIMD eXtension based implementation are added. To dispatch them at runtime without invoking cpucfg on each call, the alternative runtime patching mechanism is extended to cover the vDSO. The implementation is tested with the kernel selftests added by the last patch in [1]. I had to make some adjustments to make it work on LoongArch (see [2], I've not submitted the changes as at now because I'm unsure about the KHDR_INCLUDES addition). The vdso_test_getrandom bench-single result: vdso: 25000000 times in 0.647855257 seconds (generic) vdso: 25000000 times in 0.601068605 seconds (LSX) libc: 25000000 times in 6.948168864 seconds syscall: 25000000 times in 6.990265548 seconds The vdso_test_getrandom bench-multi result: vdso: 25000000 x 256 times in 35.322187834 seconds (generic) vdso: 25000000 x 256 times in 29.183885426 seconds (LSX) libc: 25000000 x 256 times in 356.628428409 seconds syscall: 25000000 x 256 times in 334.764602866 seconds [1]:https://lore.kernel.org/all/20240712014009.281406-1-Jason@xxxxxxxxx/ [2]:https://github.com/xry111/linux/commits/xry111/la-vdso-v3/ [v2]->v3: - Add a generic LoongArch implementation for which LSX isn't needed. v1->v2: - Properly send the series to the list. [v2]:https://lore.kernel.org/all/20240815133357.35829-1-xry111@xxxxxxxxxxx/ Xi Ruoyao (3): LoongArch: vDSO: Wire up getrandom() vDSO implementation LoongArch: Perform alternative runtime patching on vDSO LoongArch: vDSO: Add LSX implementation of vDSO getrandom() arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/vdso/getrandom.h | 47 ++++ arch/loongarch/include/asm/vdso/vdso.h | 8 + arch/loongarch/kernel/asm-offsets.c | 10 + arch/loongarch/kernel/vdso.c | 14 +- arch/loongarch/vdso/Makefile | 6 + arch/loongarch/vdso/memset.S | 24 ++ arch/loongarch/vdso/vdso.lds.S | 7 + arch/loongarch/vdso/vgetrandom-chacha-lsx.S | 162 +++++++++++++ arch/loongarch/vdso/vgetrandom-chacha.S | 252 ++++++++++++++++++++ arch/loongarch/vdso/vgetrandom.c | 19 ++ 11 files changed, 549 insertions(+), 1 deletion(-) create mode 100644 arch/loongarch/include/asm/vdso/getrandom.h create mode 100644 arch/loongarch/vdso/memset.S create mode 100644 arch/loongarch/vdso/vgetrandom-chacha-lsx.S create mode 100644 arch/loongarch/vdso/vgetrandom-chacha.S create mode 100644 arch/loongarch/vdso/vgetrandom.c -- 2.46.0