mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86: Remove CALLBACKTYPE_sysexit.
Looking at the Linux patch as an example, it adds more code and complexity than it removes, for no obvious performance benefit. Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
cd75d47348
commit
f0baaccd75
7 files changed
+2
-31
No files matched your search
@@ -418,10 +418,6 @@ int vcpu_initialise(struct vcpu *v)
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,8 +79,6 @@ void __dummy__(void)
|
||||
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,
|
||||
|
||||
@@ -179,11 +179,6 @@ static long compat_register_guest_callback(
|
||||
(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;
|
||||
@@ -207,7 +202,6 @@ static long compat_unregister_guest_callback(
|
||||
case CALLBACKTYPE_failsafe:
|
||||
case CALLBACKTYPE_syscall32:
|
||||
case CALLBACKTYPE_sysenter:
|
||||
case CALLBACKTYPE_sysexit:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
|
||||
|
||||
@@ -264,11 +264,9 @@ sysenter_eflags_saved:
|
||||
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
|
||||
|
||||
@@ -431,11 +431,6 @@ static long register_guest_callback(struct callback_register *reg)
|
||||
!!(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;
|
||||
@@ -459,7 +454,6 @@ static long unregister_guest_callback(struct callback_unregister *unreg)
|
||||
case CALLBACKTYPE_syscall:
|
||||
case CALLBACKTYPE_syscall32:
|
||||
case CALLBACKTYPE_sysenter:
|
||||
case CALLBACKTYPE_sysexit:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
|
||||
|
||||
@@ -303,10 +303,8 @@ struct arch_vcpu
|
||||
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
|
||||
|
||||
@@ -64,13 +64,6 @@
|
||||
*/
|
||||
#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')
|
||||
|
||||