[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [SVM] fix segment descriptors to allow migration to Intel VT systems
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1236930225 0 # Node ID 0f7e2ba5d0e62022f0d59b0e098ab9b0747ce1f4 # Parent f97e737373cdf06726042e7b2732d33cb0a2ba38 [SVM] fix segment descriptors to allow migration to Intel VT systems Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> --- xen/arch/x86/hvm/svm/svm.c | 12 ++++++++++++ 1 files changed, 12 insertions(+) diff -r f97e737373cd -r 0f7e2ba5d0e6 xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Fri Mar 13 07:38:47 2009 +0000 +++ b/xen/arch/x86/hvm/svm/svm.c Fri Mar 13 07:43:45 2009 +0000 @@ -488,28 +488,40 @@ static void svm_get_segment_register(str { case x86_seg_cs: memcpy(reg, &vmcb->cs, sizeof(*reg)); + reg->attr.fields.g = reg->limit > 0xFFFFF; break; case x86_seg_ds: memcpy(reg, &vmcb->ds, sizeof(*reg)); + if ( reg->attr.fields.type != 0 ) + reg->attr.fields.type |= 0x1; break; case x86_seg_es: memcpy(reg, &vmcb->es, sizeof(*reg)); + if ( reg->attr.fields.type != 0 ) + reg->attr.fields.type |= 0x1; break; case x86_seg_fs: svm_sync_vmcb(v); memcpy(reg, &vmcb->fs, sizeof(*reg)); + if ( reg->attr.fields.type != 0 ) + reg->attr.fields.type |= 0x1; break; case x86_seg_gs: svm_sync_vmcb(v); memcpy(reg, &vmcb->gs, sizeof(*reg)); + if ( reg->attr.fields.type != 0 ) + reg->attr.fields.type |= 0x1; break; case x86_seg_ss: memcpy(reg, &vmcb->ss, sizeof(*reg)); reg->attr.fields.dpl = vmcb->cpl; + if ( reg->attr.fields.type == 0 ) + reg->attr.fields.db = 0; break; case x86_seg_tr: svm_sync_vmcb(v); memcpy(reg, &vmcb->tr, sizeof(*reg)); + reg->attr.fields.type |= 0x2; break; case x86_seg_gdtr: memcpy(reg, &vmcb->gdtr, sizeof(*reg)); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |