On Tue, Sep 06, 2022 at 09:26:33PM -0700, Mingwei Zhang wrote: > > > @@ -10700,6 +10706,12 @@ static int vcpu_run(struct kvm_vcpu *vcpu) > > > if (kvm_cpu_has_pending_timer(vcpu)) > > > kvm_inject_pending_timer_irqs(vcpu); > > > > > > + if (vcpu->arch.nested_get_pages_pending) { > > > + r = kvm_get_nested_state_pages(vcpu); > > > + if (r <= 0) > > > + break; > > > + } > > > + > > > > Will this leads to skip the get_nested_state_pages for L2 first time > > vmentry in every L2 running iteration ? Because with above changes > > KVM_REQ_GET_NESTED_STATE_PAGES is not set in > > nested_vmx_enter_non_root_mode() and > > vcpu->arch.nested_get_pages_pending is not checked in > > vcpu_enter_guest(). > > > Good catch. I think the diff won't work when vcpu is runnable. It only > tries to catch the vcpu block case. Even for the vcpu block case, the > check of KVM_REQ_UNBLOCK is way too late. Ah, kvm_vcpu_check_block() > is called by kvm_vcpu_block() which is called by vcpu_block(). The > warning is triggered at the very beginning of vcpu_block(), i.e., > within kvm_arch_vcpu_runnable(). So, please ignore the trace in my > previous email. > > In addition, my minor push back for that is > vcpu->arch.nested_get_pages_pending seems to be another > KVM_REQ_GET_NESTED_STATE_PAGES. Yeah, but in concept level it's not a REQ mask lives in the vcpu->requests which can be cached by e.g. kvm_request_pending(). It's necessary to check vcpu->arch.nested_get_pages_pending in vcpu_enter_guest() if Sean's idea is to replace KVM_REQ_GET_NESTED_STATE_PAGES with nested_get_pages_pending. > > Thanks. > -Mingwei > > > -Mingwei