Hello, as usual the last 4 patches could be splitted off but I did more measurements in that area and I altered the commit headers. They're fairly small commits compared to the previous part so I kept it considering they're needed to benchmark the previous part. The KVM monolithic enhancement is easy to identify checking the word "monolithic" in the subject so there's no confusion about where that work stops. This renames all functions in place mixed up in whatever location they existed in svm.c or vmx.c. If they require an inline call they're defined now as extern before the kvm_x86_ops structure. Converting those small kvm_x86 functions to inlines requires more Makefile work and header restructuring so it's left for later. The removal of kvm_x86_ops is also left for later because that requires lots of logic changes in the code scattered all over the place in KVM code. This patchset tries to do the conversion with as few logic changes as possible, so the code works the same and this only improves the implementation and the performance. Doing the conversion plus the logic changes at the same time would pose the risk of not being able to identify through bisection if any regression is caused by a bug in the conversion or in one small commit to alter the logic and to remove the need of one more pointer to function. It's best if each single removal of any pointer to functional change is done through a separate small commit. After all those small commits done incrementally with this patchset, the kvm_x86_ops structure can be deleted. https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git/log/?h=kvm-mono2 Thanks, Andrea Andrea Arcangeli (14): KVM: monolithic: x86: remove kvm.ko KVM: monolithic: x86: disable linking vmx and svm at the same time into the kernel KVM: monolithic: x86: convert the kvm_x86_ops and kvm_pmu_ops methods to external functions KVM: monolithic: x86: handle the request_immediate_exit variation KVM: monolithic: add more section prefixes in the KVM common code KVM: monolithic: x86: remove __exit section prefix from machine_unsetup KVM: monolithic: x86: remove __init section prefix from kvm_x86_cpu_has_kvm_support KVM: monolithic: x86: remove exports KVM: monolithic: remove exports from KVM common code KVM: monolithic: x86: drop the kvm_pmu_ops structure KVM: x86: optimize more exit handlers in vmx.c KVM: retpolines: x86: eliminate retpoline from vmx.c exit handlers KVM: retpolines: x86: eliminate retpoline from svm.c exit handlers x86: retpolines: eliminate retpoline from msr event handlers arch/x86/events/intel/core.c | 11 + arch/x86/include/asm/kvm_host.h | 205 +++++++- arch/x86/kvm/Kconfig | 24 +- arch/x86/kvm/Makefile | 5 +- arch/x86/kvm/cpuid.c | 27 +- arch/x86/kvm/hyperv.c | 8 +- arch/x86/kvm/irq.c | 4 - arch/x86/kvm/irq_comm.c | 2 - arch/x86/kvm/kvm_cache_regs.h | 10 +- arch/x86/kvm/lapic.c | 46 +- arch/x86/kvm/mmu.c | 50 +- arch/x86/kvm/mmu.h | 4 +- arch/x86/kvm/mtrr.c | 2 - arch/x86/kvm/pmu.c | 27 +- arch/x86/kvm/pmu.h | 37 +- arch/x86/kvm/pmu_amd.c | 43 +- arch/x86/kvm/svm.c | 682 ++++++++++++++++----------- arch/x86/kvm/trace.h | 4 +- arch/x86/kvm/vmx/nested.c | 84 ++-- arch/x86/kvm/vmx/pmu_intel.c | 46 +- arch/x86/kvm/vmx/vmx.c | 795 ++++++++++++++++++-------------- arch/x86/kvm/vmx/vmx.h | 39 +- arch/x86/kvm/x86.c | 418 +++++++---------- arch/x86/kvm/x86.h | 2 +- include/linux/kvm_host.h | 4 +- virt/kvm/eventfd.c | 1 - virt/kvm/kvm_main.c | 71 +-- 27 files changed, 1413 insertions(+), 1238 deletions(-)