• Christophe Leroy's avatar
    powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32 · 53cee505
    Christophe Leroy authored
    To be consistent with other VDSO functions, the function is called
    __kernel_getrandom()
    
    __arch_chacha20_blocks_nostack() fonction is implemented basically
    with 32 bits operations. It performs 4 QUARTERROUND operations in
    parallele. There are enough registers to avoid using the stack:
    
    On input:
    	r3: output bytes
    	r4: 32-byte key input
    	r5: 8-byte counter input/output
    	r6: number of 64-byte blocks to write to output
    
    During operation:
    	stack: pointer to counter (r5) and non-volatile registers (r14-131)
    	r0: counter of blocks (initialised with r6)
    	r4: Value '4' after key has been read, used for indexing
    	r5-r12: key
    	r14-r15: block counter
    	r16-r31: chacha state
    
    At the end:
    	r0, r6-r12: Zeroised
    	r5, r14-r31: Restored
    
    Performance on powerpc 885 (using kernel selftest):
    	~# ./vdso_test_getrandom bench-single
    	   vdso: 25000000 times in 62.938002291 seconds
    	   libc: 25000000 times in 535.581916866 seconds
    	syscall: 25000000 times in 531.525042806 seconds
    
    Performance on powerpc 8321 (using kernel selftest):
    	~# ./vdso_test_getrandom bench-single
    	   vdso: 25000000 times in 16.899318858 seconds
    	   libc: 25000000 times in 131.050596522 seconds
    	syscall: 25000000 times in 129.794790389 seconds
    
    This first patch adds support for VDSO32. As selftests cannot easily
    be generated only for VDSO32, and because the following patch brings
    support for VDSO64 anyway, this patch opts out all code in
    __arch_chacha20_blocks_nostack() so that vdso_test_chacha will not
    fail to compile and will not crash on PPC64/PPC64LE, allthough the
    selftest itself will fail.
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    53cee505
getrandom.h 1.58 KB