Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f5d18a9 authored by Avi Kivity's avatar Avi Kivity
Browse files

KVM: Return to userspace on emulation failure



Instead of mindlessly retrying to execute the instruction, report the
failure to userspace.

Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent 988a2cae
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -2673,8 +2673,9 @@ int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t cr2, u32 error_code)
		++vcpu->stat.mmio_exits;
		return 0;
	case EMULATE_FAIL:
		kvm_report_emulation_failure(vcpu, "pagetable");
		return 1;
		vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
		vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION;
		return 0;
	default:
		BUG();
	}
+7 −0
Original line number Diff line number Diff line
@@ -95,6 +95,10 @@ struct kvm_pit_config {
#define KVM_EXIT_S390_RESET       14
#define KVM_EXIT_DCR              15
#define KVM_EXIT_NMI              16
#define KVM_EXIT_INTERNAL_ERROR   17

/* For KVM_EXIT_INTERNAL_ERROR */
#define KVM_INTERNAL_ERROR_EMULATION 1

/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
struct kvm_run {
@@ -181,6 +185,9 @@ struct kvm_run {
			__u32 data;
			__u8  is_write;
		} dcr;
		struct {
			__u32 suberror;
		} internal;
		/* Fix the size of the union. */
		char padding[256];
	};