linux/arch/um/include/asm
Jason A. Donenfeld d349ab99ee random: handle archrandom with multiple longs
The archrandom interface was originally designed for x86, which supplies
RDRAND/RDSEED for receiving random words into registers, resulting in
one function to generate an int and another to generate a long. However,
other architectures don't follow this.

On arm64, the SMCCC TRNG interface can return between one and three
longs. On s390, the CPACF TRNG interface can return arbitrary amounts,
with four longs having the same cost as one. On UML, the os_getrandom()
interface can return arbitrary amounts.

So change the api signature to take a "max_longs" parameter designating
the maximum number of longs requested, and then return the number of
longs generated.

Since callers need to check this return value and loop anyway, each arch
implementation does not bother implementing its own loop to try again to
fill the maximum number of longs. Additionally, all existing callers
pass in a constant max_longs parameter. Taken together, these two things
mean that the codegen doesn't really change much for one-word-at-a-time
platforms, while performance is greatly improved on platforms such as
s390.

Acked-by: Heiko Carstens <hca@linux.ibm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
Acked-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-07-25 13:26:14 +02:00
..
fpu um: enable the use of optimized xor routines in UML 2021-06-17 22:01:26 +02:00
archrandom.h random: handle archrandom with multiple longs 2022-07-25 13:26:14 +02:00
asm-prototypes.h um: Restore symbol versions for __memcpy and memcpy 2018-02-19 19:38:51 +01:00
bugs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cache.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cacheflush.h um: implement flush_cache_vmap/flush_cache_vunmap 2021-06-17 22:04:40 +02:00
common.lds.S Revert "um: Enable CONFIG_CONSTRUCTORS" 2020-01-19 22:42:06 +01:00
cpufeature.h um: Add support for host CPU flags and alignment 2021-06-17 22:01:26 +02:00
delay.h um: fix ndelay/udelay defines 2021-12-21 21:13:43 +01:00
dma.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fixmap.h highmem: Get rid of kmap_types.h 2020-11-06 23:14:58 +01:00
futex.h um: add a UML specific futex implementation 2021-06-17 22:01:45 +02:00
hardirq.h um/irqstat: Get rid of the duplicated declarations 2020-11-23 10:31:05 +01:00
io.h um: add PCI over virtio emulation driver 2021-06-17 21:45:43 +02:00
irq.h um: line: Use separate IRQs per line 2022-05-27 09:03:41 +02:00
irqflags.h um: rename set_signals() to um_set_signals() 2021-12-21 21:13:44 +01:00
Kbuild um: Use asm-generic/dma-mapping.h 2022-05-27 09:00:45 +02:00
kvm_para.h
mmu.h um: Add SPDX headers for files in arch/um/include 2019-09-15 21:37:17 +02:00
mmu_context.h um: remove process stub VMA 2021-02-12 21:37:38 +01:00
msi.h um: add PCI over virtio emulation driver 2021-06-17 21:45:43 +02:00
page.h um: Replace to_phys() and to_virt() with less generic function names 2022-07-14 11:57:27 -07:00
pci.h um: add PCI over virtio emulation driver 2021-06-17 21:45:43 +02:00
pgalloc.h mm/thp: define default pmd_pgtable() 2021-07-01 11:06:03 -07:00
pgtable-2level.h mm: define default value for FIRST_USER_ADDRESS 2021-07-01 11:06:02 -07:00
pgtable-3level.h mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t * 2021-07-08 11:48:22 -07:00
pgtable.h arch: Add pmd_pfn() where it is missing 2022-03-21 12:59:02 -04:00
processor-generic.h um: stop polluting the namespace with registers.h contents 2021-12-21 21:31:35 +01:00
ptrace-generic.h um: Implement copy_thread_tls 2020-01-07 13:31:29 +01:00
sections.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
setup.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
smp.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
stacktrace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall-generic.h arch: remove unused function syscall_set_arguments() 2021-09-14 16:06:20 +02:00
sysrq.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
thread_info.h ptrace/um: Replace PT_DTRACE with TIF_SINGLESTEP 2022-05-11 14:33:33 -05:00
timex.h um: use fallback for random_get_entropy() instead of zero 2022-05-13 23:59:23 +02:00
tlb.h um: implement flush_cache_vmap/flush_cache_vunmap 2021-06-17 22:04:40 +02:00
tlbflush.h um: Add SPDX headers for files in arch/um/include 2019-09-15 21:37:17 +02:00
uaccess.h uaccess: generalize access_ok() 2022-02-25 09:36:05 +01:00
unwind.h
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
vmlinux.lds.h Construct init thread stack in the linker script rather than by union 2018-01-09 23:21:02 +00:00
xor.h um: fix and optimize xor select template for CONFIG64 and timetravel mode 2022-03-11 10:44:08 +01:00