Module Name: src Committed By: riastradh Date: Fri May 8 00:49:43 UTC 2020
Modified Files: src/sys/arch/amd64/amd64: machdep.c src/sys/arch/x86/include: pmap.h src/sys/arch/x86/x86: pmap.c Log Message: Factor randomization out of slotspace_rand. slotspace_rand becomes deterministic; the randomization moves into the callers instead. Why? There are two callers of slotspace_rand: - x86/pmap.c pmap_bootstrap - amd64/amd64.c init_slotspace When the randomization was introduced, it used an x86-only `cpu_earlyrng' abstraction that would hash rdseed/rdrand and rdtsc output together. Except init_slotspace ran before cpu_probe, so cpu_feature was not yet filled out, so during init_slotspace, the only randomization was rdtsc. In the course of the recent entropy overhaul, I replaced cpu_earlyrng by entropy_extract, and moved cpu_init_rng much earlier -- but still after cpu_probe -- in order to reduce the number of abstractions lying around and the number of copies of rdrand/rdseed logic. In so doing I added some annoying complication (see curcpu_available) to kern_entropy.c to make it work early enough for init_slotspace, and dropped the rdtsc. For pmap_bootstrap that didn't substantively change anything. But for init_slotspace, it removed the only randomization. To mitigate this, this commit pulls the randomization out of slotspace_rand into pmap_bootstrap and init_slotspace, so that (a) init_slotspace can use rdtsc and a little private entropy pool in order to restore the prior (weak) randomization it had, and (b) pmap_bootstrap, which runs a little bit later, can continue to use entropy_extract normally and get rdrand/rdseed too. A subsequent commit will move cpu_init_rng just a wee bit later, after cpu_init_msrs, so the kern_entropy.c complications can go away. Perhaps someone else more wizardly with x86 can find a way to make init_slotspace run a little later too, after cpu_probe and after cpu_init_msrs and after cpu_rng_init, but I am not that wizardly. To generate a diff of this commit: cvs rdiff -u -r1.352 -r1.353 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.119 -r1.120 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.388 -r1.389 src/sys/arch/x86/x86/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.