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