[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [mini-os master] mini-os: cleanup x86_64.S
commit 113e43d972f6c48e62561ddb0019facefa9a0859 Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Mon Aug 29 08:17:21 2016 +0200 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Mon Aug 29 11:11:48 2016 +0100 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> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> --- arch/x86/x86_64.S | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 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 zeroentry sym +.macro SAVE_PARAVIRT #ifdef CONFIG_PARAVIRT - movq (%rsp),%rcx - movq 8(%rsp),%r11 - addq $0x10,%rsp /* skip rcx and r11 */ + pop %rcx + pop %r11 /* rsp points to the error code */ #endif +.endm + +.macro zeroentry sym + 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. -- generated by git-patchbot for /home/xen/git/mini-os.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |