This patchset adds support for VMX TSC scaling feature which is available on Intel Skylake CPU. The specification of VMX TSC scaling can be found at http://www.intel.com/content/www/us/en/processors/timestamp-counter-scaling-virtualization-white-paper.html VMX TSC scaling allows guest TSC which is read by guest rdtsc(p) instructions increases in a rate that is customized by the hypervisor and can be different than the host TSC rate. Basically, VMX TSC scaling adds a 64-bit field called TSC multiplier in VMCS so that, if VMX TSC scaling is enabled, TSC read by guest rdtsc(p) instructions will be calculated by the following formula: guest EDX:EAX = (Host TSC * TSC multiplier) >> 48 + VMX TSC Offset where, Host TSC = Host MSR_IA32_TSC + Host MSR_IA32_TSC_ADJUST. This patchset, when cooperating with another QEMU patchset (sent in another email "target-i386: save/restore vcpu's TSC rate during migration"), allows guest programs observe a consistent TSC rate even though they are migrated among machines with different host TSC rates. VMX TSC scaling shares some common logics with SVM TSC ratio which is already supported by KVM. Patch 1 ~ 8 move those common logics from SVM code to the common code. Upon them, patch 9 ~ 12 add VMX-specific support for VMX TSC scaling. Changes in v2: * Remove the duplicated variable 'kvm_tsc_scaling_ratio_rsvd'. * Remove an unnecessary error check in original patch 2. * Do 64-bit arithmetic by functions recommended by Paolo. * Make kvm_set_tsc_khz() returns an error number so that ioctl KVM_SET_TSC_KHZ does not return 0 if errors happen. Reviewed-by: Eric Northup <digitaleric@xxxxxxxxxx> Haozhong Zhang (12): KVM: x86: Collect information for setting TSC scaling ratio KVM: x86: Add a common TSC scaling ratio field in kvm_vcpu_arch KVM: x86: Add a common TSC scaling function KVM: x86: Replace call-back set_tsc_khz() with a common function KVM: x86: Replace call-back compute_tsc_offset() with a common function KVM: x86: Move TSC scaling logic out of call-back adjust_tsc_offset() KVM: x86: Move TSC scaling logic out of call-back read_l1_tsc() KVM: x86: Use the correct vcpu's TSC rate to compute time scale KVM: VMX: Enable and initialize VMX TSC scaling KVM: VMX: Setup TSC scaling ratio when a vcpu is loaded KVM: VMX: Use a scaled host TSC for guest readings of MSR_IA32_TSC KVM: VMX: Dump TSC multiplier in dump_vmcs() arch/x86/include/asm/kvm_host.h | 24 +++---- arch/x86/include/asm/vmx.h | 3 + arch/x86/kvm/lapic.c | 4 +- arch/x86/kvm/svm.c | 116 ++++------------------------------ arch/x86/kvm/vmx.c | 64 ++++++++++--------- arch/x86/kvm/x86.c | 134 +++++++++++++++++++++++++++++++++++----- include/linux/kvm_host.h | 20 ++++++ include/linux/math64.h | 99 +++++++++++++++++++++++++++++ 8 files changed, 297 insertions(+), 167 deletions(-) -- 2.4.8 -- 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