x86: Remove CALLBACKTYPE_sysexit.
authorKeir Fraser <keir@xensource.com>
Wed, 24 Oct 2007 16:15:54 +0000 (17:15 +0100)
committerKeir Fraser <keir@xensource.com>
Wed, 24 Oct 2007 16:15:54 +0000 (17:15 +0100)
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>
xen/arch/x86/domain.c
xen/arch/x86/x86_64/asm-offsets.c
xen/arch/x86/x86_64/compat/traps.c
xen/arch/x86/x86_64/entry.S
xen/arch/x86/x86_64/traps.c
xen/include/asm-x86/domain.h
xen/include/public/callback.h

index 352566636d23ba2ab512bb25028fdc32b6a0ab85..295ad771451e4cd70f967a1b955d1a8d42914ac4 100644 (file)
@@ -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);
 }
 
index 7218cac1154c7e478de35367efb37c2abc45f7b3..bcb025688c4e54dda10ba65330707267763f49c1 100644 (file)
@@ -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,
index 286d8ad72c66311f9fe09e8ce8416e85ab3f20c3..fddbbd27d825d0f08873f86313ccfae381985c24 100644 (file)
@@ -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;
 
index 39feb5fd9ab78adf220c8490e001caa2b3356c50..34c9c2a9239825a92a9d63f76a63464e87174570 100644 (file)
@@ -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
index dd86fb75a7e3e34ae9dfba148589d3c5df3ff991..4df88dbb3d375211aa0c9564713149fcee87bfd1 100644 (file)
@@ -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;
 
index c7267fbfd70a3bf7c5a8947f44291df226eb2b99..498c2fe591890ae37f3f525c9a43682da8bbfd07 100644 (file)
@@ -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
index 9423fc135dfbf76613788e2668794f3f29eb0aec..f4962f66d8cb16cfba1e968867ed166fb17291a4 100644 (file)
  */
 #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')