Reviewed-by: Bibo, Mao <maobibo@xxxxxxxxxxx> 在 2023/5/30 09:52, Tianrui Zhao 写道: > Implement kvm handle LoongArch vcpu idle exception, using kvm_vcpu_block > to emulate it. > > Signed-off-by: Tianrui Zhao <zhaotianrui@xxxxxxxxxxx> > --- > arch/loongarch/kvm/exit.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c > index bd33fe0c6424..3fdb42939a05 100644 > --- a/arch/loongarch/kvm/exit.c > +++ b/arch/loongarch/kvm/exit.c > @@ -188,3 +188,23 @@ int _kvm_complete_iocsr_read(struct kvm_vcpu *vcpu, struct kvm_run *run) > > return er; > } > + > +int _kvm_emu_idle(struct kvm_vcpu *vcpu) > +{ > + ++vcpu->stat.idle_exits; > + trace_kvm_exit_idle(vcpu, KVM_TRACE_EXIT_IDLE); > + > + if (!kvm_arch_vcpu_runnable(vcpu)) { > + /* > + * Switch to the software timer before halt-polling/blocking as > + * the guest's timer may be a break event for the vCPU, and the > + * hypervisor timer runs only when the CPU is in guest mode. > + * Switch before halt-polling so that KVM recognizes an expired > + * timer before blocking. > + */ > + kvm_save_timer(vcpu); > + kvm_vcpu_block(vcpu); > + } > + > + return EMULATE_DONE; > +}