Message ID | 20240522022827.1690416-5-seanjc@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: Register cpuhp/syscore callbacks when enabling virt | expand |
On 22/05/2024 2:28 pm, Sean Christopherson wrote: > Add arch hooks that are invoked when KVM enables/disable virtualization. > x86 will use the hooks to register an "emergency disable" callback, which > is essentially an x86-specific shutdown notifier that is used when the > kernel is doing an emergency reboot/shutdown/kexec. > > Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Kai Huang <kai.huang@intel.com> [...] > + > static int __kvm_enable_virtualization(void) > { > if (__this_cpu_read(hardware_enabled)) > @@ -5604,6 +5614,8 @@ static int kvm_enable_virtualization(void) > if (kvm_usage_count++) > return 0; > > + kvm_arch_enable_virtualization(); > + > r = cpuhp_setup_state(CPUHP_AP_KVM_ONLINE, "kvm/cpu:online", > kvm_online_cpu, kvm_offline_cpu); Nit: is kvm_arch_pre_enable_virtualization() a better name?
On Tue, May 21, 2024 at 07:28:25PM -0700, Sean Christopherson wrote: >Add arch hooks that are invoked when KVM enables/disable virtualization. >x86 will use the hooks to register an "emergency disable" callback, which >is essentially an x86-specific shutdown notifier that is used when the >kernel is doing an emergency reboot/shutdown/kexec. > >Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Chao Gao <chao.gao@intel.com>
On Thu, May 23, 2024, Kai Huang wrote: > On 22/05/2024 2:28 pm, Sean Christopherson wrote: > > static int __kvm_enable_virtualization(void) > > { > > if (__this_cpu_read(hardware_enabled)) > > @@ -5604,6 +5614,8 @@ static int kvm_enable_virtualization(void) > > if (kvm_usage_count++) > > return 0; > > + kvm_arch_enable_virtualization(); > > + > > r = cpuhp_setup_state(CPUHP_AP_KVM_ONLINE, "kvm/cpu:online", > > kvm_online_cpu, kvm_offline_cpu); > > > Nit: is kvm_arch_pre_enable_virtualization() a better name? Hmm, yes? I don't have a strong preference either way. I did consider a more verbose name, but omitted the "pre" because the hook is called only on the 0=>1 transition of kvm_usage_count, and for some reason that made me think "pre" would be confusing. On the other hand, "pre" very clearly communicates that the hook is invoked, and _needs_ to be invoked (for x86), before KVM enables virtualization. So I'm leaning towards kvm_arch_pre_enable_virtualization(). Anyone else have an opinion?
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7b57878c8c18..701b16290932 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1514,6 +1514,8 @@ static inline void kvm_create_vcpu_debugfs(struct kvm_vcpu *vcpu) {} #endif #ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING +void kvm_arch_enable_virtualization(void); +void kvm_arch_disable_virtualization(void); int kvm_arch_hardware_enable(void); void kvm_arch_hardware_disable(void); #endif diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 8d331ab3aef7..16adeb6b5bef 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -5505,6 +5505,16 @@ static DEFINE_PER_CPU(bool, hardware_enabled); static DEFINE_MUTEX(kvm_usage_lock); static int kvm_usage_count; +__weak void kvm_arch_enable_virtualization(void) +{ + +} + +__weak void kvm_arch_disable_virtualization(void) +{ + +} + static int __kvm_enable_virtualization(void) { if (__this_cpu_read(hardware_enabled)) @@ -5604,6 +5614,8 @@ static int kvm_enable_virtualization(void) if (kvm_usage_count++) return 0; + kvm_arch_enable_virtualization(); + r = cpuhp_setup_state(CPUHP_AP_KVM_ONLINE, "kvm/cpu:online", kvm_online_cpu, kvm_offline_cpu); if (r) @@ -5634,6 +5646,7 @@ static int kvm_enable_virtualization(void) unregister_syscore_ops(&kvm_syscore_ops); cpuhp_remove_state(CPUHP_AP_KVM_ONLINE); err_cpuhp: + kvm_arch_disable_virtualization(); --kvm_usage_count; return r; } @@ -5647,6 +5660,7 @@ static void kvm_disable_virtualization(void) unregister_syscore_ops(&kvm_syscore_ops); cpuhp_remove_state(CPUHP_AP_KVM_ONLINE); + kvm_arch_disable_virtualization(); } static int kvm_init_virtualization(void)
Add arch hooks that are invoked when KVM enables/disable virtualization. x86 will use the hooks to register an "emergency disable" callback, which is essentially an x86-specific shutdown notifier that is used when the kernel is doing an emergency reboot/shutdown/kexec. Signed-off-by: Sean Christopherson <seanjc@google.com> --- include/linux/kvm_host.h | 2 ++ virt/kvm/kvm_main.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+)