[PATCH 00/14] KVM monolithic v2

From: Andrea Arcangeli
Date: Sat Sep 28 2019 - 13:24:18 EST


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(-)