To implement steal time, we need the hypervisor to pass the guest informationabout how much time was spent running other processes outside the VM.This is per-vcpu, and using the kvmclock structure for that is an abusewe decided not to make.

In this patchset, I am introducing a new msr, KVM_MSR_STEAL_TIME, thatholds the memory area address containing information about steal time

This patch contains the headers for it. I am keeping it separate to facilitatebackports to people who wants to backport the kernel part but not thehypervisor, or the other way around.

Currently type 2 APF will be always delivered on the same vcpu as type 1 was, but guest should not rely on that.++MSR_KVM_STEAL_TIME: 0x4b564d03++ data: 64-byte alignment physical address of a memory area which must be+ in guest RAM, plus an enable bit in bit 0. This memory is expected to+ hold a copy of the following structure:++ struct kvm_steal_time {+ __u64 steal;+ __u32 version;+ __u32 flags;+ __u32 pad[12];+ }++ whose data will be filled in by the hypervisor periodically. Only one+ write, or registration, is needed for each VCPU. The interval between+ updates of this structure is arbitrary and implementation-dependent.+ The hypervisor may update this structure at any time it sees fit until+ anything with bit0 == 0 is written to it. Guest is required to make sure+ this structure is initialized to zero.++ Fields have the following meanings:++ version: a sequence counter. In other words, guest has to check+ this field before and after grabbing time information and make + sure they are both equal and even. An odd version indicates an+ in-progress update.++ flags: At this point, always zero. May be used to indicate+ changes in this structure in the future.++ steal: the amount of time in which this vCPU did not run, in+ nanoseconds. Time during which the vcpu is idle, will not be+ reported as steal time.+diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.hindex d6cd79b..65f8bb9 100644--- a/arch/x86/include/asm/kvm_para.h+++ b/arch/x86/include/asm/kvm_para.h@@ -21,6 +21,7 @@ */ #define KVM_FEATURE_CLOCKSOURCE2 3 #define KVM_FEATURE_ASYNC_PF 4+#define KVM_FEATURE_STEAL_TIME 5