v->arch.perdomain_ptes =
d->arch.mm_perdomain_pt + (v->vcpu_id << GDT_LDT_VCPU_SHIFT);
-#ifdef __x86_64__
- v->arch.sysexit_cs = 3;
-#endif
-
return (is_pv_32on64_vcpu(v) ? setup_compat_l4(v) : 0);
}
OFFSET(VCPU_sysenter_sel, struct vcpu, arch.sysenter_callback_cs);
OFFSET(VCPU_sysenter_disables_events, struct vcpu,
arch.sysenter_disables_events);
- OFFSET(VCPU_sysexit_addr, struct vcpu, arch.sysexit_eip);
- OFFSET(VCPU_sysexit_sel, struct vcpu, arch.sysexit_cs);
OFFSET(VCPU_gp_fault_addr, struct vcpu,
arch.guest_context.trap_ctxt[TRAP_gp_fault].address);
OFFSET(VCPU_gp_fault_sel, struct vcpu,
(reg->flags & CALLBACKF_mask_events) != 0;
break;
- case CALLBACKTYPE_sysexit:
- v->arch.sysexit_cs = reg->address.cs | 3;
- v->arch.sysexit_eip = reg->address.eip;
- break;
-
case CALLBACKTYPE_nmi:
ret = register_guest_nmi_callback(reg->address.eip);
break;
case CALLBACKTYPE_failsafe:
case CALLBACKTYPE_syscall32:
case CALLBACKTYPE_sysenter:
- case CALLBACKTYPE_sysexit:
ret = -EINVAL;
break;
movl $TRAP_syscall,4(%rsp)
SAVE_ALL
GET_CURRENT(%rbx)
- movq VCPU_sysexit_addr(%rbx),%rax
- movzwl VCPU_sysexit_sel(%rbx),%edx
cmpb $0,VCPU_sysenter_disables_events(%rbx)
- movq %rax,UREGS_rip(%rsp)
- movl %edx,UREGS_cs(%rsp)
+ movq $0,UREGS_rip(%rsp) /* null rip */
+ movl $3,UREGS_cs(%rsp) /* ring 3 null cs */
movq VCPU_sysenter_addr(%rbx),%rax
setne %cl
leaq VCPU_trap_bounce(%rbx),%rdx
!!(reg->flags & CALLBACKF_mask_events);
break;
- case CALLBACKTYPE_sysexit:
- v->arch.sysexit_eip = reg->address;
- v->arch.sysexit_cs = FLAT_USER_CS32;
- break;
-
case CALLBACKTYPE_nmi:
ret = register_guest_nmi_callback(reg->address);
break;
case CALLBACKTYPE_syscall:
case CALLBACKTYPE_syscall32:
case CALLBACKTYPE_sysenter:
- case CALLBACKTYPE_sysexit:
ret = -EINVAL;
break;
struct trap_bounce int80_bounce;
unsigned long syscall32_callback_eip;
unsigned long sysenter_callback_eip;
- unsigned long sysexit_eip;
unsigned short syscall32_callback_cs;
unsigned short sysenter_callback_cs;
- unsigned short sysexit_cs;
bool_t syscall32_disables_events;
bool_t sysenter_disables_events;
#endif
*/
#define CALLBACKTYPE_sysenter 5
-/*
- * x86/64 hypervisor: used to fill a sysenter frame's return address, if the
- * guest desires to have a non-NULL value there. If the guest kernel is
- * 64-bit then the sysexit code selector is always set to FLAT_USER_CS32.
- */
-#define CALLBACKTYPE_sysexit 6
-
/*
* x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs
* ('32-on-32-on-64', '32-on-64-on-64')