From mboxrd@z Thu Jan 1 00:00:00 1970 From: Feng Wu Subject: [PATCH v5 02/10] x86: move common_interrupt to entry.S Date: Tue, 6 May 2014 18:07:12 +0800 Message-ID: <1399370832-5308-1-git-send-email-feng.wu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, Feng Wu , JBeulich@suse.com, andrew.cooper3@citrix.com, eddie.dong@intel.com, jun.nakajima@intel.com, ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org This patch moves label common_interrupt from asm_defns.h to entry.S Signed-off-by: Feng Wu Reviewed-by: Jan Beulich Reviewed-by: Andrew Cooper --- xen/arch/x86/i8259.c | 2 -- xen/arch/x86/x86_64/entry.S | 6 +++++ xen/include/asm-x86/x86_64/asm_defns.h | 49 ++++++++++++++-------------------- 3 files changed, 26 insertions(+), 31 deletions(-) diff --git a/xen/arch/x86/i8259.c b/xen/arch/x86/i8259.c index 6fdcce8..9fec490 100644 --- a/xen/arch/x86/i8259.c +++ b/xen/arch/x86/i8259.c @@ -35,8 +35,6 @@ __asm__(".section .text"); -BUILD_COMMON_IRQ() - #define IRQ_NAME(nr) VEC##nr##_interrupt #define BI(nr) \ diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 3ea4683..1c81852 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -465,6 +465,12 @@ ENTRY(dom_crash_sync_extable) xorl %edi,%edi jmp asm_domain_crash_synchronous /* Does not return */ +ENTRY(common_interrupt) + SAVE_ALL + movq %rsp,%rdi + callq do_IRQ + jmp ret_from_intr + /* No special register assumptions. */ ENTRY(ret_from_intr) GET_CURRENT(%rbx) diff --git a/xen/include/asm-x86/x86_64/asm_defns.h b/xen/include/asm-x86/x86_64/asm_defns.h index bf63ac1..aedb2da 100644 --- a/xen/include/asm-x86/x86_64/asm_defns.h +++ b/xen/include/asm-x86/x86_64/asm_defns.h @@ -51,27 +51,27 @@ r__->entry_vector |= TRAP_regs_dirty; \ }) -#define SAVE_ALL \ - addq $-(UREGS_error_code-UREGS_r15), %rsp; \ - cld; \ - movq %rdi,UREGS_rdi(%rsp); \ - movq %rsi,UREGS_rsi(%rsp); \ - movq %rdx,UREGS_rdx(%rsp); \ - movq %rcx,UREGS_rcx(%rsp); \ - movq %rax,UREGS_rax(%rsp); \ - movq %r8,UREGS_r8(%rsp); \ - movq %r9,UREGS_r9(%rsp); \ - movq %r10,UREGS_r10(%rsp); \ - movq %r11,UREGS_r11(%rsp); \ - movq %rbx,UREGS_rbx(%rsp); \ - movq %rbp,UREGS_rbp(%rsp); \ - SETUP_EXCEPTION_FRAME_POINTER(UREGS_rbp); \ - movq %r12,UREGS_r12(%rsp); \ - movq %r13,UREGS_r13(%rsp); \ - movq %r14,UREGS_r14(%rsp); \ - movq %r15,UREGS_r15(%rsp); \ - #ifdef __ASSEMBLY__ +.macro SAVE_ALL + addq $-(UREGS_error_code-UREGS_r15), %rsp + cld + movq %rdi,UREGS_rdi(%rsp) + movq %rsi,UREGS_rsi(%rsp) + movq %rdx,UREGS_rdx(%rsp) + movq %rcx,UREGS_rcx(%rsp) + movq %rax,UREGS_rax(%rsp) + movq %r8,UREGS_r8(%rsp) + movq %r9,UREGS_r9(%rsp) + movq %r10,UREGS_r10(%rsp) + movq %r11,UREGS_r11(%rsp) + movq %rbx,UREGS_rbx(%rsp) + movq %rbp,UREGS_rbp(%rsp) + SETUP_EXCEPTION_FRAME_POINTER(UREGS_rbp) + movq %r12,UREGS_r12(%rsp) + movq %r13,UREGS_r13(%rsp) + movq %r14,UREGS_r14(%rsp) + movq %r15,UREGS_r15(%rsp) +.endm /* * Save all registers not preserved by C code or used in entry/exit code. Mark @@ -208,15 +208,6 @@ #define REX64_PREFIX "rex64/" #endif -#define BUILD_COMMON_IRQ() \ -__asm__( \ - "\n" __ALIGN_STR"\n" \ - "common_interrupt:\n\t" \ - STR(SAVE_ALL) "\n\t" \ - "movq %rsp,%rdi\n\t" \ - "callq " STR(do_IRQ) "\n\t" \ - "jmp ret_from_intr\n"); - #define BUILD_IRQ(nr) \ "pushq $0\n\t" \ "movl $"#nr",4(%rsp)\n\t" \ -- 1.8.3.1