]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86_64/kernel/entry.S
x86_64: support poll() on /dev/mcelog
[linux-2.6-omap-h63xx.git] / arch / x86_64 / kernel / entry.S
index 601d332c4b79edc11252d6a835bbe77e6a2812e9..830cfc6ee8cb1ac08297650f3efcf9e8a7a469a8 100644 (file)
@@ -282,7 +282,7 @@ sysret_careful:
 sysret_signal:
        TRACE_IRQS_ON
        sti
-       testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
+       testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx
        jz    1f
 
        /* Really a signal */
@@ -375,7 +375,7 @@ int_very_careful:
        jmp int_restore_rest
        
 int_signal:
-       testl $(_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_SINGLESTEP),%edx
+       testl $(_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx
        jz 1f
        movq %rsp,%rdi          # &ptregs -> arg1
        xorl %esi,%esi          # oldset -> arg2
@@ -599,7 +599,7 @@ retint_careful:
        jmp retint_check
        
 retint_signal:
-       testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
+       testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx
        jz    retint_swapgs
        TRACE_IRQS_ON
        sti
@@ -675,6 +675,9 @@ END(invalidate_interrupt\num)
 ENTRY(call_function_interrupt)
        apicinterrupt CALL_FUNCTION_VECTOR,smp_call_function_interrupt
 END(call_function_interrupt)
+ENTRY(irq_move_cleanup_interrupt)
+       apicinterrupt IRQ_MOVE_CLEANUP_VECTOR,smp_irq_move_cleanup_interrupt
+END(irq_move_cleanup_interrupt)
 #endif
 
 ENTRY(apic_timer_interrupt)
@@ -698,6 +701,7 @@ END(spurious_interrupt)
        CFI_ADJUST_CFA_OFFSET 8
        pushq %rax      /* push real oldrax to the rdi slot */ 
        CFI_ADJUST_CFA_OFFSET 8
+       CFI_REL_OFFSET rax,0
        leaq  \sym(%rip),%rax
        jmp error_entry
        CFI_ENDPROC
@@ -707,6 +711,7 @@ END(spurious_interrupt)
        XCPT_FRAME
        pushq %rax
        CFI_ADJUST_CFA_OFFSET 8
+       CFI_REL_OFFSET rax,0
        leaq  \sym(%rip),%rax
        jmp error_entry
        CFI_ENDPROC
@@ -814,6 +819,7 @@ paranoid_schedule\trace:
  */                                            
 KPROBE_ENTRY(error_entry)
        _frame RDI
+       CFI_REL_OFFSET rax,0
        /* rdi slot contains rax, oldrax contains error code */
        cld     
        subq  $14*8,%rsp
@@ -821,6 +827,7 @@ KPROBE_ENTRY(error_entry)
        movq %rsi,13*8(%rsp)
        CFI_REL_OFFSET  rsi,RSI
        movq 14*8(%rsp),%rsi    /* load rax from rdi slot */
+       CFI_REGISTER    rax,rsi
        movq %rdx,12*8(%rsp)
        CFI_REL_OFFSET  rdx,RDX
        movq %rcx,11*8(%rsp)
@@ -854,6 +861,7 @@ error_swapgs:
        swapgs
 error_sti:     
        movq %rdi,RDI(%rsp)     
+       CFI_REL_OFFSET  rdi,RDI
        movq %rsp,%rdi
        movq ORIG_RAX(%rsp),%rsi        /* get error code */ 
        movq $-1,ORIG_RAX(%rsp)
@@ -1156,35 +1164,9 @@ ENTRY(call_softirq)
        CFI_ENDPROC
 ENDPROC(call_softirq)
 
-#ifdef CONFIG_STACK_UNWIND
-ENTRY(arch_unwind_init_running)
+KPROBE_ENTRY(ignore_sysret)
        CFI_STARTPROC
-       movq    %r15, R15(%rdi)
-       movq    %r14, R14(%rdi)
-       xchgq   %rsi, %rdx
-       movq    %r13, R13(%rdi)
-       movq    %r12, R12(%rdi)
-       xorl    %eax, %eax
-       movq    %rbp, RBP(%rdi)
-       movq    %rbx, RBX(%rdi)
-       movq    (%rsp), %rcx
-       movq    %rax, R11(%rdi)
-       movq    %rax, R10(%rdi)
-       movq    %rax, R9(%rdi)
-       movq    %rax, R8(%rdi)
-       movq    %rax, RAX(%rdi)
-       movq    %rax, RCX(%rdi)
-       movq    %rax, RDX(%rdi)
-       movq    %rax, RSI(%rdi)
-       movq    %rax, RDI(%rdi)
-       movq    %rax, ORIG_RAX(%rdi)
-       movq    %rcx, RIP(%rdi)
-       leaq    8(%rsp), %rcx
-       movq    $__KERNEL_CS, CS(%rdi)
-       movq    %rax, EFLAGS(%rdi)
-       movq    %rcx, RSP(%rdi)
-       movq    $__KERNEL_DS, SS(%rdi)
-       jmpq    *%rdx
+       mov $-ENOSYS,%eax
+       sysret
        CFI_ENDPROC
-ENDPROC(arch_unwind_init_running)
-#endif
+ENDPROC(ignore_sysret)