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

Commit 25022acc authored by Amit Shah's avatar Amit Shah Committed by Avi Kivity
Browse files

KVM: SVM: Set the 'g' bit of the cs selector for cross-vendor migration



The hardware does not set the 'g' bit of the cs selector and this breaks
migration from amd hosts to intel hosts. Set this bit if the segment
limit is beyond 1 MB.

Signed-off-by: default avatarAmit Shah <amit.shah@redhat.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent b8222ad2
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -772,6 +772,15 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
	var->l = (s->attrib >> SVM_SELECTOR_L_SHIFT) & 1;
	var->db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1;
	var->g = (s->attrib >> SVM_SELECTOR_G_SHIFT) & 1;

	/*
	 * SVM always stores 0 for the 'G' bit in the CS selector in
	 * the VMCB on a VMEXIT. This hurts cross-vendor migration:
	 * Intel's VMENTRY has a check on the 'G' bit.
	 */
	if (seg == VCPU_SREG_CS)
		var->g = s->limit > 0xfffff;

	var->unusable = !var->present;
}