vserver 1.9.5.x5
[linux-2.6.git] / arch / x86_64 / kernel / entry.S
index 89f74f7..c261fdc 100644 (file)
@@ -41,7 +41,6 @@
 #include <asm/unistd.h>
 #include <asm/thread_info.h>
 #include <asm/hw_irq.h>
-#include <asm/errno.h>
 
        .code64
 
@@ -297,7 +296,7 @@ int_very_careful:
        sti
        SAVE_REST
        /* Check for syscall exit trace */      
-       testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),%edx
+       testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx
        jz int_signal
        pushq %rdi
        leaq 8(%rsp),%rdi       # &ptregs -> arg1       
@@ -305,6 +304,7 @@ int_very_careful:
        popq %rdi
        btr  $TIF_SYSCALL_TRACE,%edi
        btr  $TIF_SYSCALL_AUDIT,%edi
+       btr  $TIF_SINGLESTEP,%edi
        jmp int_restore_rest
        
 int_signal:
@@ -323,19 +323,20 @@ int_restore_rest:
  * Certain special system calls that need to save a complete full stack frame.
  */                                                            
        
-       .macro PTREGSCALL label,func
+       .macro PTREGSCALL label,func,arg
        .globl \label
 \label:
        leaq    \func(%rip),%rax
+       leaq    -ARGOFFSET+8(%rsp),\arg /* 8 for return address */
        jmp     ptregscall_common
        .endm
 
-       PTREGSCALL stub_clone, sys_clone
-       PTREGSCALL stub_fork, sys_fork
-       PTREGSCALL stub_vfork, sys_vfork
-       PTREGSCALL stub_rt_sigsuspend, sys_rt_sigsuspend
-       PTREGSCALL stub_sigaltstack, sys_sigaltstack
-       PTREGSCALL stub_iopl, sys_iopl
+       PTREGSCALL stub_clone, sys_clone, %r8
+       PTREGSCALL stub_fork, sys_fork, %rdi
+       PTREGSCALL stub_vfork, sys_vfork, %rdi
+       PTREGSCALL stub_rt_sigsuspend, sys_rt_sigsuspend, %rdx
+       PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx
+       PTREGSCALL stub_iopl, sys_iopl, %rsi
 
 ENTRY(ptregscall_common)
        CFI_STARTPROC
@@ -385,6 +386,7 @@ ENTRY(stub_rt_sigreturn)
        CFI_STARTPROC
        addq $8, %rsp           
        SAVE_REST
+       movq %rsp,%rdi
        FIXUP_TOP_OF_STACK %r11
        call sys_rt_sigreturn
        movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
@@ -535,6 +537,9 @@ retint_kernel:
        CFI_ENDPROC
        .endm
 
+ENTRY(thermal_interrupt)
+       apicinterrupt THERMAL_APIC_VECTOR,smp_thermal_interrupt
+
 #ifdef CONFIG_SMP      
 ENTRY(reschedule_interrupt)
        apicinterrupt RESCHEDULE_VECTOR,smp_reschedule_interrupt
@@ -904,6 +909,7 @@ ENTRY(divide_error)
 ENTRY(spurious_interrupt_bug)
        zeroentry do_spurious_interrupt_bug
 
+#ifdef CONFIG_X86_MCE
        /* runs on exception stack */
 ENTRY(machine_check)
        CFI_STARTPROC
@@ -912,6 +918,7 @@ ENTRY(machine_check)
        paranoidentry do_machine_check
        jmp paranoid_exit
        CFI_ENDPROC
+#endif
 
 ENTRY(call_debug)
        zeroentry do_call_debug