Next up in Linux's bootup sequence is to finish initializing all the subsystems related to memory. It needed to start the process early since basically any code will need or want to allocate RAM, but the same time it needed to hold finishing these subsystems until now thanks to some cyclic dependencies.
To do so it 1st finalizes some CPU-specific initialization, which appears to be about retrieving some specs & allocating virtual-memory datastructures.
1/?
Then it retrieves & remembers (via a helper) a CPU-specific zero-page.
For multicore CPUs it validates the `MAX_ZONE_LIST` build flag is greater than 2, carefully allocates (via a suite of helpers & some locks) & validates per-CPU-core "zone lists", sets (via helpers + wrappers adding locking & validation) some "CPU hotplugging" properties with callbacks to update & flush those zone lists, & consults (via another helper) the linker sets some memory profiling globals.
2/?