[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v2 2/3] mini-os: cleanup x86_64.S



arch/x86/x86_64.S contains some unnecessary macros. Remove them.

Add a SAVE_PARAVIRT macro for saving %rcx and %r11 on the stack in
case of CONFIG_PARAVIRT defined.

Remove the parameter from HYPERVISOR_IRET macro as it is used with
0 only.

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
V2: modify SAVE_PARAVIRT as suggested by Andrew Cooper
---
 arch/x86/x86_64.S | 43 +++++++++++++++----------------------------
 1 file changed, 15 insertions(+), 28 deletions(-)

diff --git a/arch/x86/x86_64.S b/arch/x86/x86_64.S
index 2046187..7529c02 100644
--- a/arch/x86/x86_64.S
+++ b/arch/x86/x86_64.S
@@ -45,21 +45,10 @@ hypercall_page:
 
 
 #define XEN_GET_VCPU_INFO(reg) movq HYPERVISOR_shared_info,reg
-#define XEN_PUT_VCPU_INFO(reg)
-#define XEN_PUT_VCPU_INFO_fixup
 #define XEN_LOCKED_BLOCK_EVENTS(reg)   movb $1,evtchn_upcall_mask(reg)
 #define XEN_LOCKED_UNBLOCK_EVENTS(reg) movb $0,evtchn_upcall_mask(reg)
 #define XEN_TEST_PENDING(reg)  testb $0xFF,evtchn_upcall_pending(reg)
 
-#define XEN_BLOCK_EVENTS(reg)  XEN_GET_VCPU_INFO(reg)                  ; \
-                                       XEN_LOCKED_BLOCK_EVENTS(reg)    ; \
-                                           XEN_PUT_VCPU_INFO(reg)
-
-#define XEN_UNBLOCK_EVENTS(reg)        XEN_GET_VCPU_INFO(reg)                  
; \
-                                               XEN_LOCKED_UNBLOCK_EVENTS(reg)  
; \
-                                       XEN_PUT_VCPU_INFO(reg)
-
-
 /* Offsets into shared_info_t. */                
 #define evtchn_upcall_pending          /* 0 */
 #define evtchn_upcall_mask             1
@@ -77,12 +66,15 @@ KERNEL_CS_MASK = 0xfc
 
 
 /* Macros */
+.macro SAVE_PARAVIRT
+#ifdef CONFIG_PARAVIRT
+       pop %rcx
+       pop %r11 /* rsp points to the error code */
+#endif
+.endm
+
 .macro zeroentry sym
-#ifdef CONFIG_PARAVIRT
-       movq (%rsp),%rcx
-       movq 8(%rsp),%r11
-       addq $0x10,%rsp /* skip rcx and r11 */
-#endif
+       SAVE_PARAVIRT
        pushq $0        /* push error code/oldrax */
        pushq %rax      /* push real oldrax to the rdi slot */
        leaq  \sym(%rip),%rax
@@ -90,11 +82,7 @@ KERNEL_CS_MASK = 0xfc
 .endm
 
 .macro errorentry sym
-#ifdef CONFIG_PARAVIRT
-       movq (%rsp),%rcx
-       movq 8(%rsp),%r11
-       addq $0x10,%rsp /* rsp points to the error code */
-#endif
+       SAVE_PARAVIRT
        pushq %rax
        leaq  \sym(%rip),%rax
        jmp error_entry
@@ -141,7 +129,7 @@ KERNEL_CS_MASK = 0xfc
        movq %rdi, RDI(%rsp)    /* put rdi into the slot */
 .endm
 
-.macro HYPERVISOR_IRET flag
+.macro HYPERVISOR_IRET
 #ifdef CONFIG_PARAVIRT
        testl $NMI_MASK,2*8(%rsp)
        jnz   2f
@@ -155,7 +143,7 @@ KERNEL_CS_MASK = 0xfc
 #ifdef CONFIG_PARAVIRT
 2:     /* Slow iret via hypervisor. */
        andl  $~NMI_MASK, 16(%rsp)
-       pushq $\flag
+       pushq $0
        jmp  hypercall_page + (__HYPERVISOR_iret * 32)
 #endif
 .endm
@@ -207,17 +195,16 @@ error_exit:
        andb evtchn_upcall_mask(%rsi),%al
        andb $1,%al                     # EAX[0] == IRET_RFLAGS.IF & event_mask
        jnz restore_all_enable_events   #        != 0 => enable event delivery
-       XEN_PUT_VCPU_INFO(%rsi)
 
        RESTORE_ALL
-       HYPERVISOR_IRET 0
+       HYPERVISOR_IRET
 
 restore_all_enable_events:
        RESTORE_ALL
        pushq %rax                      # save rax for it will be clobbered 
later
        RSP_OFFSET=8                    # record the stack frame layout changes
        XEN_GET_VCPU_INFO(%rax)         # safe to use rax since it is saved
-       XEN_UNBLOCK_EVENTS(%rax)
+       XEN_LOCKED_UNBLOCK_EVENTS(%rax)
 
 scrit: /**** START OF CRITICAL REGION ****/
        XEN_TEST_PENDING(%rax)
@@ -229,7 +216,7 @@ scrit:      /**** START OF CRITICAL REGION ****/
 restore_end:
        jnz hypervisor_prologue         # safe to jump out of critical region
                                        # because events are masked if ZF = 0
-       HYPERVISOR_IRET 0
+       HYPERVISOR_IRET
 ecrit:  /**** END OF CRITICAL REGION ****/
 
 # Set up the stack as Xen does before calling event callback
@@ -278,7 +265,7 @@ critical_region_fixup:
 #else
 error_exit:
        RESTORE_ALL
-       HYPERVISOR_IRET 0
+       HYPERVISOR_IRET
 
 /*
  * Xen event (virtual interrupt) entry point.
-- 
2.6.6


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.