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

Commit fe5913e4 authored by Joerg Roedel's avatar Joerg Roedel Committed by Avi Kivity
Browse files

KVM: SVM: Handle MCEs early in the vmexit process



This patch moves handling of the MC vmexits to an earlier
point in the vmexit. The handle_exit function is too late
because the vcpu might alreadry have changed its physical
cpu.

Cc: stable@kernel.org
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent a06cdb56
Loading
Loading
Loading
Loading
+14 −1
Original line number Original line Diff line number Diff line
@@ -1410,7 +1410,7 @@ static int nm_interception(struct vcpu_svm *svm)
	return 1;
	return 1;
}
}


static int mc_interception(struct vcpu_svm *svm)
static void svm_handle_mce(struct vcpu_svm *svm)
{
{
	/*
	/*
	 * On an #MC intercept the MCE handler is not called automatically in
	 * On an #MC intercept the MCE handler is not called automatically in
@@ -1420,6 +1420,11 @@ static int mc_interception(struct vcpu_svm *svm)
		"int $0x12\n");
		"int $0x12\n");
	/* not sure if we ever come back to this point */
	/* not sure if we ever come back to this point */


	return;
}

static int mc_interception(struct vcpu_svm *svm)
{
	return 1;
	return 1;
}
}


@@ -3088,6 +3093,14 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
		vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR);
		vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR);
		vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR);
		vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR);
	}
	}

	/*
	 * We need to handle MC intercepts here before the vcpu has a chance to
	 * change the physical cpu
	 */
	if (unlikely(svm->vmcb->control.exit_code ==
		     SVM_EXIT_EXCP_BASE + MC_VECTOR))
		svm_handle_mce(svm);
}
}


#undef R
#undef R