diff -r e94cd141c7af xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Wed Jan 26 11:58:02 2011 -0600 +++ b/xen/arch/x86/hvm/svm/svm.c Sat Jan 29 00:46:58 2011 -0600 @@ -158,15 +158,26 @@ static int svm_vmcb_save(struct vcpu *v, struct hvm_hw_cpu *c) { struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb; + uint64_t cs, esp, eip; c->cr0 = v->arch.hvm_vcpu.guest_cr[0]; c->cr2 = v->arch.hvm_vcpu.guest_cr[2]; c->cr3 = v->arch.hvm_vcpu.guest_cr[3]; c->cr4 = v->arch.hvm_vcpu.guest_cr[4]; - c->sysenter_cs = v->arch.hvm_svm.guest_sysenter_cs; - c->sysenter_esp = v->arch.hvm_svm.guest_sysenter_esp; - c->sysenter_eip = v->arch.hvm_svm.guest_sysenter_eip; + cs = vmcb->sysenter_cs; + esp = vmcb->sysenter_esp; + eip = vmcb->sysenter_eip; + + printk("cs=0x%llx, esp=0x%llx, eip=0x%llx\n", (unsigned long long)cs, + (unsigned long long)esp, (unsigned long long)eip); + + //c->sysenter_cs = v->arch.hvm_svm.guest_sysenter_cs; + //c->sysenter_esp = v->arch.hvm_svm.guest_sysenter_esp; + //c->sysenter_eip = v->arch.hvm_svm.guest_sysenter_eip; + c->sysenter_cs = cs; + c->sysenter_esp = esp; + c->sysenter_eip = eip; c->pending_event = 0; c->error_code = 0; @@ -228,6 +239,10 @@ v->arch.hvm_svm.guest_sysenter_esp = c->sysenter_esp; v->arch.hvm_svm.guest_sysenter_eip = c->sysenter_eip; + vmcb->sysenter_cs = c->sysenter_cs; + vmcb->sysenter_esp = c->sysenter_esp; + vmcb->sysenter_eip = c->sysenter_eip; + if ( paging_mode_hap(v->domain) ) { vmcb_set_np_enable(vmcb, 1);