On Thu, Sep 22, 2022, isaku.yamahata@xxxxxxxxx wrote: > From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > > Factor out the logic on reboot event as arch hook. Later kvm/x86 overrides > it. > > Suggested-by: Sean Christopherson <seanjc@xxxxxxxxxx> > Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > --- ... > @@ -5135,6 +5141,8 @@ static void kvm_del_vm(void) > static int kvm_reboot(struct notifier_block *notifier, unsigned long val, > void *v) > { > + int r; > + > /* > * Some (well, at least mine) BIOSes hang on reboot if > * in vmx root mode. > @@ -5143,8 +5151,14 @@ static int kvm_reboot(struct notifier_block *notifier, unsigned long val, > */ > pr_info("kvm: exiting hardware virtualization\n"); > kvm_rebooting = true; > - on_each_cpu(hardware_disable_nolock, NULL, 1); > - return NOTIFY_OK; > + > + /* This hook is called without cpuhotplug disabled. */ > + cpus_read_lock(); > + mutex_lock(&kvm_lock); > + r = kvm_arch_reboot(val); Unless there's a valid use case for rejecting/stopping reboot, which I'm pretty sure there isn't, don't allow arch code to return a value. I.e. return NOTIFY_OK unconditionally from kvm_reboot() and drop the return from kvm_arch_reboot(). > + mutex_unlock(&kvm_lock); > + cpus_read_unlock(); > + return r; > } > > static struct notifier_block kvm_reboot_notifier = { > -- > 2.25.1 >