Paolo Bonzini <pbonzini@xxxxxxxxxx> writes: > On 25/05/20 16:41, Vitaly Kuznetsov wrote: >> + case MSR_KVM_ASYNC_PF_ACK: >> + if (data & 0x1) { >> + vcpu->arch.apf.pageready_pending = false; >> + kvm_check_async_pf_completion(vcpu); >> + } >> + break; >> case MSR_KVM_STEAL_TIME: >> >> if (unlikely(!sched_info_on())) >> @@ -3183,6 +3189,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) >> case MSR_KVM_ASYNC_PF_INT: >> msr_info->data = vcpu->arch.apf.msr_int_val; >> break; >> + case MSR_KVM_ASYNC_PF_ACK: >> + msr_info->data = 0; >> + break; > > How is the pageready_pending flag migrated? Should we revert the > direction of the MSR (i.e. read the flag, and write 0 to clear it)? The flag is not migrated so it will be 'false'. This can just cause an extra kick in kvm_arch_async_page_present_queued() but this shouldn't be a big deal. Also, after migration we will just send 'wakeup all' event, async pf queue will be empty. MSR_KVM_ASYNC_PF_ACK by itself is not migrated, we don't even store it, not sure how invering it would change things. -- Vitaly