On Fri, May 28, 2021, Lai Jiangshan wrote: > > On 2021/5/28 08:26, Sean Christopherson wrote: > > On Fri, May 28, 2021, Lai Jiangshan wrote: > > > > > > On 2021/5/28 00:13, Sean Christopherson wrote: > > > > And making a request won't work without revamping the order of request handling > > > > in vcpu_enter_guest(), e.g. KVM_REQ_MMU_RELOAD and KVM_REQ_MMU_SYNC are both > > > > serviced before KVM_REQ_STEAL_UPDATE. > > > > > > Yes, it just fixes the said problem in the simplest way. > > > I copied KVM_REQ_MMU_RELOAD from kvm_handle_invpcid(INVPCID_TYPE_ALL_INCL_GLOBAL). > > > (If the guest is not preempted, it will call invpcid_flush_all() and will be handled > > > by this way) > > > > The problem is that record_steal_time() is called after KVM_REQ_MMU_RELOAD > > in vcpu_enter_guest() and so the reload request won't be recognized until the > > next VM-Exit. It works for kvm_handle_invpcid() because vcpu_enter_guest() is > > guaranteed to run between the invcpid code and VM-Enter. > > Kvm will recheck the request before VM-enter. > See kvm_vcpu_exit_request(). Ah, right, forgot requests are rechecked. Thanks!