KVM: X86: Introduce more exit_fastpath_completion enum values
Adds a fastpath_t typedef since enum lines are a bit long, and replace EXIT_FASTPATH_SKIP_EMUL_INS with two new exit_fastpath_completion enum values. - EXIT_FASTPATH_EXIT_HANDLED kvm will still go through it's full run loop, but it would skip invoking the exit handler. - EXIT_FASTPATH_REENTER_GUEST complete fastpath, guest can be re-entered without invoking the exit handler or going back to vcpu_run Tested-by: Haiwei Li <lihaiwei@tencent.com> Cc: Haiwei Li <lihaiwei@tencent.com> Signed-off-by: Wanpeng Li <wanpengli@tencent.com> Message-Id: <1588055009-12677-4-git-send-email-wanpengli@tencent.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Paolo Bonzini

parent
5a9f54435a
commit
404d5d7bff
@@ -1608,27 +1608,28 @@ static int handle_fastpath_set_x2apic_icr_irqoff(struct kvm_vcpu *vcpu, u64 data
|
||||
return 1;
|
||||
}
|
||||
|
||||
enum exit_fastpath_completion handle_fastpath_set_msr_irqoff(struct kvm_vcpu *vcpu)
|
||||
fastpath_t handle_fastpath_set_msr_irqoff(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u32 msr = kvm_rcx_read(vcpu);
|
||||
u64 data;
|
||||
int ret = 0;
|
||||
fastpath_t ret = EXIT_FASTPATH_NONE;
|
||||
|
||||
switch (msr) {
|
||||
case APIC_BASE_MSR + (APIC_ICR >> 4):
|
||||
data = kvm_read_edx_eax(vcpu);
|
||||
ret = handle_fastpath_set_x2apic_icr_irqoff(vcpu, data);
|
||||
if (!handle_fastpath_set_x2apic_icr_irqoff(vcpu, data)) {
|
||||
kvm_skip_emulated_instruction(vcpu);
|
||||
ret = EXIT_FASTPATH_EXIT_HANDLED;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return EXIT_FASTPATH_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
if (ret != EXIT_FASTPATH_NONE)
|
||||
trace_kvm_msr_write(msr, data);
|
||||
return EXIT_FASTPATH_SKIP_EMUL_INS;
|
||||
}
|
||||
|
||||
return EXIT_FASTPATH_NONE;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(handle_fastpath_set_msr_irqoff);
|
||||
|
||||
@@ -8205,7 +8206,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
|
||||
bool req_int_win =
|
||||
dm_request_for_irq_injection(vcpu) &&
|
||||
kvm_cpu_accept_dm_intr(vcpu);
|
||||
enum exit_fastpath_completion exit_fastpath;
|
||||
fastpath_t exit_fastpath;
|
||||
|
||||
bool req_immediate_exit = false;
|
||||
|
||||
|
Reference in New Issue
Block a user