Messages in this thread Patch in this message | | | From | isaku.yamahata@intel ... | Subject | [PATCH v5 11/30] KVM: Add arch hook for reboot event | Date | Thu, 22 Sep 2022 11:20:40 -0700 |
| |
From: Isaku Yamahata <isaku.yamahata@intel.com>
Factor out the logic on reboot event as arch hook. Later kvm/x86 overrides it.
Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> --- include/linux/kvm_host.h | 2 ++ virt/kvm/kvm_main.c | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3fbb01bbac98..084ee8a13e9f 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1434,6 +1434,8 @@ void kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu, struct dentry *debugfs_ static inline void kvm_create_vcpu_debugfs(struct kvm_vcpu *vcpu) {} #endif +int kvm_arch_reboot(int val); + int kvm_arch_hardware_enable(void); void kvm_arch_hardware_disable(void); int kvm_arch_hardware_setup(void *opaque); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index e2c8823786ff..58385000b73f 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1142,6 +1142,12 @@ int __weak kvm_arch_del_vm(int usage_count) return 0; } +int __weak kvm_arch_reboot(int val) +{ + on_each_cpu(hardware_disable_nolock, NULL, 1); + return NOTIFY_OK; +} + /* * Called just after removing the VM from the vm_list, but before doing any * other destruction. @@ -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); + mutex_unlock(&kvm_lock); + cpus_read_unlock(); + return r; } static struct notifier_block kvm_reboot_notifier = { -- 2.25.1
| |