From patchwork Mon Aug 29 06:17:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juergen Gross X-Patchwork-Id: 9303101 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 927A2608A0 for ; Mon, 29 Aug 2016 06:20:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 78CB4286F3 for ; Mon, 29 Aug 2016 06:20:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D222287B0; Mon, 29 Aug 2016 06:20:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3570728738 for ; Mon, 29 Aug 2016 06:20:01 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1beFsv-0008E1-7Q; Mon, 29 Aug 2016 06:17:29 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1beFst-0008Cw-Sz; Mon, 29 Aug 2016 06:17:27 +0000 Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id 2B/13-19721-773D3C75; Mon, 29 Aug 2016 06:17:27 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRWlGSWpSXmKPExsVyuP0Ov27Z5cP hBvvWqVu8/bqE2eL7lslMDkwehz9cYQlgjGLNzEvKr0hgzTh/zrLgkWzFrmmbGRsY74h3MXJy SAgYSbyd+I+pi5GLQ0hgIaPEhc/XmEESbAKqEhuun2IFsUUE3CS+fJ/FBmIzC0RIzPlwigXEF hYwlJi1bTY7iM0CVL/79xVGEJtXwF7i/7fnzBAL5CSuz5zOBGJzCjhIvP9xD6xXCKim4fsC1g mM3AsYGVYxahSnFpWlFukaGeolFWWmZ5TkJmbm6BoamOrlphYXJ6an5iQmFesl5+duYgT6uZ6 BgXEH493JfocYJTmYlER574gcDBfiS8pPqcxILM6ILyrNSS0+xCjDwaEkwXv+0uFwIcGi1PTU irTMHGDAwaQlOHiURHh3gqR5iwsSc4sz0yFSpxgVpcR5C0ESAiCJjNI8uDZYkF9ilJUS5mVkY GAQ4ilILcrNLEGVf8UozsGoJMzLAzKFJzOvBG76K6DFTECLGV7vB1lckoiQkmpgXP7K9N+NvX PEX29kXqOb+cju2oN96x4+Ljlq4sLU+iJxrTdzvuCptMo1SvtMN07a3bMzvKDh1ILLarPPrps YUzrDIq1b+6TajVuvrCJK5E7pnbuSUr3f6uXEKwusW2/aqmf/3XlX2fp2qazxPLFsi+wpZTIP a3IPba0WlGN+lLwh9XJ/4hkhHiWW4oxEQy3mouJEAActz1ltAgAA X-Env-Sender: jgross@suse.com X-Msg-Ref: server-7.tower-206.messagelabs.com!1472451446!56501736!1 X-Originating-IP: [195.135.220.15] X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50 X-StarScan-Received: X-StarScan-Version: 8.84; banners=-,-,- X-VirusChecked: Checked Received: (qmail 33025 invoked from network); 29 Aug 2016 06:17:26 -0000 Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by server-7.tower-206.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 29 Aug 2016 06:17:26 -0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id DD0AFACC5; Mon, 29 Aug 2016 06:17:25 +0000 (UTC) From: Juergen Gross To: minios-devel@lists.xenproject.org, xen-devel@lists.xenproject.org Date: Mon, 29 Aug 2016 08:17:21 +0200 Message-Id: <1472451442-28123-3-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.6 In-Reply-To: <1472451442-28123-1-git-send-email-jgross@suse.com> References: <1472451442-28123-1-git-send-email-jgross@suse.com> Cc: Juergen Gross , samuel.thibault@ens-lyon.org, wei.liu2@citrix.com Subject: [Xen-devel] [PATCH v2 2/3] mini-os: cleanup x86_64.S X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Wei Liu Acked-by: Samuel Thibault --- 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.