On Sat, 24 Mar 2018, Wanpeng Li wrote:
Note: Peterz pointed out in the IRC we have to audit all the architectures that implement smp_prepare_boot_cpu() to see what they depend on if we want to move jump_label_init() before smp_prepare_boot_cpu(). So what this patch does is similar to the issue which handled in xen ca5d376e.
After some auditing, the jump_label_init() being moved before smp_prepare_boot_cpu() seems fine, however, bulky mechanisms to update text segments conflict with early smp bootup stages, such as this patch. So, while the disabling virt_spin_lock_key would be done correctly _after_ jump_label_init(), it is still fragile in that we want to be using lightweight patching such as jump_label_transform_static() -- which doesn't take the text_mutex (blocking is out of the question), for example. For pretty much all archs this means using the transform_static() version. For example x86, this means using text_poke_early(). -- also ouchy on the !PageReserved(pages[0]) warning for text_poke(). I'm not sure yet of the best way to teach jump_label_transform() to behave like jump_label_transform_static() under pre-smp bootup, such as when disabling hypervisor pvspinlocks. The s390 implementation seems safe as is given that stop_machine is now safe for early pre-smp boot. Thanks, Davidlohr