linux_dsm_epyc7002/drivers/char/hw_random
Christopher Obbard a8b49c4bdf um: random: Register random as hwrng-core device
[ Upstream commit 72d3e093afae79611fa38f8f2cfab9a888fe66f2 ]

The UML random driver creates a dummy device under the guest,
/dev/hw_random. When this file is read from the guest, the driver
reads from the host machine's /dev/random, in-turn reading from
the host kernel's entropy pool. This entropy pool could have been
filled by a hardware random number generator or just the host
kernel's internal software entropy generator.

Currently the driver does not fill the guests kernel entropy pool,
this requires a userspace tool running inside the guest (like
rng-tools) to read from the dummy device provided by this driver,
which then would fill the guest's internal entropy pool.

This all seems quite pointless when we are already reading from an
entropy pool, so this patch aims to register the device as a hwrng
device using the hwrng-core framework. This not only improves and
cleans up the driver, but also fills the guest's entropy pool
without having to resort to using extra userspace tools in the guest.

This is typically a nuisance when booting a guest: the random pool
takes a long time (~200s) to build up enough entropy since the dummy
hwrng is not used to fill the guest's pool.

This port was originally attempted by Alexander Neville "dark" (in CC,
discussion in Link), but the conversation there stalled since the
handling of -EAGAIN errors were no removed and longer handled by the
driver. This patch attempts to use the existing method of error
handling but utilises the new hwrng core.

The issue can be noticed when booting a UML guest:

    [    2.560000] random: fast init done
    [  214.000000] random: crng init done

With the patch applied, filling the pool becomes a lot quicker:

    [    2.560000] random: fast init done
    [   12.000000] random: crng init done

Cc: Alexander Neville <dark@volatile.bz>
Link: https://lore.kernel.org/lkml/20190828204609.02a7ff70@TheDarkness/
Link: https://lore.kernel.org/lkml/20190829135001.6a5ff940@TheDarkness.local/
Cc: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Signed-off-by: Christopher Obbard <chris.obbard@collabora.com>
Acked-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-01-06 14:56:55 +01:00
..
amd-rng.c hwrng: amd - Revert managed API changes 2017-03-16 17:43:10 +08:00
atmel-rng.c hwrng: atmel - add new platform support for sam9x60 2019-11-15 13:44:17 +08:00
ba431-rng.c hwrng: ba431 - Include kernel.h 2020-07-16 21:49:01 +10:00
bcm2835-rng.c hwrng: bcm2835 - Constify bcm2835_rng_devtype[] 2020-07-09 18:25:21 +10:00
cavium-rng-vf.c hwrng: drivers - Use device-managed registration API 2019-08-02 14:44:33 +10:00
cavium-rng.c hwrng: cavium - make two functions static 2018-03-09 22:45:34 +08:00
cctrng.c hwrng: cctrn - Simplify with dev_err_probe() 2020-09-04 17:57:15 +10:00
cctrng.h hwrng: cctrng - introduce Arm CryptoCell driver 2020-04-16 16:49:20 +10:00
core.c hwrng: core - remove redundant initialization of variable ret 2020-07-31 18:25:29 +10:00
exynos-trng.c hwrng: exynos - use devm_platform_ioremap_resource() to simplify code 2019-10-26 02:09:53 +11:00
geode-rng.c hwrng: geode - Revert managed API changes 2017-03-16 17:43:11 +08:00
hisi-rng.c hwrng: hisi - Fix W=1 unused variable warning 2020-07-09 18:25:12 +10:00
hisi-trng-v2.c hwrng: hisi - add HiSilicon TRNG driver support 2019-11-08 23:15:51 +08:00
imx-rngc.c hwrng: imx-rngc - add quality to use it as kernel entropy pool 2020-09-11 14:39:14 +10:00
ingenic-rng.c crypto: ingenic - Drop kfree for memory allocated with devm_kzalloc 2020-08-21 14:43:51 +10:00
ingenic-trng.c hwrng: ingenic - Add hardware TRNG for Ingenic X1830 2020-09-25 17:46:41 +10:00
intel-rng.c hwrng: intel - cleanup initialization 2020-08-21 14:47:49 +10:00
iproc-rng200.c hwrng: iproc-rng200 - use semicolons rather than commas to separate statements 2020-10-02 18:02:15 +10:00
ixp4xx-rng.c IXP4xx: HW pseudo-random generator is available on IXP45x/46x only. 2012-11-22 03:35:39 +00:00
Kconfig um: random: Register random as hwrng-core device 2021-01-06 14:56:55 +01:00
ks-sa-rng.c hwrng: ks-sa - Replace HTTP links with HTTPS ones 2020-07-16 21:49:06 +10:00
Makefile hwrng: ingenic - Add hardware TRNG for Ingenic X1830 2020-09-25 17:46:41 +10:00
meson-rng.c hwrng: meson - use devm_platform_ioremap_resource() to simplify code 2019-10-26 02:09:55 +11:00
mtk-rng.c hwrng: mediatek - Use devm_platform_ioremap_resource() in mtk_rng_probe() 2019-10-05 01:06:18 +10:00
mxc-rnga.c hwrng: mxc-rnga - use semicolons rather than commas to separate statements 2020-10-02 18:02:15 +10:00
n2-asm.S License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
n2-drv.c hwrng: n2-drv - fix typo 2019-08-08 12:07:49 +10:00
n2rng.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nomadik-rng.c hwrng: nomadik - Constify nmk_rng_ids[] 2020-07-09 18:25:21 +10:00
npcm-rng.c hwrng: npcm - modify readl to readb 2020-10-02 18:02:13 +10:00
octeon-rng.c hwrng: octeon - Fix sparse warnings 2020-07-09 18:25:14 +10:00
omap3-rom-rng.c change email address for Pali Rohár 2020-04-10 15:36:22 -07:00
omap-rng.c hwrng: omap - Fix W=1 unused variable warning 2020-07-09 18:25:11 +10:00
optee-rng.c hwrng: optee - fix wait use case 2020-08-21 14:45:28 +10:00
pasemi-rng.c hwrng: pasemi - use devm_platform_ioremap_resource() to simplify code 2019-10-26 02:09:56 +11:00
pic32-rng.c hwrng: pic32 - Fix W=1 unused variable warning 2020-07-09 18:25:13 +10:00
powernv-rng.c hwrng: drivers - Use device-managed registration API 2019-08-02 14:44:33 +10:00
pseries-rng.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
s390-trng.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 376 2019-06-05 17:37:10 +02:00
st-rng.c hwrng: st - Fix W=1 unused variable warning 2020-07-09 18:25:12 +10:00
stm32-rng.c hwrng: stm32 - use semicolons rather than commas to separate statements 2020-10-02 18:02:14 +10:00
timeriomem-rng.c hwrng: timeriomem - relax check on memory resource size 2019-09-05 14:37:30 +10:00
tx4939-rng.c hwrng: tx4939 - use devm_platform_ioremap_resource() to simplify code 2019-10-26 02:09:57 +11:00
via-rng.c hwrng: via_rng: Convert to new X86 CPU match macros 2020-03-24 21:36:26 +01:00
virtio-rng.c hwrng: virtio - Constify id_table[] 2020-07-09 18:25:21 +10:00
xgene-rng.c hwrng: xgene - Delete an error message in xgene_rng_probe() 2020-04-16 16:49:22 +10:00
xiphera-trng.c hwrng: xiphera-trng: add support for XIP8001B hwrng 2020-09-11 14:39:17 +10:00