Currently KVM only supports vPMU for Intel CPUs. This patchset enables KVM vPMU support for AMD platform by creating a common PMU interface for x86. By refractoring, PMU related MSR accesses from guest VMs are dispatched to corresponding functions defined in arch specific files. This patchset is directlyh applicable on kvm.git/queue. V5: * Remove the get_pmu_ops from sub_arch; instead define pmu dispatcher in kvm_x86_ops->pmu_ops. The dispatcher is initialized in sub-arch. The PMU interface functions are changed accordingly (suggested by Joerg Rodel). V4: * Change vPMU API function names to further clarify their functionality * Small fix for switch statement index in EVNTSELn and PERFCTRn (patch 4) * Add Tested-by and Reviewed-by V3: * Rebase the code to the latest of KVM tree (queue branch); * Branch out the Intel specific code from pmu.c to pmu_intel.c, in order to reflect the change history more accurately; * Name the parameters/variables more consistently (use msr, idx, pmc_idx) across files; * Fix issues (whitespaces, macro names, ...) based on Radim's V2 comments; * Fix the MSR_K7_PERFCTRn and MSR_K7_EVNTSELn access code (in patch 4); V2: * Create a generic pmu.c file which is shared by Intel and AMD CPUs; * pmu.c code becomes part of kvm.ko module. Similarly pmu_intel.c and pmu_amd.c are linked to kvm-intel.ko and kvm-amd.ko respectively; * Re-define kvm_pmu_ops function pointers. Per Radim Krcmar's comments, a large portion of Intel vPMU code are now consolidated and moved to pmu.c; * Polish pmu_amd.c code to comply with new definition of kvm_pmu_ops; V1: * Adopt the file layout suggested by Radim Krcmar * Link arch module with its specific PMU file RFC: * Initial version for RFC Wei Huang (4): KVM: x86/vPMU: Define kvm_pmu_ops to support vPMU function dispatch KVM: x86/vPMU: Create vPMU interface for VMX and SVM KVM: x86/vPMU: Implement AMD vPMU code for KVM KVM: x86/vPMU: Enable PMU handling for AMD PERFCTRn and EVNTSELn MSRs arch/x86/include/asm/kvm_host.h | 48 ++-- arch/x86/kvm/Makefile | 4 +- arch/x86/kvm/cpuid.c | 3 +- arch/x86/kvm/pmu.c | 550 ++++++++++------------------------------ arch/x86/kvm/pmu.h | 96 +++++++ arch/x86/kvm/pmu_amd.c | 207 +++++++++++++++ arch/x86/kvm/pmu_intel.c | 360 ++++++++++++++++++++++++++ arch/x86/kvm/svm.c | 3 + arch/x86/kvm/vmx.c | 3 + arch/x86/kvm/x86.c | 70 ++--- 10 files changed, 863 insertions(+), 481 deletions(-) create mode 100644 arch/x86/kvm/pmu.h create mode 100644 arch/x86/kvm/pmu_amd.c create mode 100644 arch/x86/kvm/pmu_intel.c -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html