Christophe Leroy christophe.leroy@csgroup.eu writes:
Le 21/06/2022 à 20:47, Jason A. Donenfeld a écrit :
On Tue, Jun 21, 2022 at 06:33:11PM +0000, Christophe Leroy wrote:
Le 21/06/2022 à 16:08, Jason A. Donenfeld a écrit :
The platform's RNG must be available before random_init() in order to be useful for initial seeding, which in turn means that it needs to be called from setup_arch(), rather than from an init call. Fortunately, each platform already has a setup_arch function pointer, which means we can wire it up that way. Complicating things, however, is that POWER8 systems need some per-cpu state and kmalloc, which isn't available at this stage. So we split things up into an early phase and a later opportunistic phase. This commit also removes some noisy log messages that don't add much.
Regarding the kmalloc(), I have not looked at it in details, but usually you can use memblock_alloc() when kmalloc is not available yet.
That seems a bit excessive, especially as those allocations are long lived. And we don't even *need* it that early, but just before random_init(). Michael is running this v5 on the test rig overnight, so we'll learn in the Australian morning whether this finally did the trick (I hope).
The fact that they are long lived make them a good candidate for memblock_alloc().
But fair enough, if they are not required that early then just do it later.
memblock works but then we trip on ioremap vs early_ioremap.
Fixing that is a bit of a pain as we'd have to stop using of_iomap() and we'd also need to switch the mappings to ioremap() later in boot.
We'd also have to defer the percpu initialisation.
So it's all just a bit of a pain when we actually only need to get the hook ready before random_init() which is called much later in boot when slab/ioremap/percpu are all ready.
cheers