From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> The purpose of this patch series is to get feedback before going further. e.g. rebasing TDX KVM series, etc. This patch series is to implement the suggestion by Sean Christopherson [1] to reorganize enable/disable cpu virtualization feature by replacing the arch-generic current enable/disable logic with PM related hooks. And convert kvm/x86 to use new hooks. - Untable x86 hardware enable logic, snapshot MSRs for user return notifier, enabling cpu virtualization on cpu online and platform resume. and real enabling of CPU virtualization feature - Introduce hooks related to PM. - Convert kvm/x86 code to user those hooks. - Split out hardware enabling/disabling logic into a separate file. Compile it for non-x86 code. Once conversion of other KVM archs is done, this file can be dropped. - Delete cpus_hardware_enabled. 17/18 and 18/18 [1] https://lore.kernel.org/kvm/YvU+6fdkHaqQiKxp@xxxxxxxxxx/ Chao Gao (2): KVM: x86: Move check_processor_compatibility from init ops to runtime ops Partially revert "KVM: Pass kvm_init()'s opaque param to additional arch funcs" Isaku Yamahata (16): KVM: x86: Drop kvm_user_return_msr_cpu_online() KVM: x86: Use this_cpu_ptr() instead of per_cpu_ptr(smp_processor_id()) KVM: Drop kvm_count_lock and instead protect kvm_usage_count with kvm_lock KVM: Add arch hooks for PM events with empty stub KVM: x86: Move TSC fixup logic to KVM arch resume callback KVM: Add arch hook when VM is added/deleted KVM: Move out KVM arch PM hooks and hardware enable/disable logic KVM: kvm_arch.c: Remove _nolock post fix KVM: kvm_arch.c: Remove a global variable, hardware_enable_failed KVM: Do processor compatibility check on cpu online and resume KVM: x86: Duplicate arch callbacks related to pm events KVM: Eliminate kvm_arch_post_init_vm() KVM: x86: Delete kvm_arch_hardware_enable/disable() KVM: Add config to not compile kvm_arch.c KVM: x86: Remove cpus_hardware_enabled and related sanity check KVM: Remove cpus_hardware_enabled and related sanity check Documentation/virt/kvm/locking.rst | 14 +-- arch/arm64/kvm/arm.c | 2 +- arch/mips/kvm/mips.c | 2 +- arch/powerpc/kvm/powerpc.c | 2 +- arch/riscv/kvm/main.c | 2 +- arch/s390/kvm/kvm-s390.c | 2 +- arch/x86/include/asm/kvm-x86-ops.h | 1 + arch/x86/include/asm/kvm_host.h | 2 +- arch/x86/kvm/Kconfig | 1 + arch/x86/kvm/svm/svm.c | 4 +- arch/x86/kvm/vmx/vmx.c | 14 +-- arch/x86/kvm/x86.c | 184 ++++++++++++++++++++++------- include/linux/kvm_host.h | 14 ++- virt/kvm/Kconfig | 3 + virt/kvm/Makefile.kvm | 3 + virt/kvm/kvm_arch.c | 119 +++++++++++++++++++ virt/kvm/kvm_main.c | 177 ++++++++------------------- 17 files changed, 349 insertions(+), 197 deletions(-) create mode 100644 virt/kvm/kvm_arch.c -- 2.25.1