mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
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: Amit Shah <amit.shah@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
b8222ad2e5
commit
25022acc3d
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user