X86: drivers: remove __dev* attributes.
[deliverable/linux.git] / arch / x86 / kernel / entry_64.S
index 1328fe49a3f14d7a33615e892efca8d110aeb6e6..07a7a04529bc5d7849ffc21b79819edd7b23ffd9 100644 (file)
@@ -56,7 +56,7 @@
 #include <asm/ftrace.h>
 #include <asm/percpu.h>
 #include <asm/asm.h>
-#include <asm/rcu.h>
+#include <asm/context_tracking.h>
 #include <asm/smap.h>
 #include <linux/err.h>
 
@@ -845,10 +845,25 @@ ENTRY(\label)
 END(\label)
        .endm
 
-       PTREGSCALL stub_clone, sys_clone, %r8
-       PTREGSCALL stub_fork, sys_fork, %rdi
-       PTREGSCALL stub_vfork, sys_vfork, %rdi
-       PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx
+       .macro FORK_LIKE func
+ENTRY(stub_\func)
+       CFI_STARTPROC
+       popq    %r11                    /* save return address */
+       PARTIAL_FRAME 0
+       SAVE_REST
+       pushq   %r11                    /* put it back on stack */
+       FIXUP_TOP_OF_STACK %r11, 8
+       DEFAULT_FRAME 0 8               /* offset 8: return address */
+       call sys_\func
+       RESTORE_TOP_OF_STACK %r11, 8
+       ret $REST_SKIP          /* pop extended registers */
+       CFI_ENDPROC
+END(stub_\func)
+       .endm
+
+       FORK_LIKE  clone
+       FORK_LIKE  fork
+       FORK_LIKE  vfork
        PTREGSCALL stub_iopl, sys_iopl, %rsi
 
 ENTRY(ptregscall_common)
@@ -897,8 +912,6 @@ ENTRY(stub_rt_sigreturn)
 END(stub_rt_sigreturn)
 
 #ifdef CONFIG_X86_X32_ABI
-       PTREGSCALL stub_x32_sigaltstack, sys32_sigaltstack, %rdx
-
 ENTRY(stub_x32_rt_sigreturn)
        CFI_STARTPROC
        addq $8, %rsp
@@ -1699,9 +1712,10 @@ nested_nmi:
 
 1:
        /* Set up the interrupted NMIs stack to jump to repeat_nmi */
-       leaq -6*8(%rsp), %rdx
+       leaq -1*8(%rsp), %rdx
        movq %rdx, %rsp
-       CFI_ADJUST_CFA_OFFSET 6*8
+       CFI_ADJUST_CFA_OFFSET 1*8
+       leaq -10*8(%rsp), %rdx
        pushq_cfi $__KERNEL_DS
        pushq_cfi %rdx
        pushfq_cfi
@@ -1709,8 +1723,8 @@ nested_nmi:
        pushq_cfi $repeat_nmi
 
        /* Put stack back */
-       addq $(11*8), %rsp
-       CFI_ADJUST_CFA_OFFSET -11*8
+       addq $(6*8), %rsp
+       CFI_ADJUST_CFA_OFFSET -6*8
 
 nested_nmi_out:
        popq_cfi %rdx
@@ -1736,18 +1750,18 @@ first_nmi:
         * +-------------------------+
         * | NMI executing variable  |
         * +-------------------------+
-        * | Saved SS                |
-        * | Saved Return RSP        |
-        * | Saved RFLAGS            |
-        * | Saved CS                |
-        * | Saved RIP               |
-        * +-------------------------+
         * | copied SS               |
         * | copied Return RSP       |
         * | copied RFLAGS           |
         * | copied CS               |
         * | copied RIP              |
         * +-------------------------+
+        * | Saved SS                |
+        * | Saved Return RSP        |
+        * | Saved RFLAGS            |
+        * | Saved CS                |
+        * | Saved RIP               |
+        * +-------------------------+
         * | pt_regs                 |
         * +-------------------------+
         *
@@ -1763,9 +1777,14 @@ first_nmi:
        /* Set the NMI executing variable on the stack. */
        pushq_cfi $1
 
+       /*
+        * Leave room for the "copied" frame
+        */
+       subq $(5*8), %rsp
+
        /* Copy the stack frame to the Saved frame */
        .rept 5
-       pushq_cfi 6*8(%rsp)
+       pushq_cfi 11*8(%rsp)
        .endr
        CFI_DEF_CFA_OFFSET SS+8-RIP
 
@@ -1786,12 +1805,15 @@ repeat_nmi:
         * is benign for the non-repeat case, where 1 was pushed just above
         * to this very stack slot).
         */
-       movq $1, 5*8(%rsp)
+       movq $1, 10*8(%rsp)
 
        /* Make another copy, this one may be modified by nested NMIs */
+       addq $(10*8), %rsp
+       CFI_ADJUST_CFA_OFFSET -10*8
        .rept 5
-       pushq_cfi 4*8(%rsp)
+       pushq_cfi -6*8(%rsp)
        .endr
+       subq $(5*8), %rsp
        CFI_DEF_CFA_OFFSET SS+8-RIP
 end_repeat_nmi:
 
@@ -1842,8 +1864,12 @@ nmi_swapgs:
        SWAPGS_UNSAFE_STACK
 nmi_restore:
        RESTORE_ALL 8
+
+       /* Pop the extra iret frame */
+       addq $(5*8), %rsp
+
        /* Clear the NMI executing stack variable */
-       movq $0, 10*8(%rsp)
+       movq $0, 5*8(%rsp)
        jmp irq_return
        CFI_ENDPROC
 END(nmi)
This page took 0.030412 seconds and 5 git commands to generate.