xref: /OK3568_Linux_fs/kernel/Documentation/virt/kvm/msr.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun=================
4*4882a593SmuzhiyunKVM-specific MSRs
5*4882a593Smuzhiyun=================
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun:Author: Glauber Costa <glommer@redhat.com>, Red Hat Inc, 2010
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunKVM makes use of some custom MSRs to service some requests.
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunCustom MSRs have a range reserved for them, that goes from
12*4882a593Smuzhiyun0x4b564d00 to 0x4b564dff. There are MSRs outside this area,
13*4882a593Smuzhiyunbut they are deprecated and their use is discouraged.
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunCustom MSR list
16*4882a593Smuzhiyun---------------
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunThe current supported Custom MSR list is:
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunMSR_KVM_WALL_CLOCK_NEW:
21*4882a593Smuzhiyun	0x4b564d00
22*4882a593Smuzhiyun
23*4882a593Smuzhiyundata:
24*4882a593Smuzhiyun	4-byte alignment physical address of a memory area which must be
25*4882a593Smuzhiyun	in guest RAM. This memory is expected to hold a copy of the following
26*4882a593Smuzhiyun	structure::
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun	 struct pvclock_wall_clock {
29*4882a593Smuzhiyun		u32   version;
30*4882a593Smuzhiyun		u32   sec;
31*4882a593Smuzhiyun		u32   nsec;
32*4882a593Smuzhiyun	  } __attribute__((__packed__));
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun	whose data will be filled in by the hypervisor. The hypervisor is only
35*4882a593Smuzhiyun	guaranteed to update this data at the moment of MSR write.
36*4882a593Smuzhiyun	Users that want to reliably query this information more than once have
37*4882a593Smuzhiyun	to write more than once to this MSR. Fields have the following meanings:
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	version:
40*4882a593Smuzhiyun		guest has to check version before and after grabbing
41*4882a593Smuzhiyun		time information and check that they are both equal and even.
42*4882a593Smuzhiyun		An odd version indicates an in-progress update.
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun	sec:
45*4882a593Smuzhiyun		 number of seconds for wallclock at time of boot.
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	nsec:
48*4882a593Smuzhiyun		 number of nanoseconds for wallclock at time of boot.
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	In order to get the current wallclock time, the system_time from
51*4882a593Smuzhiyun	MSR_KVM_SYSTEM_TIME_NEW needs to be added.
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun	Note that although MSRs are per-CPU entities, the effect of this
54*4882a593Smuzhiyun	particular MSR is global.
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun	Availability of this MSR must be checked via bit 3 in 0x4000001 cpuid
57*4882a593Smuzhiyun	leaf prior to usage.
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunMSR_KVM_SYSTEM_TIME_NEW:
60*4882a593Smuzhiyun	0x4b564d01
61*4882a593Smuzhiyun
62*4882a593Smuzhiyundata:
63*4882a593Smuzhiyun	4-byte aligned physical address of a memory area which must be in
64*4882a593Smuzhiyun	guest RAM, plus an enable bit in bit 0. This memory is expected to hold
65*4882a593Smuzhiyun	a copy of the following structure::
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun	  struct pvclock_vcpu_time_info {
68*4882a593Smuzhiyun		u32   version;
69*4882a593Smuzhiyun		u32   pad0;
70*4882a593Smuzhiyun		u64   tsc_timestamp;
71*4882a593Smuzhiyun		u64   system_time;
72*4882a593Smuzhiyun		u32   tsc_to_system_mul;
73*4882a593Smuzhiyun		s8    tsc_shift;
74*4882a593Smuzhiyun		u8    flags;
75*4882a593Smuzhiyun		u8    pad[2];
76*4882a593Smuzhiyun	  } __attribute__((__packed__)); /* 32 bytes */
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun	whose data will be filled in by the hypervisor periodically. Only one
79*4882a593Smuzhiyun	write, or registration, is needed for each VCPU. The interval between
80*4882a593Smuzhiyun	updates of this structure is arbitrary and implementation-dependent.
81*4882a593Smuzhiyun	The hypervisor may update this structure at any time it sees fit until
82*4882a593Smuzhiyun	anything with bit0 == 0 is written to it.
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun	Fields have the following meanings:
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun	version:
87*4882a593Smuzhiyun		guest has to check version before and after grabbing
88*4882a593Smuzhiyun		time information and check that they are both equal and even.
89*4882a593Smuzhiyun		An odd version indicates an in-progress update.
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	tsc_timestamp:
92*4882a593Smuzhiyun		the tsc value at the current VCPU at the time
93*4882a593Smuzhiyun		of the update of this structure. Guests can subtract this value
94*4882a593Smuzhiyun		from current tsc to derive a notion of elapsed time since the
95*4882a593Smuzhiyun		structure update.
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun	system_time:
98*4882a593Smuzhiyun		a host notion of monotonic time, including sleep
99*4882a593Smuzhiyun		time at the time this structure was last updated. Unit is
100*4882a593Smuzhiyun		nanoseconds.
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun	tsc_to_system_mul:
103*4882a593Smuzhiyun		multiplier to be used when converting
104*4882a593Smuzhiyun		tsc-related quantity to nanoseconds
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun	tsc_shift:
107*4882a593Smuzhiyun		shift to be used when converting tsc-related
108*4882a593Smuzhiyun		quantity to nanoseconds. This shift will ensure that
109*4882a593Smuzhiyun		multiplication with tsc_to_system_mul does not overflow.
110*4882a593Smuzhiyun		A positive value denotes a left shift, a negative value
111*4882a593Smuzhiyun		a right shift.
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun		The conversion from tsc to nanoseconds involves an additional
114*4882a593Smuzhiyun		right shift by 32 bits. With this information, guests can
115*4882a593Smuzhiyun		derive per-CPU time by doing::
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun			time = (current_tsc - tsc_timestamp)
118*4882a593Smuzhiyun			if (tsc_shift >= 0)
119*4882a593Smuzhiyun				time <<= tsc_shift;
120*4882a593Smuzhiyun			else
121*4882a593Smuzhiyun				time >>= -tsc_shift;
122*4882a593Smuzhiyun			time = (time * tsc_to_system_mul) >> 32
123*4882a593Smuzhiyun			time = time + system_time
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun	flags:
126*4882a593Smuzhiyun		bits in this field indicate extended capabilities
127*4882a593Smuzhiyun		coordinated between the guest and the hypervisor. Availability
128*4882a593Smuzhiyun		of specific flags has to be checked in 0x40000001 cpuid leaf.
129*4882a593Smuzhiyun		Current flags are:
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun		+-----------+--------------+----------------------------------+
133*4882a593Smuzhiyun		| flag bit  | cpuid bit    | meaning			      |
134*4882a593Smuzhiyun		+-----------+--------------+----------------------------------+
135*4882a593Smuzhiyun		|	    |		   | time measures taken across       |
136*4882a593Smuzhiyun		|    0      |	   24      | multiple cpus are guaranteed to  |
137*4882a593Smuzhiyun		|	    |		   | be monotonic		      |
138*4882a593Smuzhiyun		+-----------+--------------+----------------------------------+
139*4882a593Smuzhiyun		|	    |		   | guest vcpu has been paused by    |
140*4882a593Smuzhiyun		|    1	    |	  N/A	   | the host			      |
141*4882a593Smuzhiyun		|	    |		   | See 4.70 in api.txt	      |
142*4882a593Smuzhiyun		+-----------+--------------+----------------------------------+
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun	Availability of this MSR must be checked via bit 3 in 0x4000001 cpuid
145*4882a593Smuzhiyun	leaf prior to usage.
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun
148*4882a593SmuzhiyunMSR_KVM_WALL_CLOCK:
149*4882a593Smuzhiyun	0x11
150*4882a593Smuzhiyun
151*4882a593Smuzhiyundata and functioning:
152*4882a593Smuzhiyun	same as MSR_KVM_WALL_CLOCK_NEW. Use that instead.
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun	This MSR falls outside the reserved KVM range and may be removed in the
155*4882a593Smuzhiyun	future. Its usage is deprecated.
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun	Availability of this MSR must be checked via bit 0 in 0x4000001 cpuid
158*4882a593Smuzhiyun	leaf prior to usage.
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunMSR_KVM_SYSTEM_TIME:
161*4882a593Smuzhiyun	0x12
162*4882a593Smuzhiyun
163*4882a593Smuzhiyundata and functioning:
164*4882a593Smuzhiyun	same as MSR_KVM_SYSTEM_TIME_NEW. Use that instead.
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun	This MSR falls outside the reserved KVM range and may be removed in the
167*4882a593Smuzhiyun	future. Its usage is deprecated.
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun	Availability of this MSR must be checked via bit 0 in 0x4000001 cpuid
170*4882a593Smuzhiyun	leaf prior to usage.
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun	The suggested algorithm for detecting kvmclock presence is then::
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun		if (!kvm_para_available())    /* refer to cpuid.txt */
175*4882a593Smuzhiyun			return NON_PRESENT;
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun		flags = cpuid_eax(0x40000001);
178*4882a593Smuzhiyun		if (flags & 3) {
179*4882a593Smuzhiyun			msr_kvm_system_time = MSR_KVM_SYSTEM_TIME_NEW;
180*4882a593Smuzhiyun			msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK_NEW;
181*4882a593Smuzhiyun			return PRESENT;
182*4882a593Smuzhiyun		} else if (flags & 0) {
183*4882a593Smuzhiyun			msr_kvm_system_time = MSR_KVM_SYSTEM_TIME;
184*4882a593Smuzhiyun			msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK;
185*4882a593Smuzhiyun			return PRESENT;
186*4882a593Smuzhiyun		} else
187*4882a593Smuzhiyun			return NON_PRESENT;
188*4882a593Smuzhiyun
189*4882a593SmuzhiyunMSR_KVM_ASYNC_PF_EN:
190*4882a593Smuzhiyun	0x4b564d02
191*4882a593Smuzhiyun
192*4882a593Smuzhiyundata:
193*4882a593Smuzhiyun	Asynchronous page fault (APF) control MSR.
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun	Bits 63-6 hold 64-byte aligned physical address of a 64 byte memory area
196*4882a593Smuzhiyun	which must be in guest RAM and must be zeroed. This memory is expected
197*4882a593Smuzhiyun	to hold a copy of the following structure::
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun	  struct kvm_vcpu_pv_apf_data {
200*4882a593Smuzhiyun		/* Used for 'page not present' events delivered via #PF */
201*4882a593Smuzhiyun		__u32 flags;
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun		/* Used for 'page ready' events delivered via interrupt notification */
204*4882a593Smuzhiyun		__u32 token;
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun		__u8 pad[56];
207*4882a593Smuzhiyun		__u32 enabled;
208*4882a593Smuzhiyun	  };
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun	Bits 5-4 of the MSR are reserved and should be zero. Bit 0 is set to 1
211*4882a593Smuzhiyun	when asynchronous page faults are enabled on the vcpu, 0 when disabled.
212*4882a593Smuzhiyun	Bit 1 is 1 if asynchronous page faults can be injected when vcpu is in
213*4882a593Smuzhiyun	cpl == 0. Bit 2 is 1 if asynchronous page faults are delivered to L1 as
214*4882a593Smuzhiyun	#PF vmexits.  Bit 2 can be set only if KVM_FEATURE_ASYNC_PF_VMEXIT is
215*4882a593Smuzhiyun	present in CPUID. Bit 3 enables interrupt based delivery of 'page ready'
216*4882a593Smuzhiyun	events. Bit 3 can only be set if KVM_FEATURE_ASYNC_PF_INT is present in
217*4882a593Smuzhiyun	CPUID.
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun	'Page not present' events are currently always delivered as synthetic
220*4882a593Smuzhiyun	#PF exception. During delivery of these events APF CR2 register contains
221*4882a593Smuzhiyun	a token that will be used to notify the guest when missing page becomes
222*4882a593Smuzhiyun	available. Also, to make it possible to distinguish between real #PF and
223*4882a593Smuzhiyun	APF, first 4 bytes of 64 byte memory location ('flags') will be written
224*4882a593Smuzhiyun	to by the hypervisor at the time of injection. Only first bit of 'flags'
225*4882a593Smuzhiyun	is currently supported, when set, it indicates that the guest is dealing
226*4882a593Smuzhiyun	with asynchronous 'page not present' event. If during a page fault APF
227*4882a593Smuzhiyun	'flags' is '0' it means that this is regular page fault. Guest is
228*4882a593Smuzhiyun	supposed to clear 'flags' when it is done handling #PF exception so the
229*4882a593Smuzhiyun	next event can be delivered.
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun	Note, since APF 'page not present' events use the same exception vector
232*4882a593Smuzhiyun	as regular page fault, guest must reset 'flags' to '0' before it does
233*4882a593Smuzhiyun	something that can generate normal page fault.
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun	Bytes 5-7 of 64 byte memory location ('token') will be written to by the
236*4882a593Smuzhiyun	hypervisor at the time of APF 'page ready' event injection. The content
237*4882a593Smuzhiyun	of these bytes is a token which was previously delivered as 'page not
238*4882a593Smuzhiyun	present' event. The event indicates the page in now available. Guest is
239*4882a593Smuzhiyun	supposed to write '0' to 'token' when it is done handling 'page ready'
240*4882a593Smuzhiyun	event and to write 1' to MSR_KVM_ASYNC_PF_ACK after clearing the location;
241*4882a593Smuzhiyun	writing to the MSR forces KVM to re-scan its queue and deliver the next
242*4882a593Smuzhiyun	pending notification.
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun	Note, MSR_KVM_ASYNC_PF_INT MSR specifying the interrupt vector for 'page
245*4882a593Smuzhiyun	ready' APF delivery needs to be written to before enabling APF mechanism
246*4882a593Smuzhiyun	in MSR_KVM_ASYNC_PF_EN or interrupt #0 can get injected. The MSR is
247*4882a593Smuzhiyun	available if KVM_FEATURE_ASYNC_PF_INT is present in CPUID.
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun	Note, previously, 'page ready' events were delivered via the same #PF
250*4882a593Smuzhiyun	exception as 'page not present' events but this is now deprecated. If
251*4882a593Smuzhiyun	bit 3 (interrupt based delivery) is not set APF events are not delivered.
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun	If APF is disabled while there are outstanding APFs, they will
254*4882a593Smuzhiyun	not be delivered.
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun	Currently 'page ready' APF events will be always delivered on the
257*4882a593Smuzhiyun	same vcpu as 'page not present' event was, but guest should not rely on
258*4882a593Smuzhiyun	that.
259*4882a593Smuzhiyun
260*4882a593SmuzhiyunMSR_KVM_STEAL_TIME:
261*4882a593Smuzhiyun	0x4b564d03
262*4882a593Smuzhiyun
263*4882a593Smuzhiyundata:
264*4882a593Smuzhiyun	64-byte alignment physical address of a memory area which must be
265*4882a593Smuzhiyun	in guest RAM, plus an enable bit in bit 0. This memory is expected to
266*4882a593Smuzhiyun	hold a copy of the following structure::
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun	  struct kvm_steal_time {
269*4882a593Smuzhiyun		__u64 steal;
270*4882a593Smuzhiyun		__u32 version;
271*4882a593Smuzhiyun		__u32 flags;
272*4882a593Smuzhiyun		__u8  preempted;
273*4882a593Smuzhiyun		__u8  u8_pad[3];
274*4882a593Smuzhiyun		__u32 pad[11];
275*4882a593Smuzhiyun	  }
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun	whose data will be filled in by the hypervisor periodically. Only one
278*4882a593Smuzhiyun	write, or registration, is needed for each VCPU. The interval between
279*4882a593Smuzhiyun	updates of this structure is arbitrary and implementation-dependent.
280*4882a593Smuzhiyun	The hypervisor may update this structure at any time it sees fit until
281*4882a593Smuzhiyun	anything with bit0 == 0 is written to it. Guest is required to make sure
282*4882a593Smuzhiyun	this structure is initialized to zero.
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun	Fields have the following meanings:
285*4882a593Smuzhiyun
286*4882a593Smuzhiyun	version:
287*4882a593Smuzhiyun		a sequence counter. In other words, guest has to check
288*4882a593Smuzhiyun		this field before and after grabbing time information and make
289*4882a593Smuzhiyun		sure they are both equal and even. An odd version indicates an
290*4882a593Smuzhiyun		in-progress update.
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun	flags:
293*4882a593Smuzhiyun		At this point, always zero. May be used to indicate
294*4882a593Smuzhiyun		changes in this structure in the future.
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun	steal:
297*4882a593Smuzhiyun		the amount of time in which this vCPU did not run, in
298*4882a593Smuzhiyun		nanoseconds. Time during which the vcpu is idle, will not be
299*4882a593Smuzhiyun		reported as steal time.
300*4882a593Smuzhiyun
301*4882a593Smuzhiyun	preempted:
302*4882a593Smuzhiyun		indicate the vCPU who owns this struct is running or
303*4882a593Smuzhiyun		not. Non-zero values mean the vCPU has been preempted. Zero
304*4882a593Smuzhiyun		means the vCPU is not preempted. NOTE, it is always zero if the
305*4882a593Smuzhiyun		the hypervisor doesn't support this field.
306*4882a593Smuzhiyun
307*4882a593SmuzhiyunMSR_KVM_EOI_EN:
308*4882a593Smuzhiyun	0x4b564d04
309*4882a593Smuzhiyun
310*4882a593Smuzhiyundata:
311*4882a593Smuzhiyun	Bit 0 is 1 when PV end of interrupt is enabled on the vcpu; 0
312*4882a593Smuzhiyun	when disabled.  Bit 1 is reserved and must be zero.  When PV end of
313*4882a593Smuzhiyun	interrupt is enabled (bit 0 set), bits 63-2 hold a 4-byte aligned
314*4882a593Smuzhiyun	physical address of a 4 byte memory area which must be in guest RAM and
315*4882a593Smuzhiyun	must be zeroed.
316*4882a593Smuzhiyun
317*4882a593Smuzhiyun	The first, least significant bit of 4 byte memory location will be
318*4882a593Smuzhiyun	written to by the hypervisor, typically at the time of interrupt
319*4882a593Smuzhiyun	injection.  Value of 1 means that guest can skip writing EOI to the apic
320*4882a593Smuzhiyun	(using MSR or MMIO write); instead, it is sufficient to signal
321*4882a593Smuzhiyun	EOI by clearing the bit in guest memory - this location will
322*4882a593Smuzhiyun	later be polled by the hypervisor.
323*4882a593Smuzhiyun	Value of 0 means that the EOI write is required.
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun	It is always safe for the guest to ignore the optimization and perform
326*4882a593Smuzhiyun	the APIC EOI write anyway.
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun	Hypervisor is guaranteed to only modify this least
329*4882a593Smuzhiyun	significant bit while in the current VCPU context, this means that
330*4882a593Smuzhiyun	guest does not need to use either lock prefix or memory ordering
331*4882a593Smuzhiyun	primitives to synchronise with the hypervisor.
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun	However, hypervisor can set and clear this memory bit at any time:
334*4882a593Smuzhiyun	therefore to make sure hypervisor does not interrupt the
335*4882a593Smuzhiyun	guest and clear the least significant bit in the memory area
336*4882a593Smuzhiyun	in the window between guest testing it to detect
337*4882a593Smuzhiyun	whether it can skip EOI apic write and between guest
338*4882a593Smuzhiyun	clearing it to signal EOI to the hypervisor,
339*4882a593Smuzhiyun	guest must both read the least significant bit in the memory area and
340*4882a593Smuzhiyun	clear it using a single CPU instruction, such as test and clear, or
341*4882a593Smuzhiyun	compare and exchange.
342*4882a593Smuzhiyun
343*4882a593SmuzhiyunMSR_KVM_POLL_CONTROL:
344*4882a593Smuzhiyun	0x4b564d05
345*4882a593Smuzhiyun
346*4882a593Smuzhiyun	Control host-side polling.
347*4882a593Smuzhiyun
348*4882a593Smuzhiyundata:
349*4882a593Smuzhiyun	Bit 0 enables (1) or disables (0) host-side HLT polling logic.
350*4882a593Smuzhiyun
351*4882a593Smuzhiyun	KVM guests can request the host not to poll on HLT, for example if
352*4882a593Smuzhiyun	they are performing polling themselves.
353*4882a593Smuzhiyun
354*4882a593SmuzhiyunMSR_KVM_ASYNC_PF_INT:
355*4882a593Smuzhiyun	0x4b564d06
356*4882a593Smuzhiyun
357*4882a593Smuzhiyundata:
358*4882a593Smuzhiyun	Second asynchronous page fault (APF) control MSR.
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun	Bits 0-7: APIC vector for delivery of 'page ready' APF events.
361*4882a593Smuzhiyun	Bits 8-63: Reserved
362*4882a593Smuzhiyun
363*4882a593Smuzhiyun	Interrupt vector for asynchnonous 'page ready' notifications delivery.
364*4882a593Smuzhiyun	The vector has to be set up before asynchronous page fault mechanism
365*4882a593Smuzhiyun	is enabled in MSR_KVM_ASYNC_PF_EN.  The MSR is only available if
366*4882a593Smuzhiyun	KVM_FEATURE_ASYNC_PF_INT is present in CPUID.
367*4882a593Smuzhiyun
368*4882a593SmuzhiyunMSR_KVM_ASYNC_PF_ACK:
369*4882a593Smuzhiyun	0x4b564d07
370*4882a593Smuzhiyun
371*4882a593Smuzhiyundata:
372*4882a593Smuzhiyun	Asynchronous page fault (APF) acknowledgment.
373*4882a593Smuzhiyun
374*4882a593Smuzhiyun	When the guest is done processing 'page ready' APF event and 'token'
375*4882a593Smuzhiyun	field in 'struct kvm_vcpu_pv_apf_data' is cleared it is supposed to
376*4882a593Smuzhiyun	write '1' to bit 0 of the MSR, this causes the host to re-scan its queue
377*4882a593Smuzhiyun	and check if there are more notifications pending. The MSR is available
378*4882a593Smuzhiyun	if KVM_FEATURE_ASYNC_PF_INT is present in CPUID.
379