Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / x86 / kernel / entry_64.S
1 /*
2  *  linux/arch/x86_64/entry.S
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  *  Copyright (C) 2000, 2001, 2002  Andi Kleen SuSE Labs
6  *  Copyright (C) 2000  Pavel Machek <pavel@suse.cz>
7  */
8
9 /*
10  * entry.S contains the system-call and fault low-level handling routines.
11  *
12  * Some of this is documented in Documentation/x86/entry_64.txt
13  *
14  * NOTE: This code handles signal-recognition, which happens every time
15  * after an interrupt and after each system call.
16  *
17  * A note on terminology:
18  * - iret frame: Architecture defined interrupt frame from SS to RIP
19  * at the top of the kernel process stack.
20  *
21  * Some macro usage:
22  * - CFI macros are used to generate dwarf2 unwind information for better
23  * backtraces. They don't change any code.
24  * - ENTRY/END Define functions in the symbol table.
25  * - TRACE_IRQ_* - Trace hard interrupt state for lock debugging.
26  * - idtentry - Define exception entry points.
27  */
28
29 #include <linux/linkage.h>
30 #include <asm/segment.h>
31 #include <asm/cache.h>
32 #include <asm/errno.h>
33 #include <asm/dwarf2.h>
34 #include <asm/calling.h>
35 #include <asm/asm-offsets.h>
36 #include <asm/msr.h>
37 #include <asm/unistd.h>
38 #include <asm/thread_info.h>
39 #include <asm/hw_irq.h>
40 #include <asm/page_types.h>
41 #include <asm/irqflags.h>
42 #include <asm/paravirt.h>
43 #include <asm/percpu.h>
44 #include <asm/asm.h>
45 #include <asm/context_tracking.h>
46 #include <asm/smap.h>
47 #include <asm/pgtable_types.h>
48 #include <linux/err.h>
49
50 /* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this.  */
51 #include <linux/elf-em.h>
52 #define AUDIT_ARCH_X86_64       (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
53 #define __AUDIT_ARCH_64BIT 0x80000000
54 #define __AUDIT_ARCH_LE    0x40000000
55
56         .code64
57         .section .entry.text, "ax"
58
59
60 #ifdef CONFIG_PARAVIRT
61 ENTRY(native_usergs_sysret64)
62         swapgs
63         sysretq
64 ENDPROC(native_usergs_sysret64)
65 #endif /* CONFIG_PARAVIRT */
66
67
68 .macro TRACE_IRQS_IRETQ
69 #ifdef CONFIG_TRACE_IRQFLAGS
70         bt   $9,EFLAGS(%rsp)    /* interrupts off? */
71         jnc  1f
72         TRACE_IRQS_ON
73 1:
74 #endif
75 .endm
76
77 /*
78  * When dynamic function tracer is enabled it will add a breakpoint
79  * to all locations that it is about to modify, sync CPUs, update
80  * all the code, sync CPUs, then remove the breakpoints. In this time
81  * if lockdep is enabled, it might jump back into the debug handler
82  * outside the updating of the IST protection. (TRACE_IRQS_ON/OFF).
83  *
84  * We need to change the IDT table before calling TRACE_IRQS_ON/OFF to
85  * make sure the stack pointer does not get reset back to the top
86  * of the debug stack, and instead just reuses the current stack.
87  */
88 #if defined(CONFIG_DYNAMIC_FTRACE) && defined(CONFIG_TRACE_IRQFLAGS)
89
90 .macro TRACE_IRQS_OFF_DEBUG
91         call debug_stack_set_zero
92         TRACE_IRQS_OFF
93         call debug_stack_reset
94 .endm
95
96 .macro TRACE_IRQS_ON_DEBUG
97         call debug_stack_set_zero
98         TRACE_IRQS_ON
99         call debug_stack_reset
100 .endm
101
102 .macro TRACE_IRQS_IRETQ_DEBUG
103         bt   $9,EFLAGS(%rsp)    /* interrupts off? */
104         jnc  1f
105         TRACE_IRQS_ON_DEBUG
106 1:
107 .endm
108
109 #else
110 # define TRACE_IRQS_OFF_DEBUG           TRACE_IRQS_OFF
111 # define TRACE_IRQS_ON_DEBUG            TRACE_IRQS_ON
112 # define TRACE_IRQS_IRETQ_DEBUG         TRACE_IRQS_IRETQ
113 #endif
114
115 /*
116  * empty frame
117  */
118         .macro EMPTY_FRAME start=1 offset=0
119         .if \start
120         CFI_STARTPROC simple
121         CFI_SIGNAL_FRAME
122         CFI_DEF_CFA rsp,8+\offset
123         .else
124         CFI_DEF_CFA_OFFSET 8+\offset
125         .endif
126         .endm
127
128 /*
129  * initial frame state for interrupts (and exceptions without error code)
130  */
131         .macro INTR_FRAME start=1 offset=0
132         EMPTY_FRAME \start, 5*8+\offset
133         /*CFI_REL_OFFSET ss, 4*8+\offset*/
134         CFI_REL_OFFSET rsp, 3*8+\offset
135         /*CFI_REL_OFFSET rflags, 2*8+\offset*/
136         /*CFI_REL_OFFSET cs, 1*8+\offset*/
137         CFI_REL_OFFSET rip, 0*8+\offset
138         .endm
139
140 /*
141  * initial frame state for exceptions with error code (and interrupts
142  * with vector already pushed)
143  */
144         .macro XCPT_FRAME start=1 offset=0
145         INTR_FRAME \start, 1*8+\offset
146         .endm
147
148 /*
149  * frame that enables passing a complete pt_regs to a C function.
150  */
151         .macro DEFAULT_FRAME start=1 offset=0
152         XCPT_FRAME \start, ORIG_RAX+\offset
153         CFI_REL_OFFSET rdi, RDI+\offset
154         CFI_REL_OFFSET rsi, RSI+\offset
155         CFI_REL_OFFSET rdx, RDX+\offset
156         CFI_REL_OFFSET rcx, RCX+\offset
157         CFI_REL_OFFSET rax, RAX+\offset
158         CFI_REL_OFFSET r8, R8+\offset
159         CFI_REL_OFFSET r9, R9+\offset
160         CFI_REL_OFFSET r10, R10+\offset
161         CFI_REL_OFFSET r11, R11+\offset
162         CFI_REL_OFFSET rbx, RBX+\offset
163         CFI_REL_OFFSET rbp, RBP+\offset
164         CFI_REL_OFFSET r12, R12+\offset
165         CFI_REL_OFFSET r13, R13+\offset
166         CFI_REL_OFFSET r14, R14+\offset
167         CFI_REL_OFFSET r15, R15+\offset
168         .endm
169
170 /*
171  * 64bit SYSCALL instruction entry. Up to 6 arguments in registers.
172  *
173  * 64bit SYSCALL saves rip to rcx, clears rflags.RF, then saves rflags to r11,
174  * then loads new ss, cs, and rip from previously programmed MSRs.
175  * rflags gets masked by a value from another MSR (so CLD and CLAC
176  * are not needed). SYSCALL does not save anything on the stack
177  * and does not change rsp.
178  *
179  * Registers on entry:
180  * rax  system call number
181  * rcx  return address
182  * r11  saved rflags (note: r11 is callee-clobbered register in C ABI)
183  * rdi  arg0
184  * rsi  arg1
185  * rdx  arg2
186  * r10  arg3 (needs to be moved to rcx to conform to C ABI)
187  * r8   arg4
188  * r9   arg5
189  * (note: r12-r15,rbp,rbx are callee-preserved in C ABI)
190  *
191  * Only called from user space.
192  *
193  * When user can change pt_regs->foo always force IRET. That is because
194  * it deals with uncanonical addresses better. SYSRET has trouble
195  * with them due to bugs in both AMD and Intel CPUs.
196  */
197
198 ENTRY(system_call)
199         CFI_STARTPROC   simple
200         CFI_SIGNAL_FRAME
201         CFI_DEF_CFA     rsp,0
202         CFI_REGISTER    rip,rcx
203         /*CFI_REGISTER  rflags,r11*/
204
205         /*
206          * Interrupts are off on entry.
207          * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON,
208          * it is too small to ever cause noticeable irq latency.
209          */
210         SWAPGS_UNSAFE_STACK
211         /*
212          * A hypervisor implementation might want to use a label
213          * after the swapgs, so that it can do the swapgs
214          * for the guest and jump here on syscall.
215          */
216 GLOBAL(system_call_after_swapgs)
217
218         movq    %rsp,PER_CPU_VAR(rsp_scratch)
219         movq    PER_CPU_VAR(kernel_stack),%rsp
220
221         /* Construct struct pt_regs on stack */
222         pushq_cfi $__USER_DS                    /* pt_regs->ss */
223         pushq_cfi PER_CPU_VAR(rsp_scratch)      /* pt_regs->sp */
224         /*
225          * Re-enable interrupts.
226          * We use 'rsp_scratch' as a scratch space, hence irq-off block above
227          * must execute atomically in the face of possible interrupt-driven
228          * task preemption. We must enable interrupts only after we're done
229          * with using rsp_scratch:
230          */
231         ENABLE_INTERRUPTS(CLBR_NONE)
232         pushq_cfi       %r11                    /* pt_regs->flags */
233         pushq_cfi       $__USER_CS              /* pt_regs->cs */
234         pushq_cfi       %rcx                    /* pt_regs->ip */
235         CFI_REL_OFFSET rip,0
236         pushq_cfi_reg   rax                     /* pt_regs->orig_ax */
237         pushq_cfi_reg   rdi                     /* pt_regs->di */
238         pushq_cfi_reg   rsi                     /* pt_regs->si */
239         pushq_cfi_reg   rdx                     /* pt_regs->dx */
240         pushq_cfi_reg   rcx                     /* pt_regs->cx */
241         pushq_cfi       $-ENOSYS                /* pt_regs->ax */
242         pushq_cfi_reg   r8                      /* pt_regs->r8 */
243         pushq_cfi_reg   r9                      /* pt_regs->r9 */
244         pushq_cfi_reg   r10                     /* pt_regs->r10 */
245         pushq_cfi_reg   r11                     /* pt_regs->r11 */
246         sub     $(6*8),%rsp /* pt_regs->bp,bx,r12-15 not saved */
247         CFI_ADJUST_CFA_OFFSET 6*8
248
249         testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
250         jnz tracesys
251 system_call_fastpath:
252 #if __SYSCALL_MASK == ~0
253         cmpq $__NR_syscall_max,%rax
254 #else
255         andl $__SYSCALL_MASK,%eax
256         cmpl $__NR_syscall_max,%eax
257 #endif
258         ja      1f      /* return -ENOSYS (already in pt_regs->ax) */
259         movq %r10,%rcx
260         call *sys_call_table(,%rax,8)
261         movq %rax,RAX(%rsp)
262 1:
263 /*
264  * Syscall return path ending with SYSRET (fast path).
265  * Has incompletely filled pt_regs.
266  */
267         LOCKDEP_SYS_EXIT
268         /*
269          * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON,
270          * it is too small to ever cause noticeable irq latency.
271          */
272         DISABLE_INTERRUPTS(CLBR_NONE)
273
274         /*
275          * We must check ti flags with interrupts (or at least preemption)
276          * off because we must *never* return to userspace without
277          * processing exit work that is enqueued if we're preempted here.
278          * In particular, returning to userspace with any of the one-shot
279          * flags (TIF_NOTIFY_RESUME, TIF_USER_RETURN_NOTIFY, etc) set is
280          * very bad.
281          */
282         testl $_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
283         jnz int_ret_from_sys_call_irqs_off      /* Go to the slow path */
284
285         CFI_REMEMBER_STATE
286
287         RESTORE_C_REGS_EXCEPT_RCX_R11
288         movq    RIP(%rsp),%rcx
289         CFI_REGISTER    rip,rcx
290         movq    EFLAGS(%rsp),%r11
291         /*CFI_REGISTER  rflags,r11*/
292         movq    RSP(%rsp),%rsp
293         /*
294          * 64bit SYSRET restores rip from rcx,
295          * rflags from r11 (but RF and VM bits are forced to 0),
296          * cs and ss are loaded from MSRs.
297          * Restoration of rflags re-enables interrupts.
298          *
299          * NB: On AMD CPUs with the X86_BUG_SYSRET_SS_ATTRS bug, the ss
300          * descriptor is not reinitialized.  This means that we should
301          * avoid SYSRET with SS == NULL, which could happen if we schedule,
302          * exit the kernel, and re-enter using an interrupt vector.  (All
303          * interrupt entries on x86_64 set SS to NULL.)  We prevent that
304          * from happening by reloading SS in __switch_to.  (Actually
305          * detecting the failure in 64-bit userspace is tricky but can be
306          * done.)
307          */
308         USERGS_SYSRET64
309
310         CFI_RESTORE_STATE
311
312         /* Do syscall entry tracing */
313 tracesys:
314         movq %rsp, %rdi
315         movl $AUDIT_ARCH_X86_64, %esi
316         call syscall_trace_enter_phase1
317         test %rax, %rax
318         jnz tracesys_phase2             /* if needed, run the slow path */
319         RESTORE_C_REGS_EXCEPT_RAX       /* else restore clobbered regs */
320         movq ORIG_RAX(%rsp), %rax
321         jmp system_call_fastpath        /*      and return to the fast path */
322
323 tracesys_phase2:
324         SAVE_EXTRA_REGS
325         movq %rsp, %rdi
326         movl $AUDIT_ARCH_X86_64, %esi
327         movq %rax,%rdx
328         call syscall_trace_enter_phase2
329
330         /*
331          * Reload registers from stack in case ptrace changed them.
332          * We don't reload %rax because syscall_trace_entry_phase2() returned
333          * the value it wants us to use in the table lookup.
334          */
335         RESTORE_C_REGS_EXCEPT_RAX
336         RESTORE_EXTRA_REGS
337 #if __SYSCALL_MASK == ~0
338         cmpq $__NR_syscall_max,%rax
339 #else
340         andl $__SYSCALL_MASK,%eax
341         cmpl $__NR_syscall_max,%eax
342 #endif
343         ja      1f      /* return -ENOSYS (already in pt_regs->ax) */
344         movq %r10,%rcx  /* fixup for C */
345         call *sys_call_table(,%rax,8)
346         movq %rax,RAX(%rsp)
347 1:
348         /* Use IRET because user could have changed pt_regs->foo */
349
350 /*
351  * Syscall return path ending with IRET.
352  * Has correct iret frame.
353  */
354 GLOBAL(int_ret_from_sys_call)
355         DISABLE_INTERRUPTS(CLBR_NONE)
356 int_ret_from_sys_call_irqs_off: /* jumps come here from the irqs-off SYSRET path */
357         TRACE_IRQS_OFF
358         movl $_TIF_ALLWORK_MASK,%edi
359         /* edi: mask to check */
360 GLOBAL(int_with_check)
361         LOCKDEP_SYS_EXIT_IRQ
362         GET_THREAD_INFO(%rcx)
363         movl TI_flags(%rcx),%edx
364         andl %edi,%edx
365         jnz   int_careful
366         andl    $~TS_COMPAT,TI_status(%rcx)
367         jmp     syscall_return
368
369         /* Either reschedule or signal or syscall exit tracking needed. */
370         /* First do a reschedule test. */
371         /* edx: work, edi: workmask */
372 int_careful:
373         testl $_TIF_NEED_RESCHED_MASK,%edx
374         jz  int_very_careful
375         TRACE_IRQS_ON
376         ENABLE_INTERRUPTS(CLBR_NONE)
377         pushq_cfi %rdi
378         SCHEDULE_USER
379         popq_cfi %rdi
380         DISABLE_INTERRUPTS(CLBR_NONE)
381         TRACE_IRQS_OFF
382         jmp int_with_check
383
384         /* handle signals and tracing -- both require a full pt_regs */
385 int_very_careful:
386         TRACE_IRQS_ON
387         ENABLE_INTERRUPTS(CLBR_NONE)
388         SAVE_EXTRA_REGS
389         /* Check for syscall exit trace */
390         testl $_TIF_WORK_SYSCALL_EXIT,%edx
391         jz int_signal
392         pushq_cfi %rdi
393         leaq 8(%rsp),%rdi       # &ptregs -> arg1
394         call syscall_trace_leave
395         popq_cfi %rdi
396         andl $~(_TIF_WORK_SYSCALL_EXIT|_TIF_SYSCALL_EMU),%edi
397         jmp int_restore_rest
398
399 int_signal:
400         testl $_TIF_DO_NOTIFY_MASK,%edx
401         jz 1f
402         movq %rsp,%rdi          # &ptregs -> arg1
403         xorl %esi,%esi          # oldset -> arg2
404         call do_notify_resume
405 1:      movl $_TIF_WORK_MASK,%edi
406 int_restore_rest:
407         RESTORE_EXTRA_REGS
408         DISABLE_INTERRUPTS(CLBR_NONE)
409         TRACE_IRQS_OFF
410         jmp int_with_check
411
412 syscall_return:
413         /* The IRETQ could re-enable interrupts: */
414         DISABLE_INTERRUPTS(CLBR_ANY)
415         TRACE_IRQS_IRETQ
416
417         /*
418          * Try to use SYSRET instead of IRET if we're returning to
419          * a completely clean 64-bit userspace context.
420          */
421         movq RCX(%rsp),%rcx
422         cmpq %rcx,RIP(%rsp)             /* RCX == RIP */
423         jne opportunistic_sysret_failed
424
425         /*
426          * On Intel CPUs, SYSRET with non-canonical RCX/RIP will #GP
427          * in kernel space.  This essentially lets the user take over
428          * the kernel, since userspace controls RSP.  It's not worth
429          * testing for canonicalness exactly -- this check detects any
430          * of the 17 high bits set, which is true for non-canonical
431          * or kernel addresses.  (This will pessimize vsyscall=native.
432          * Big deal.)
433          *
434          * If virtual addresses ever become wider, this will need
435          * to be updated to remain correct on both old and new CPUs.
436          */
437         .ifne __VIRTUAL_MASK_SHIFT - 47
438         .error "virtual address width changed -- SYSRET checks need update"
439         .endif
440         shr $__VIRTUAL_MASK_SHIFT, %rcx
441         jnz opportunistic_sysret_failed
442
443         cmpq $__USER_CS,CS(%rsp)        /* CS must match SYSRET */
444         jne opportunistic_sysret_failed
445
446         movq R11(%rsp),%r11
447         cmpq %r11,EFLAGS(%rsp)          /* R11 == RFLAGS */
448         jne opportunistic_sysret_failed
449
450         /*
451          * SYSRET can't restore RF.  SYSRET can restore TF, but unlike IRET,
452          * restoring TF results in a trap from userspace immediately after
453          * SYSRET.  This would cause an infinite loop whenever #DB happens
454          * with register state that satisfies the opportunistic SYSRET
455          * conditions.  For example, single-stepping this user code:
456          *
457          *           movq $stuck_here,%rcx
458          *           pushfq
459          *           popq %r11
460          *   stuck_here:
461          *
462          * would never get past 'stuck_here'.
463          */
464         testq $(X86_EFLAGS_RF|X86_EFLAGS_TF), %r11
465         jnz opportunistic_sysret_failed
466
467         /* nothing to check for RSP */
468
469         cmpq $__USER_DS,SS(%rsp)        /* SS must match SYSRET */
470         jne opportunistic_sysret_failed
471
472         /*
473          * We win!  This label is here just for ease of understanding
474          * perf profiles.  Nothing jumps here.
475          */
476 syscall_return_via_sysret:
477         CFI_REMEMBER_STATE
478         /* r11 is already restored (see code above) */
479         RESTORE_C_REGS_EXCEPT_R11
480         movq RSP(%rsp),%rsp
481         USERGS_SYSRET64
482         CFI_RESTORE_STATE
483
484 opportunistic_sysret_failed:
485         SWAPGS
486         jmp     restore_c_regs_and_iret
487         CFI_ENDPROC
488 END(system_call)
489
490
491         .macro FORK_LIKE func
492 ENTRY(stub_\func)
493         CFI_STARTPROC
494         DEFAULT_FRAME 0, 8              /* offset 8: return address */
495         SAVE_EXTRA_REGS 8
496         jmp sys_\func
497         CFI_ENDPROC
498 END(stub_\func)
499         .endm
500
501         FORK_LIKE  clone
502         FORK_LIKE  fork
503         FORK_LIKE  vfork
504
505 ENTRY(stub_execve)
506         CFI_STARTPROC
507         DEFAULT_FRAME 0, 8
508         call    sys_execve
509 return_from_execve:
510         testl   %eax, %eax
511         jz      1f
512         /* exec failed, can use fast SYSRET code path in this case */
513         ret
514 1:
515         /* must use IRET code path (pt_regs->cs may have changed) */
516         addq    $8, %rsp
517         CFI_ADJUST_CFA_OFFSET -8
518         ZERO_EXTRA_REGS
519         movq    %rax,RAX(%rsp)
520         jmp     int_ret_from_sys_call
521         CFI_ENDPROC
522 END(stub_execve)
523 /*
524  * Remaining execve stubs are only 7 bytes long.
525  * ENTRY() often aligns to 16 bytes, which in this case has no benefits.
526  */
527         .align  8
528 GLOBAL(stub_execveat)
529         CFI_STARTPROC
530         DEFAULT_FRAME 0, 8
531         call    sys_execveat
532         jmp     return_from_execve
533         CFI_ENDPROC
534 END(stub_execveat)
535
536 #ifdef CONFIG_X86_X32_ABI
537         .align  8
538 GLOBAL(stub_x32_execve)
539         CFI_STARTPROC
540         DEFAULT_FRAME 0, 8
541         call    compat_sys_execve
542         jmp     return_from_execve
543         CFI_ENDPROC
544 END(stub_x32_execve)
545         .align  8
546 GLOBAL(stub_x32_execveat)
547         CFI_STARTPROC
548         DEFAULT_FRAME 0, 8
549         call    compat_sys_execveat
550         jmp     return_from_execve
551         CFI_ENDPROC
552 END(stub_x32_execveat)
553 #endif
554
555 #ifdef CONFIG_IA32_EMULATION
556         .align  8
557 GLOBAL(stub32_execve)
558         CFI_STARTPROC
559         call    compat_sys_execve
560         jmp     return_from_execve
561         CFI_ENDPROC
562 END(stub32_execve)
563         .align  8
564 GLOBAL(stub32_execveat)
565         CFI_STARTPROC
566         call    compat_sys_execveat
567         jmp     return_from_execve
568         CFI_ENDPROC
569 END(stub32_execveat)
570 #endif
571
572 /*
573  * sigreturn is special because it needs to restore all registers on return.
574  * This cannot be done with SYSRET, so use the IRET return path instead.
575  */
576 ENTRY(stub_rt_sigreturn)
577         CFI_STARTPROC
578         DEFAULT_FRAME 0, 8
579         /*
580          * SAVE_EXTRA_REGS result is not normally needed:
581          * sigreturn overwrites all pt_regs->GPREGS.
582          * But sigreturn can fail (!), and there is no easy way to detect that.
583          * To make sure RESTORE_EXTRA_REGS doesn't restore garbage on error,
584          * we SAVE_EXTRA_REGS here.
585          */
586         SAVE_EXTRA_REGS 8
587         call sys_rt_sigreturn
588 return_from_stub:
589         addq    $8, %rsp
590         CFI_ADJUST_CFA_OFFSET -8
591         RESTORE_EXTRA_REGS
592         movq %rax,RAX(%rsp)
593         jmp int_ret_from_sys_call
594         CFI_ENDPROC
595 END(stub_rt_sigreturn)
596
597 #ifdef CONFIG_X86_X32_ABI
598 ENTRY(stub_x32_rt_sigreturn)
599         CFI_STARTPROC
600         DEFAULT_FRAME 0, 8
601         SAVE_EXTRA_REGS 8
602         call sys32_x32_rt_sigreturn
603         jmp  return_from_stub
604         CFI_ENDPROC
605 END(stub_x32_rt_sigreturn)
606 #endif
607
608 /*
609  * A newly forked process directly context switches into this address.
610  *
611  * rdi: prev task we switched from
612  */
613 ENTRY(ret_from_fork)
614         DEFAULT_FRAME
615
616         LOCK ; btr $TIF_FORK,TI_flags(%r8)
617
618         pushq_cfi $0x0002
619         popfq_cfi                               # reset kernel eflags
620
621         call schedule_tail                      # rdi: 'prev' task parameter
622
623         RESTORE_EXTRA_REGS
624
625         testl $3,CS(%rsp)                       # from kernel_thread?
626
627         /*
628          * By the time we get here, we have no idea whether our pt_regs,
629          * ti flags, and ti status came from the 64-bit SYSCALL fast path,
630          * the slow path, or one of the ia32entry paths.
631          * Use IRET code path to return, since it can safely handle
632          * all of the above.
633          */
634         jnz     int_ret_from_sys_call
635
636         /* We came from kernel_thread */
637         /* nb: we depend on RESTORE_EXTRA_REGS above */
638         movq %rbp, %rdi
639         call *%rbx
640         movl $0, RAX(%rsp)
641         RESTORE_EXTRA_REGS
642         jmp int_ret_from_sys_call
643         CFI_ENDPROC
644 END(ret_from_fork)
645
646 /*
647  * Build the entry stubs with some assembler magic.
648  * We pack 1 stub into every 8-byte block.
649  */
650         .align 8
651 ENTRY(irq_entries_start)
652         INTR_FRAME
653     vector=FIRST_EXTERNAL_VECTOR
654     .rept (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
655         pushq_cfi $(~vector+0x80)       /* Note: always in signed byte range */
656     vector=vector+1
657         jmp     common_interrupt
658         CFI_ADJUST_CFA_OFFSET -8
659         .align  8
660     .endr
661         CFI_ENDPROC
662 END(irq_entries_start)
663
664 /*
665  * Interrupt entry/exit.
666  *
667  * Interrupt entry points save only callee clobbered registers in fast path.
668  *
669  * Entry runs with interrupts off.
670  */
671
672 /* 0(%rsp): ~(interrupt number) */
673         .macro interrupt func
674         cld
675         /*
676          * Since nothing in interrupt handling code touches r12...r15 members
677          * of "struct pt_regs", and since interrupts can nest, we can save
678          * four stack slots and simultaneously provide
679          * an unwind-friendly stack layout by saving "truncated" pt_regs
680          * exactly up to rbp slot, without these members.
681          */
682         ALLOC_PT_GPREGS_ON_STACK -RBP
683         SAVE_C_REGS -RBP
684         /* this goes to 0(%rsp) for unwinder, not for saving the value: */
685         SAVE_EXTRA_REGS_RBP -RBP
686
687         leaq -RBP(%rsp),%rdi    /* arg1 for \func (pointer to pt_regs) */
688
689         testl $3, CS-RBP(%rsp)
690         je 1f
691         SWAPGS
692 1:
693         /*
694          * Save previous stack pointer, optionally switch to interrupt stack.
695          * irq_count is used to check if a CPU is already on an interrupt stack
696          * or not. While this is essentially redundant with preempt_count it is
697          * a little cheaper to use a separate counter in the PDA (short of
698          * moving irq_enter into assembly, which would be too much work)
699          */
700         movq %rsp, %rsi
701         incl PER_CPU_VAR(irq_count)
702         cmovzq PER_CPU_VAR(irq_stack_ptr),%rsp
703         CFI_DEF_CFA_REGISTER    rsi
704         pushq %rsi
705         /*
706          * For debugger:
707          * "CFA (Current Frame Address) is the value on stack + offset"
708          */
709         CFI_ESCAPE      0x0f /* DW_CFA_def_cfa_expression */, 6, \
710                         0x77 /* DW_OP_breg7 (rsp) */, 0, \
711                         0x06 /* DW_OP_deref */, \
712                         0x08 /* DW_OP_const1u */, SIZEOF_PTREGS-RBP, \
713                         0x22 /* DW_OP_plus */
714         /* We entered an interrupt context - irqs are off: */
715         TRACE_IRQS_OFF
716
717         call \func
718         .endm
719
720         /*
721          * The interrupt stubs push (~vector+0x80) onto the stack and
722          * then jump to common_interrupt.
723          */
724         .p2align CONFIG_X86_L1_CACHE_SHIFT
725 common_interrupt:
726         XCPT_FRAME
727         ASM_CLAC
728         addq $-0x80,(%rsp)              /* Adjust vector to [-256,-1] range */
729         interrupt do_IRQ
730         /* 0(%rsp): old RSP */
731 ret_from_intr:
732         DISABLE_INTERRUPTS(CLBR_NONE)
733         TRACE_IRQS_OFF
734         decl PER_CPU_VAR(irq_count)
735
736         /* Restore saved previous stack */
737         popq %rsi
738         CFI_DEF_CFA rsi,SIZEOF_PTREGS-RBP /* reg/off reset after def_cfa_expr */
739         /* return code expects complete pt_regs - adjust rsp accordingly: */
740         leaq -RBP(%rsi),%rsp
741         CFI_DEF_CFA_REGISTER    rsp
742         CFI_ADJUST_CFA_OFFSET   RBP
743
744         testl $3,CS(%rsp)
745         je retint_kernel
746         /* Interrupt came from user space */
747
748         GET_THREAD_INFO(%rcx)
749         /*
750          * %rcx: thread info. Interrupts off.
751          */
752 retint_with_reschedule:
753         movl $_TIF_WORK_MASK,%edi
754 retint_check:
755         LOCKDEP_SYS_EXIT_IRQ
756         movl TI_flags(%rcx),%edx
757         andl %edi,%edx
758         CFI_REMEMBER_STATE
759         jnz  retint_careful
760
761 retint_swapgs:          /* return to user-space */
762         /*
763          * The iretq could re-enable interrupts:
764          */
765         DISABLE_INTERRUPTS(CLBR_ANY)
766         TRACE_IRQS_IRETQ
767
768         SWAPGS
769         jmp     restore_c_regs_and_iret
770
771 /* Returning to kernel space */
772 retint_kernel:
773 #ifdef CONFIG_PREEMPT
774         /* Interrupts are off */
775         /* Check if we need preemption */
776         bt      $9,EFLAGS(%rsp) /* interrupts were off? */
777         jnc     1f
778 0:      cmpl    $0,PER_CPU_VAR(__preempt_count)
779 #ifndef CONFIG_PREEMPT_LAZY
780         jnz     1f
781 #else
782         jz      do_preempt_schedule_irq
783
784         # atleast preempt count == 0 ?
785         cmpl $_PREEMPT_ENABLED,PER_CPU_VAR(__preempt_count)
786         jnz     1f
787
788         GET_THREAD_INFO(%rcx)
789         cmpl    $0, TI_preempt_lazy_count(%rcx)
790         jnz     1f
791
792         bt      $TIF_NEED_RESCHED_LAZY,TI_flags(%rcx)
793         jnc     1f
794 do_preempt_schedule_irq:
795 #endif
796         call    preempt_schedule_irq
797         jmp     0b
798 1:
799 #endif
800         /*
801          * The iretq could re-enable interrupts:
802          */
803         TRACE_IRQS_IRETQ
804
805 /*
806  * At this label, code paths which return to kernel and to user,
807  * which come from interrupts/exception and from syscalls, merge.
808  */
809 restore_c_regs_and_iret:
810         RESTORE_C_REGS
811         REMOVE_PT_GPREGS_FROM_STACK 8
812
813 irq_return:
814         INTERRUPT_RETURN
815
816 ENTRY(native_iret)
817         /*
818          * Are we returning to a stack segment from the LDT?  Note: in
819          * 64-bit mode SS:RSP on the exception stack is always valid.
820          */
821 #ifdef CONFIG_X86_ESPFIX64
822         testb $4,(SS-RIP)(%rsp)
823         jnz native_irq_return_ldt
824 #endif
825
826 .global native_irq_return_iret
827 native_irq_return_iret:
828         /*
829          * This may fault.  Non-paranoid faults on return to userspace are
830          * handled by fixup_bad_iret.  These include #SS, #GP, and #NP.
831          * Double-faults due to espfix64 are handled in do_double_fault.
832          * Other faults here are fatal.
833          */
834         iretq
835
836 #ifdef CONFIG_X86_ESPFIX64
837 native_irq_return_ldt:
838         pushq_cfi %rax
839         pushq_cfi %rdi
840         SWAPGS
841         movq PER_CPU_VAR(espfix_waddr),%rdi
842         movq %rax,(0*8)(%rdi)   /* RAX */
843         movq (2*8)(%rsp),%rax   /* RIP */
844         movq %rax,(1*8)(%rdi)
845         movq (3*8)(%rsp),%rax   /* CS */
846         movq %rax,(2*8)(%rdi)
847         movq (4*8)(%rsp),%rax   /* RFLAGS */
848         movq %rax,(3*8)(%rdi)
849         movq (6*8)(%rsp),%rax   /* SS */
850         movq %rax,(5*8)(%rdi)
851         movq (5*8)(%rsp),%rax   /* RSP */
852         movq %rax,(4*8)(%rdi)
853         andl $0xffff0000,%eax
854         popq_cfi %rdi
855         orq PER_CPU_VAR(espfix_stack),%rax
856         SWAPGS
857         movq %rax,%rsp
858         popq_cfi %rax
859         jmp native_irq_return_iret
860 #endif
861
862         /* edi: workmask, edx: work */
863 retint_careful:
864         CFI_RESTORE_STATE
865         testl $_TIF_NEED_RESCHED_MASK,%edx
866         jz   retint_signal
867         TRACE_IRQS_ON
868         ENABLE_INTERRUPTS(CLBR_NONE)
869         pushq_cfi %rdi
870         SCHEDULE_USER
871         popq_cfi %rdi
872         GET_THREAD_INFO(%rcx)
873         DISABLE_INTERRUPTS(CLBR_NONE)
874         TRACE_IRQS_OFF
875         jmp retint_check
876
877 retint_signal:
878         testl $_TIF_DO_NOTIFY_MASK,%edx
879         jz    retint_swapgs
880         TRACE_IRQS_ON
881         ENABLE_INTERRUPTS(CLBR_NONE)
882         SAVE_EXTRA_REGS
883         movq $-1,ORIG_RAX(%rsp)
884         xorl %esi,%esi          # oldset
885         movq %rsp,%rdi          # &pt_regs
886         call do_notify_resume
887         RESTORE_EXTRA_REGS
888         DISABLE_INTERRUPTS(CLBR_NONE)
889         TRACE_IRQS_OFF
890         GET_THREAD_INFO(%rcx)
891         jmp retint_with_reschedule
892
893         CFI_ENDPROC
894 END(common_interrupt)
895
896 /*
897  * APIC interrupts.
898  */
899 .macro apicinterrupt3 num sym do_sym
900 ENTRY(\sym)
901         INTR_FRAME
902         ASM_CLAC
903         pushq_cfi $~(\num)
904 .Lcommon_\sym:
905         interrupt \do_sym
906         jmp ret_from_intr
907         CFI_ENDPROC
908 END(\sym)
909 .endm
910
911 #ifdef CONFIG_TRACING
912 #define trace(sym) trace_##sym
913 #define smp_trace(sym) smp_trace_##sym
914
915 .macro trace_apicinterrupt num sym
916 apicinterrupt3 \num trace(\sym) smp_trace(\sym)
917 .endm
918 #else
919 .macro trace_apicinterrupt num sym do_sym
920 .endm
921 #endif
922
923 .macro apicinterrupt num sym do_sym
924 apicinterrupt3 \num \sym \do_sym
925 trace_apicinterrupt \num \sym
926 .endm
927
928 #ifdef CONFIG_SMP
929 apicinterrupt3 IRQ_MOVE_CLEANUP_VECTOR \
930         irq_move_cleanup_interrupt smp_irq_move_cleanup_interrupt
931 apicinterrupt3 REBOOT_VECTOR \
932         reboot_interrupt smp_reboot_interrupt
933 #endif
934
935 #ifdef CONFIG_X86_UV
936 apicinterrupt3 UV_BAU_MESSAGE \
937         uv_bau_message_intr1 uv_bau_message_interrupt
938 #endif
939 apicinterrupt LOCAL_TIMER_VECTOR \
940         apic_timer_interrupt smp_apic_timer_interrupt
941 apicinterrupt X86_PLATFORM_IPI_VECTOR \
942         x86_platform_ipi smp_x86_platform_ipi
943
944 #ifdef CONFIG_HAVE_KVM
945 apicinterrupt3 POSTED_INTR_VECTOR \
946         kvm_posted_intr_ipi smp_kvm_posted_intr_ipi
947 #endif
948
949 #ifdef CONFIG_X86_MCE_THRESHOLD
950 apicinterrupt THRESHOLD_APIC_VECTOR \
951         threshold_interrupt smp_threshold_interrupt
952 #endif
953
954 #ifdef CONFIG_X86_THERMAL_VECTOR
955 apicinterrupt THERMAL_APIC_VECTOR \
956         thermal_interrupt smp_thermal_interrupt
957 #endif
958
959 #ifdef CONFIG_SMP
960 apicinterrupt CALL_FUNCTION_SINGLE_VECTOR \
961         call_function_single_interrupt smp_call_function_single_interrupt
962 apicinterrupt CALL_FUNCTION_VECTOR \
963         call_function_interrupt smp_call_function_interrupt
964 apicinterrupt RESCHEDULE_VECTOR \
965         reschedule_interrupt smp_reschedule_interrupt
966 #endif
967
968 apicinterrupt ERROR_APIC_VECTOR \
969         error_interrupt smp_error_interrupt
970 apicinterrupt SPURIOUS_APIC_VECTOR \
971         spurious_interrupt smp_spurious_interrupt
972
973 #ifdef CONFIG_IRQ_WORK
974 apicinterrupt IRQ_WORK_VECTOR \
975         irq_work_interrupt smp_irq_work_interrupt
976 #endif
977
978 /*
979  * Exception entry points.
980  */
981 #define CPU_TSS_IST(x) PER_CPU_VAR(cpu_tss) + (TSS_ist + ((x) - 1) * 8)
982
983 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
984 ENTRY(\sym)
985         /* Sanity check */
986         .if \shift_ist != -1 && \paranoid == 0
987         .error "using shift_ist requires paranoid=1"
988         .endif
989
990         .if \has_error_code
991         XCPT_FRAME
992         .else
993         INTR_FRAME
994         .endif
995
996         ASM_CLAC
997         PARAVIRT_ADJUST_EXCEPTION_FRAME
998
999         .ifeq \has_error_code
1000         pushq_cfi $-1                   /* ORIG_RAX: no syscall to restart */
1001         .endif
1002
1003         ALLOC_PT_GPREGS_ON_STACK
1004
1005         .if \paranoid
1006         .if \paranoid == 1
1007         CFI_REMEMBER_STATE
1008         testl $3, CS(%rsp)              /* If coming from userspace, switch */
1009         jnz 1f                          /* stacks. */
1010         .endif
1011         call paranoid_entry
1012         .else
1013         call error_entry
1014         .endif
1015         /* returned flag: ebx=0: need swapgs on exit, ebx=1: don't need it */
1016
1017         DEFAULT_FRAME 0
1018
1019         .if \paranoid
1020         .if \shift_ist != -1
1021         TRACE_IRQS_OFF_DEBUG            /* reload IDT in case of recursion */
1022         .else
1023         TRACE_IRQS_OFF
1024         .endif
1025         .endif
1026
1027         movq %rsp,%rdi                  /* pt_regs pointer */
1028
1029         .if \has_error_code
1030         movq ORIG_RAX(%rsp),%rsi        /* get error code */
1031         movq $-1,ORIG_RAX(%rsp)         /* no syscall to restart */
1032         .else
1033         xorl %esi,%esi                  /* no error code */
1034         .endif
1035
1036         .if \shift_ist != -1
1037         subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
1038         .endif
1039
1040         call \do_sym
1041
1042         .if \shift_ist != -1
1043         addq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
1044         .endif
1045
1046         /* these procedures expect "no swapgs" flag in ebx */
1047         .if \paranoid
1048         jmp paranoid_exit
1049         .else
1050         jmp error_exit
1051         .endif
1052
1053         .if \paranoid == 1
1054         CFI_RESTORE_STATE
1055         /*
1056          * Paranoid entry from userspace.  Switch stacks and treat it
1057          * as a normal entry.  This means that paranoid handlers
1058          * run in real process context if user_mode(regs).
1059          */
1060 1:
1061         call error_entry
1062
1063         DEFAULT_FRAME 0
1064
1065         movq %rsp,%rdi                  /* pt_regs pointer */
1066         call sync_regs
1067         movq %rax,%rsp                  /* switch stack */
1068
1069         movq %rsp,%rdi                  /* pt_regs pointer */
1070
1071         .if \has_error_code
1072         movq ORIG_RAX(%rsp),%rsi        /* get error code */
1073         movq $-1,ORIG_RAX(%rsp)         /* no syscall to restart */
1074         .else
1075         xorl %esi,%esi                  /* no error code */
1076         .endif
1077
1078         call \do_sym
1079
1080         jmp error_exit                  /* %ebx: no swapgs flag */
1081         .endif
1082
1083         CFI_ENDPROC
1084 END(\sym)
1085 .endm
1086
1087 #ifdef CONFIG_TRACING
1088 .macro trace_idtentry sym do_sym has_error_code:req
1089 idtentry trace(\sym) trace(\do_sym) has_error_code=\has_error_code
1090 idtentry \sym \do_sym has_error_code=\has_error_code
1091 .endm
1092 #else
1093 .macro trace_idtentry sym do_sym has_error_code:req
1094 idtentry \sym \do_sym has_error_code=\has_error_code
1095 .endm
1096 #endif
1097
1098 idtentry divide_error do_divide_error has_error_code=0
1099 idtentry overflow do_overflow has_error_code=0
1100 idtentry bounds do_bounds has_error_code=0
1101 idtentry invalid_op do_invalid_op has_error_code=0
1102 idtentry device_not_available do_device_not_available has_error_code=0
1103 idtentry double_fault do_double_fault has_error_code=1 paranoid=2
1104 idtentry coprocessor_segment_overrun do_coprocessor_segment_overrun has_error_code=0
1105 idtentry invalid_TSS do_invalid_TSS has_error_code=1
1106 idtentry segment_not_present do_segment_not_present has_error_code=1
1107 idtentry spurious_interrupt_bug do_spurious_interrupt_bug has_error_code=0
1108 idtentry coprocessor_error do_coprocessor_error has_error_code=0
1109 idtentry alignment_check do_alignment_check has_error_code=1
1110 idtentry simd_coprocessor_error do_simd_coprocessor_error has_error_code=0
1111
1112
1113         /* Reload gs selector with exception handling */
1114         /* edi:  new selector */
1115 ENTRY(native_load_gs_index)
1116         CFI_STARTPROC
1117         pushfq_cfi
1118         DISABLE_INTERRUPTS(CLBR_ANY & ~CLBR_RDI)
1119         SWAPGS
1120 gs_change:
1121         movl %edi,%gs
1122 2:      mfence          /* workaround */
1123         SWAPGS
1124         popfq_cfi
1125         ret
1126         CFI_ENDPROC
1127 END(native_load_gs_index)
1128
1129         _ASM_EXTABLE(gs_change,bad_gs)
1130         .section .fixup,"ax"
1131         /* running with kernelgs */
1132 bad_gs:
1133         SWAPGS                  /* switch back to user gs */
1134         xorl %eax,%eax
1135         movl %eax,%gs
1136         jmp  2b
1137         .previous
1138
1139 #ifndef CONFIG_PREEMPT_RT_FULL
1140 /* Call softirq on interrupt stack. Interrupts are off. */
1141 ENTRY(do_softirq_own_stack)
1142         CFI_STARTPROC
1143         pushq_cfi %rbp
1144         CFI_REL_OFFSET rbp,0
1145         mov  %rsp,%rbp
1146         CFI_DEF_CFA_REGISTER rbp
1147         incl PER_CPU_VAR(irq_count)
1148         cmove PER_CPU_VAR(irq_stack_ptr),%rsp
1149         push  %rbp                      # backlink for old unwinder
1150         call __do_softirq
1151         leaveq
1152         CFI_RESTORE             rbp
1153         CFI_DEF_CFA_REGISTER    rsp
1154         CFI_ADJUST_CFA_OFFSET   -8
1155         decl PER_CPU_VAR(irq_count)
1156         ret
1157         CFI_ENDPROC
1158 END(do_softirq_own_stack)
1159 #endif
1160
1161 #ifdef CONFIG_XEN
1162 idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
1163
1164 /*
1165  * A note on the "critical region" in our callback handler.
1166  * We want to avoid stacking callback handlers due to events occurring
1167  * during handling of the last event. To do this, we keep events disabled
1168  * until we've done all processing. HOWEVER, we must enable events before
1169  * popping the stack frame (can't be done atomically) and so it would still
1170  * be possible to get enough handler activations to overflow the stack.
1171  * Although unlikely, bugs of that kind are hard to track down, so we'd
1172  * like to avoid the possibility.
1173  * So, on entry to the handler we detect whether we interrupted an
1174  * existing activation in its critical region -- if so, we pop the current
1175  * activation and restart the handler using the previous one.
1176  */
1177 ENTRY(xen_do_hypervisor_callback)   # do_hypervisor_callback(struct *pt_regs)
1178         CFI_STARTPROC
1179 /*
1180  * Since we don't modify %rdi, evtchn_do_upall(struct *pt_regs) will
1181  * see the correct pointer to the pt_regs
1182  */
1183         movq %rdi, %rsp            # we don't return, adjust the stack frame
1184         CFI_ENDPROC
1185         DEFAULT_FRAME
1186 11:     incl PER_CPU_VAR(irq_count)
1187         movq %rsp,%rbp
1188         CFI_DEF_CFA_REGISTER rbp
1189         cmovzq PER_CPU_VAR(irq_stack_ptr),%rsp
1190         pushq %rbp                      # backlink for old unwinder
1191         call xen_evtchn_do_upcall
1192         popq %rsp
1193         CFI_DEF_CFA_REGISTER rsp
1194         decl PER_CPU_VAR(irq_count)
1195 #ifndef CONFIG_PREEMPT
1196         call xen_maybe_preempt_hcall
1197 #endif
1198         jmp  error_exit
1199         CFI_ENDPROC
1200 END(xen_do_hypervisor_callback)
1201
1202 /*
1203  * Hypervisor uses this for application faults while it executes.
1204  * We get here for two reasons:
1205  *  1. Fault while reloading DS, ES, FS or GS
1206  *  2. Fault while executing IRET
1207  * Category 1 we do not need to fix up as Xen has already reloaded all segment
1208  * registers that could be reloaded and zeroed the others.
1209  * Category 2 we fix up by killing the current process. We cannot use the
1210  * normal Linux return path in this case because if we use the IRET hypercall
1211  * to pop the stack frame we end up in an infinite loop of failsafe callbacks.
1212  * We distinguish between categories by comparing each saved segment register
1213  * with its current contents: any discrepancy means we in category 1.
1214  */
1215 ENTRY(xen_failsafe_callback)
1216         INTR_FRAME 1 (6*8)
1217         /*CFI_REL_OFFSET gs,GS*/
1218         /*CFI_REL_OFFSET fs,FS*/
1219         /*CFI_REL_OFFSET es,ES*/
1220         /*CFI_REL_OFFSET ds,DS*/
1221         CFI_REL_OFFSET r11,8
1222         CFI_REL_OFFSET rcx,0
1223         movw %ds,%cx
1224         cmpw %cx,0x10(%rsp)
1225         CFI_REMEMBER_STATE
1226         jne 1f
1227         movw %es,%cx
1228         cmpw %cx,0x18(%rsp)
1229         jne 1f
1230         movw %fs,%cx
1231         cmpw %cx,0x20(%rsp)
1232         jne 1f
1233         movw %gs,%cx
1234         cmpw %cx,0x28(%rsp)
1235         jne 1f
1236         /* All segments match their saved values => Category 2 (Bad IRET). */
1237         movq (%rsp),%rcx
1238         CFI_RESTORE rcx
1239         movq 8(%rsp),%r11
1240         CFI_RESTORE r11
1241         addq $0x30,%rsp
1242         CFI_ADJUST_CFA_OFFSET -0x30
1243         pushq_cfi $0    /* RIP */
1244         pushq_cfi %r11
1245         pushq_cfi %rcx
1246         jmp general_protection
1247         CFI_RESTORE_STATE
1248 1:      /* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */
1249         movq (%rsp),%rcx
1250         CFI_RESTORE rcx
1251         movq 8(%rsp),%r11
1252         CFI_RESTORE r11
1253         addq $0x30,%rsp
1254         CFI_ADJUST_CFA_OFFSET -0x30
1255         pushq_cfi $-1 /* orig_ax = -1 => not a system call */
1256         ALLOC_PT_GPREGS_ON_STACK
1257         SAVE_C_REGS
1258         SAVE_EXTRA_REGS
1259         jmp error_exit
1260         CFI_ENDPROC
1261 END(xen_failsafe_callback)
1262
1263 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
1264         xen_hvm_callback_vector xen_evtchn_do_upcall
1265
1266 #endif /* CONFIG_XEN */
1267
1268 #if IS_ENABLED(CONFIG_HYPERV)
1269 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
1270         hyperv_callback_vector hyperv_vector_handler
1271 #endif /* CONFIG_HYPERV */
1272
1273 idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
1274 idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
1275 idtentry stack_segment do_stack_segment has_error_code=1
1276 #ifdef CONFIG_XEN
1277 idtentry xen_debug do_debug has_error_code=0
1278 idtentry xen_int3 do_int3 has_error_code=0
1279 idtentry xen_stack_segment do_stack_segment has_error_code=1
1280 #endif
1281 idtentry general_protection do_general_protection has_error_code=1
1282 trace_idtentry page_fault do_page_fault has_error_code=1
1283 #ifdef CONFIG_KVM_GUEST
1284 idtentry async_page_fault do_async_page_fault has_error_code=1
1285 #endif
1286 #ifdef CONFIG_X86_MCE
1287 idtentry machine_check has_error_code=0 paranoid=1 do_sym=*machine_check_vector(%rip)
1288 #endif
1289
1290 /*
1291  * Save all registers in pt_regs, and switch gs if needed.
1292  * Use slow, but surefire "are we in kernel?" check.
1293  * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
1294  */
1295 ENTRY(paranoid_entry)
1296         XCPT_FRAME 1 15*8
1297         cld
1298         SAVE_C_REGS 8
1299         SAVE_EXTRA_REGS 8
1300         movl $1,%ebx
1301         movl $MSR_GS_BASE,%ecx
1302         rdmsr
1303         testl %edx,%edx
1304         js 1f   /* negative -> in kernel */
1305         SWAPGS
1306         xorl %ebx,%ebx
1307 1:      ret
1308         CFI_ENDPROC
1309 END(paranoid_entry)
1310
1311 /*
1312  * "Paranoid" exit path from exception stack.  This is invoked
1313  * only on return from non-NMI IST interrupts that came
1314  * from kernel space.
1315  *
1316  * We may be returning to very strange contexts (e.g. very early
1317  * in syscall entry), so checking for preemption here would
1318  * be complicated.  Fortunately, we there's no good reason
1319  * to try to handle preemption here.
1320  */
1321 /* On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it) */
1322 ENTRY(paranoid_exit)
1323         DEFAULT_FRAME
1324         DISABLE_INTERRUPTS(CLBR_NONE)
1325         TRACE_IRQS_OFF_DEBUG
1326         testl %ebx,%ebx                         /* swapgs needed? */
1327         jnz paranoid_exit_no_swapgs
1328         TRACE_IRQS_IRETQ
1329         SWAPGS_UNSAFE_STACK
1330         jmp paranoid_exit_restore
1331 paranoid_exit_no_swapgs:
1332         TRACE_IRQS_IRETQ_DEBUG
1333 paranoid_exit_restore:
1334         RESTORE_EXTRA_REGS
1335         RESTORE_C_REGS
1336         REMOVE_PT_GPREGS_FROM_STACK 8
1337         INTERRUPT_RETURN
1338         CFI_ENDPROC
1339 END(paranoid_exit)
1340
1341 /*
1342  * Save all registers in pt_regs, and switch gs if needed.
1343  * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
1344  */
1345 ENTRY(error_entry)
1346         XCPT_FRAME 1 15*8
1347         cld
1348         SAVE_C_REGS 8
1349         SAVE_EXTRA_REGS 8
1350         xorl %ebx,%ebx
1351         testl $3,CS+8(%rsp)
1352         je error_kernelspace
1353 error_swapgs:
1354         SWAPGS
1355 error_sti:
1356         TRACE_IRQS_OFF
1357         ret
1358
1359         /*
1360          * There are two places in the kernel that can potentially fault with
1361          * usergs. Handle them here.  B stepping K8s sometimes report a
1362          * truncated RIP for IRET exceptions returning to compat mode. Check
1363          * for these here too.
1364          */
1365 error_kernelspace:
1366         CFI_REL_OFFSET rcx, RCX+8
1367         incl %ebx
1368         leaq native_irq_return_iret(%rip),%rcx
1369         cmpq %rcx,RIP+8(%rsp)
1370         je error_bad_iret
1371         movl %ecx,%eax  /* zero extend */
1372         cmpq %rax,RIP+8(%rsp)
1373         je bstep_iret
1374         cmpq $gs_change,RIP+8(%rsp)
1375         je error_swapgs
1376         jmp error_sti
1377
1378 bstep_iret:
1379         /* Fix truncated RIP */
1380         movq %rcx,RIP+8(%rsp)
1381         /* fall through */
1382
1383 error_bad_iret:
1384         SWAPGS
1385         mov %rsp,%rdi
1386         call fixup_bad_iret
1387         mov %rax,%rsp
1388         decl %ebx       /* Return to usergs */
1389         jmp error_sti
1390         CFI_ENDPROC
1391 END(error_entry)
1392
1393
1394 /* On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it) */
1395 ENTRY(error_exit)
1396         DEFAULT_FRAME
1397         movl %ebx,%eax
1398         RESTORE_EXTRA_REGS
1399         DISABLE_INTERRUPTS(CLBR_NONE)
1400         TRACE_IRQS_OFF
1401         GET_THREAD_INFO(%rcx)
1402         testl %eax,%eax
1403         jne retint_kernel
1404         LOCKDEP_SYS_EXIT_IRQ
1405         movl TI_flags(%rcx),%edx
1406         movl $_TIF_WORK_MASK,%edi
1407         andl %edi,%edx
1408         jnz retint_careful
1409         jmp retint_swapgs
1410         CFI_ENDPROC
1411 END(error_exit)
1412
1413 /* Runs on exception stack */
1414 ENTRY(nmi)
1415         INTR_FRAME
1416         PARAVIRT_ADJUST_EXCEPTION_FRAME
1417         /*
1418          * We allow breakpoints in NMIs. If a breakpoint occurs, then
1419          * the iretq it performs will take us out of NMI context.
1420          * This means that we can have nested NMIs where the next
1421          * NMI is using the top of the stack of the previous NMI. We
1422          * can't let it execute because the nested NMI will corrupt the
1423          * stack of the previous NMI. NMI handlers are not re-entrant
1424          * anyway.
1425          *
1426          * To handle this case we do the following:
1427          *  Check the a special location on the stack that contains
1428          *  a variable that is set when NMIs are executing.
1429          *  The interrupted task's stack is also checked to see if it
1430          *  is an NMI stack.
1431          *  If the variable is not set and the stack is not the NMI
1432          *  stack then:
1433          *    o Set the special variable on the stack
1434          *    o Copy the interrupt frame into a "saved" location on the stack
1435          *    o Copy the interrupt frame into a "copy" location on the stack
1436          *    o Continue processing the NMI
1437          *  If the variable is set or the previous stack is the NMI stack:
1438          *    o Modify the "copy" location to jump to the repeate_nmi
1439          *    o return back to the first NMI
1440          *
1441          * Now on exit of the first NMI, we first clear the stack variable
1442          * The NMI stack will tell any nested NMIs at that point that it is
1443          * nested. Then we pop the stack normally with iret, and if there was
1444          * a nested NMI that updated the copy interrupt stack frame, a
1445          * jump will be made to the repeat_nmi code that will handle the second
1446          * NMI.
1447          */
1448
1449         /* Use %rdx as our temp variable throughout */
1450         pushq_cfi %rdx
1451         CFI_REL_OFFSET rdx, 0
1452
1453         /*
1454          * If %cs was not the kernel segment, then the NMI triggered in user
1455          * space, which means it is definitely not nested.
1456          */
1457         cmpl $__KERNEL_CS, 16(%rsp)
1458         jne first_nmi
1459
1460         /*
1461          * Check the special variable on the stack to see if NMIs are
1462          * executing.
1463          */
1464         cmpl $1, -8(%rsp)
1465         je nested_nmi
1466
1467         /*
1468          * Now test if the previous stack was an NMI stack.
1469          * We need the double check. We check the NMI stack to satisfy the
1470          * race when the first NMI clears the variable before returning.
1471          * We check the variable because the first NMI could be in a
1472          * breakpoint routine using a breakpoint stack.
1473          */
1474         lea     6*8(%rsp), %rdx
1475         /* Compare the NMI stack (rdx) with the stack we came from (4*8(%rsp)) */
1476         cmpq    %rdx, 4*8(%rsp)
1477         /* If the stack pointer is above the NMI stack, this is a normal NMI */
1478         ja      first_nmi
1479         subq    $EXCEPTION_STKSZ, %rdx
1480         cmpq    %rdx, 4*8(%rsp)
1481         /* If it is below the NMI stack, it is a normal NMI */
1482         jb      first_nmi
1483         /* Ah, it is within the NMI stack, treat it as nested */
1484
1485         CFI_REMEMBER_STATE
1486
1487 nested_nmi:
1488         /*
1489          * Do nothing if we interrupted the fixup in repeat_nmi.
1490          * It's about to repeat the NMI handler, so we are fine
1491          * with ignoring this one.
1492          */
1493         movq $repeat_nmi, %rdx
1494         cmpq 8(%rsp), %rdx
1495         ja 1f
1496         movq $end_repeat_nmi, %rdx
1497         cmpq 8(%rsp), %rdx
1498         ja nested_nmi_out
1499
1500 1:
1501         /* Set up the interrupted NMIs stack to jump to repeat_nmi */
1502         leaq -1*8(%rsp), %rdx
1503         movq %rdx, %rsp
1504         CFI_ADJUST_CFA_OFFSET 1*8
1505         leaq -10*8(%rsp), %rdx
1506         pushq_cfi $__KERNEL_DS
1507         pushq_cfi %rdx
1508         pushfq_cfi
1509         pushq_cfi $__KERNEL_CS
1510         pushq_cfi $repeat_nmi
1511
1512         /* Put stack back */
1513         addq $(6*8), %rsp
1514         CFI_ADJUST_CFA_OFFSET -6*8
1515
1516 nested_nmi_out:
1517         popq_cfi %rdx
1518         CFI_RESTORE rdx
1519
1520         /* No need to check faults here */
1521         INTERRUPT_RETURN
1522
1523         CFI_RESTORE_STATE
1524 first_nmi:
1525         /*
1526          * Because nested NMIs will use the pushed location that we
1527          * stored in rdx, we must keep that space available.
1528          * Here's what our stack frame will look like:
1529          * +-------------------------+
1530          * | original SS             |
1531          * | original Return RSP     |
1532          * | original RFLAGS         |
1533          * | original CS             |
1534          * | original RIP            |
1535          * +-------------------------+
1536          * | temp storage for rdx    |
1537          * +-------------------------+
1538          * | NMI executing variable  |
1539          * +-------------------------+
1540          * | copied SS               |
1541          * | copied Return RSP       |
1542          * | copied RFLAGS           |
1543          * | copied CS               |
1544          * | copied RIP              |
1545          * +-------------------------+
1546          * | Saved SS                |
1547          * | Saved Return RSP        |
1548          * | Saved RFLAGS            |
1549          * | Saved CS                |
1550          * | Saved RIP               |
1551          * +-------------------------+
1552          * | pt_regs                 |
1553          * +-------------------------+
1554          *
1555          * The saved stack frame is used to fix up the copied stack frame
1556          * that a nested NMI may change to make the interrupted NMI iret jump
1557          * to the repeat_nmi. The original stack frame and the temp storage
1558          * is also used by nested NMIs and can not be trusted on exit.
1559          */
1560         /* Do not pop rdx, nested NMIs will corrupt that part of the stack */
1561         movq (%rsp), %rdx
1562         CFI_RESTORE rdx
1563
1564         /* Set the NMI executing variable on the stack. */
1565         pushq_cfi $1
1566
1567         /*
1568          * Leave room for the "copied" frame
1569          */
1570         subq $(5*8), %rsp
1571         CFI_ADJUST_CFA_OFFSET 5*8
1572
1573         /* Copy the stack frame to the Saved frame */
1574         .rept 5
1575         pushq_cfi 11*8(%rsp)
1576         .endr
1577         CFI_DEF_CFA_OFFSET 5*8
1578
1579         /* Everything up to here is safe from nested NMIs */
1580
1581         /*
1582          * If there was a nested NMI, the first NMI's iret will return
1583          * here. But NMIs are still enabled and we can take another
1584          * nested NMI. The nested NMI checks the interrupted RIP to see
1585          * if it is between repeat_nmi and end_repeat_nmi, and if so
1586          * it will just return, as we are about to repeat an NMI anyway.
1587          * This makes it safe to copy to the stack frame that a nested
1588          * NMI will update.
1589          */
1590 repeat_nmi:
1591         /*
1592          * Update the stack variable to say we are still in NMI (the update
1593          * is benign for the non-repeat case, where 1 was pushed just above
1594          * to this very stack slot).
1595          */
1596         movq $1, 10*8(%rsp)
1597
1598         /* Make another copy, this one may be modified by nested NMIs */
1599         addq $(10*8), %rsp
1600         CFI_ADJUST_CFA_OFFSET -10*8
1601         .rept 5
1602         pushq_cfi -6*8(%rsp)
1603         .endr
1604         subq $(5*8), %rsp
1605         CFI_DEF_CFA_OFFSET 5*8
1606 end_repeat_nmi:
1607
1608         /*
1609          * Everything below this point can be preempted by a nested
1610          * NMI if the first NMI took an exception and reset our iret stack
1611          * so that we repeat another NMI.
1612          */
1613         pushq_cfi $-1           /* ORIG_RAX: no syscall to restart */
1614         ALLOC_PT_GPREGS_ON_STACK
1615
1616         /*
1617          * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
1618          * as we should not be calling schedule in NMI context.
1619          * Even with normal interrupts enabled. An NMI should not be
1620          * setting NEED_RESCHED or anything that normal interrupts and
1621          * exceptions might do.
1622          */
1623         call paranoid_entry
1624         DEFAULT_FRAME 0
1625
1626         /*
1627          * Save off the CR2 register. If we take a page fault in the NMI then
1628          * it could corrupt the CR2 value. If the NMI preempts a page fault
1629          * handler before it was able to read the CR2 register, and then the
1630          * NMI itself takes a page fault, the page fault that was preempted
1631          * will read the information from the NMI page fault and not the
1632          * origin fault. Save it off and restore it if it changes.
1633          * Use the r12 callee-saved register.
1634          */
1635         movq %cr2, %r12
1636
1637         /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
1638         movq %rsp,%rdi
1639         movq $-1,%rsi
1640         call do_nmi
1641
1642         /* Did the NMI take a page fault? Restore cr2 if it did */
1643         movq %cr2, %rcx
1644         cmpq %rcx, %r12
1645         je 1f
1646         movq %r12, %cr2
1647 1:
1648         
1649         testl %ebx,%ebx                         /* swapgs needed? */
1650         jnz nmi_restore
1651 nmi_swapgs:
1652         SWAPGS_UNSAFE_STACK
1653 nmi_restore:
1654         RESTORE_EXTRA_REGS
1655         RESTORE_C_REGS
1656         /* Pop the extra iret frame at once */
1657         REMOVE_PT_GPREGS_FROM_STACK 6*8
1658
1659         /* Clear the NMI executing stack variable */
1660         movq $0, 5*8(%rsp)
1661         jmp irq_return
1662         CFI_ENDPROC
1663 END(nmi)
1664
1665 ENTRY(ignore_sysret)
1666         CFI_STARTPROC
1667         mov $-ENOSYS,%eax
1668         sysret
1669         CFI_ENDPROC
1670 END(ignore_sysret)
1671