Kernel bump from 4.1.3-rt to 4.1.7-rt.
[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         INTERRUPT_RETURN
813
814 ENTRY(native_iret)
815         /*
816          * Are we returning to a stack segment from the LDT?  Note: in
817          * 64-bit mode SS:RSP on the exception stack is always valid.
818          */
819 #ifdef CONFIG_X86_ESPFIX64
820         testb $4,(SS-RIP)(%rsp)
821         jnz native_irq_return_ldt
822 #endif
823
824 .global native_irq_return_iret
825 native_irq_return_iret:
826         /*
827          * This may fault.  Non-paranoid faults on return to userspace are
828          * handled by fixup_bad_iret.  These include #SS, #GP, and #NP.
829          * Double-faults due to espfix64 are handled in do_double_fault.
830          * Other faults here are fatal.
831          */
832         iretq
833
834 #ifdef CONFIG_X86_ESPFIX64
835 native_irq_return_ldt:
836         pushq_cfi %rax
837         pushq_cfi %rdi
838         SWAPGS
839         movq PER_CPU_VAR(espfix_waddr),%rdi
840         movq %rax,(0*8)(%rdi)   /* RAX */
841         movq (2*8)(%rsp),%rax   /* RIP */
842         movq %rax,(1*8)(%rdi)
843         movq (3*8)(%rsp),%rax   /* CS */
844         movq %rax,(2*8)(%rdi)
845         movq (4*8)(%rsp),%rax   /* RFLAGS */
846         movq %rax,(3*8)(%rdi)
847         movq (6*8)(%rsp),%rax   /* SS */
848         movq %rax,(5*8)(%rdi)
849         movq (5*8)(%rsp),%rax   /* RSP */
850         movq %rax,(4*8)(%rdi)
851         andl $0xffff0000,%eax
852         popq_cfi %rdi
853         orq PER_CPU_VAR(espfix_stack),%rax
854         SWAPGS
855         movq %rax,%rsp
856         popq_cfi %rax
857         jmp native_irq_return_iret
858 #endif
859
860         /* edi: workmask, edx: work */
861 retint_careful:
862         CFI_RESTORE_STATE
863         testl $_TIF_NEED_RESCHED_MASK,%edx
864         jz   retint_signal
865         TRACE_IRQS_ON
866         ENABLE_INTERRUPTS(CLBR_NONE)
867         pushq_cfi %rdi
868         SCHEDULE_USER
869         popq_cfi %rdi
870         GET_THREAD_INFO(%rcx)
871         DISABLE_INTERRUPTS(CLBR_NONE)
872         TRACE_IRQS_OFF
873         jmp retint_check
874
875 retint_signal:
876         testl $_TIF_DO_NOTIFY_MASK,%edx
877         jz    retint_swapgs
878         TRACE_IRQS_ON
879         ENABLE_INTERRUPTS(CLBR_NONE)
880         SAVE_EXTRA_REGS
881         movq $-1,ORIG_RAX(%rsp)
882         xorl %esi,%esi          # oldset
883         movq %rsp,%rdi          # &pt_regs
884         call do_notify_resume
885         RESTORE_EXTRA_REGS
886         DISABLE_INTERRUPTS(CLBR_NONE)
887         TRACE_IRQS_OFF
888         GET_THREAD_INFO(%rcx)
889         jmp retint_with_reschedule
890
891         CFI_ENDPROC
892 END(common_interrupt)
893
894 /*
895  * APIC interrupts.
896  */
897 .macro apicinterrupt3 num sym do_sym
898 ENTRY(\sym)
899         INTR_FRAME
900         ASM_CLAC
901         pushq_cfi $~(\num)
902 .Lcommon_\sym:
903         interrupt \do_sym
904         jmp ret_from_intr
905         CFI_ENDPROC
906 END(\sym)
907 .endm
908
909 #ifdef CONFIG_TRACING
910 #define trace(sym) trace_##sym
911 #define smp_trace(sym) smp_trace_##sym
912
913 .macro trace_apicinterrupt num sym
914 apicinterrupt3 \num trace(\sym) smp_trace(\sym)
915 .endm
916 #else
917 .macro trace_apicinterrupt num sym do_sym
918 .endm
919 #endif
920
921 .macro apicinterrupt num sym do_sym
922 apicinterrupt3 \num \sym \do_sym
923 trace_apicinterrupt \num \sym
924 .endm
925
926 #ifdef CONFIG_SMP
927 apicinterrupt3 IRQ_MOVE_CLEANUP_VECTOR \
928         irq_move_cleanup_interrupt smp_irq_move_cleanup_interrupt
929 apicinterrupt3 REBOOT_VECTOR \
930         reboot_interrupt smp_reboot_interrupt
931 #endif
932
933 #ifdef CONFIG_X86_UV
934 apicinterrupt3 UV_BAU_MESSAGE \
935         uv_bau_message_intr1 uv_bau_message_interrupt
936 #endif
937 apicinterrupt LOCAL_TIMER_VECTOR \
938         apic_timer_interrupt smp_apic_timer_interrupt
939 apicinterrupt X86_PLATFORM_IPI_VECTOR \
940         x86_platform_ipi smp_x86_platform_ipi
941
942 #ifdef CONFIG_HAVE_KVM
943 apicinterrupt3 POSTED_INTR_VECTOR \
944         kvm_posted_intr_ipi smp_kvm_posted_intr_ipi
945 #endif
946
947 #ifdef CONFIG_X86_MCE_THRESHOLD
948 apicinterrupt THRESHOLD_APIC_VECTOR \
949         threshold_interrupt smp_threshold_interrupt
950 #endif
951
952 #ifdef CONFIG_X86_THERMAL_VECTOR
953 apicinterrupt THERMAL_APIC_VECTOR \
954         thermal_interrupt smp_thermal_interrupt
955 #endif
956
957 #ifdef CONFIG_SMP
958 apicinterrupt CALL_FUNCTION_SINGLE_VECTOR \
959         call_function_single_interrupt smp_call_function_single_interrupt
960 apicinterrupt CALL_FUNCTION_VECTOR \
961         call_function_interrupt smp_call_function_interrupt
962 apicinterrupt RESCHEDULE_VECTOR \
963         reschedule_interrupt smp_reschedule_interrupt
964 #endif
965
966 apicinterrupt ERROR_APIC_VECTOR \
967         error_interrupt smp_error_interrupt
968 apicinterrupt SPURIOUS_APIC_VECTOR \
969         spurious_interrupt smp_spurious_interrupt
970
971 #ifdef CONFIG_IRQ_WORK
972 apicinterrupt IRQ_WORK_VECTOR \
973         irq_work_interrupt smp_irq_work_interrupt
974 #endif
975
976 /*
977  * Exception entry points.
978  */
979 #define CPU_TSS_IST(x) PER_CPU_VAR(cpu_tss) + (TSS_ist + ((x) - 1) * 8)
980
981 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
982 ENTRY(\sym)
983         /* Sanity check */
984         .if \shift_ist != -1 && \paranoid == 0
985         .error "using shift_ist requires paranoid=1"
986         .endif
987
988         .if \has_error_code
989         XCPT_FRAME
990         .else
991         INTR_FRAME
992         .endif
993
994         ASM_CLAC
995         PARAVIRT_ADJUST_EXCEPTION_FRAME
996
997         .ifeq \has_error_code
998         pushq_cfi $-1                   /* ORIG_RAX: no syscall to restart */
999         .endif
1000
1001         ALLOC_PT_GPREGS_ON_STACK
1002
1003         .if \paranoid
1004         .if \paranoid == 1
1005         CFI_REMEMBER_STATE
1006         testl $3, CS(%rsp)              /* If coming from userspace, switch */
1007         jnz 1f                          /* stacks. */
1008         .endif
1009         call paranoid_entry
1010         .else
1011         call error_entry
1012         .endif
1013         /* returned flag: ebx=0: need swapgs on exit, ebx=1: don't need it */
1014
1015         DEFAULT_FRAME 0
1016
1017         .if \paranoid
1018         .if \shift_ist != -1
1019         TRACE_IRQS_OFF_DEBUG            /* reload IDT in case of recursion */
1020         .else
1021         TRACE_IRQS_OFF
1022         .endif
1023         .endif
1024
1025         movq %rsp,%rdi                  /* pt_regs pointer */
1026
1027         .if \has_error_code
1028         movq ORIG_RAX(%rsp),%rsi        /* get error code */
1029         movq $-1,ORIG_RAX(%rsp)         /* no syscall to restart */
1030         .else
1031         xorl %esi,%esi                  /* no error code */
1032         .endif
1033
1034         .if \shift_ist != -1
1035         subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
1036         .endif
1037
1038         call \do_sym
1039
1040         .if \shift_ist != -1
1041         addq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
1042         .endif
1043
1044         /* these procedures expect "no swapgs" flag in ebx */
1045         .if \paranoid
1046         jmp paranoid_exit
1047         .else
1048         jmp error_exit
1049         .endif
1050
1051         .if \paranoid == 1
1052         CFI_RESTORE_STATE
1053         /*
1054          * Paranoid entry from userspace.  Switch stacks and treat it
1055          * as a normal entry.  This means that paranoid handlers
1056          * run in real process context if user_mode(regs).
1057          */
1058 1:
1059         call error_entry
1060
1061         DEFAULT_FRAME 0
1062
1063         movq %rsp,%rdi                  /* pt_regs pointer */
1064         call sync_regs
1065         movq %rax,%rsp                  /* switch stack */
1066
1067         movq %rsp,%rdi                  /* pt_regs pointer */
1068
1069         .if \has_error_code
1070         movq ORIG_RAX(%rsp),%rsi        /* get error code */
1071         movq $-1,ORIG_RAX(%rsp)         /* no syscall to restart */
1072         .else
1073         xorl %esi,%esi                  /* no error code */
1074         .endif
1075
1076         call \do_sym
1077
1078         jmp error_exit                  /* %ebx: no swapgs flag */
1079         .endif
1080
1081         CFI_ENDPROC
1082 END(\sym)
1083 .endm
1084
1085 #ifdef CONFIG_TRACING
1086 .macro trace_idtentry sym do_sym has_error_code:req
1087 idtentry trace(\sym) trace(\do_sym) has_error_code=\has_error_code
1088 idtentry \sym \do_sym has_error_code=\has_error_code
1089 .endm
1090 #else
1091 .macro trace_idtentry sym do_sym has_error_code:req
1092 idtentry \sym \do_sym has_error_code=\has_error_code
1093 .endm
1094 #endif
1095
1096 idtentry divide_error do_divide_error has_error_code=0
1097 idtentry overflow do_overflow has_error_code=0
1098 idtentry bounds do_bounds has_error_code=0
1099 idtentry invalid_op do_invalid_op has_error_code=0
1100 idtentry device_not_available do_device_not_available has_error_code=0
1101 idtentry double_fault do_double_fault has_error_code=1 paranoid=2
1102 idtentry coprocessor_segment_overrun do_coprocessor_segment_overrun has_error_code=0
1103 idtentry invalid_TSS do_invalid_TSS has_error_code=1
1104 idtentry segment_not_present do_segment_not_present has_error_code=1
1105 idtentry spurious_interrupt_bug do_spurious_interrupt_bug has_error_code=0
1106 idtentry coprocessor_error do_coprocessor_error has_error_code=0
1107 idtentry alignment_check do_alignment_check has_error_code=1
1108 idtentry simd_coprocessor_error do_simd_coprocessor_error has_error_code=0
1109
1110
1111         /* Reload gs selector with exception handling */
1112         /* edi:  new selector */
1113 ENTRY(native_load_gs_index)
1114         CFI_STARTPROC
1115         pushfq_cfi
1116         DISABLE_INTERRUPTS(CLBR_ANY & ~CLBR_RDI)
1117         SWAPGS
1118 gs_change:
1119         movl %edi,%gs
1120 2:      mfence          /* workaround */
1121         SWAPGS
1122         popfq_cfi
1123         ret
1124         CFI_ENDPROC
1125 END(native_load_gs_index)
1126
1127         _ASM_EXTABLE(gs_change,bad_gs)
1128         .section .fixup,"ax"
1129         /* running with kernelgs */
1130 bad_gs:
1131         SWAPGS                  /* switch back to user gs */
1132         xorl %eax,%eax
1133         movl %eax,%gs
1134         jmp  2b
1135         .previous
1136
1137 #ifndef CONFIG_PREEMPT_RT_FULL
1138 /* Call softirq on interrupt stack. Interrupts are off. */
1139 ENTRY(do_softirq_own_stack)
1140         CFI_STARTPROC
1141         pushq_cfi %rbp
1142         CFI_REL_OFFSET rbp,0
1143         mov  %rsp,%rbp
1144         CFI_DEF_CFA_REGISTER rbp
1145         incl PER_CPU_VAR(irq_count)
1146         cmove PER_CPU_VAR(irq_stack_ptr),%rsp
1147         push  %rbp                      # backlink for old unwinder
1148         call __do_softirq
1149         leaveq
1150         CFI_RESTORE             rbp
1151         CFI_DEF_CFA_REGISTER    rsp
1152         CFI_ADJUST_CFA_OFFSET   -8
1153         decl PER_CPU_VAR(irq_count)
1154         ret
1155         CFI_ENDPROC
1156 END(do_softirq_own_stack)
1157 #endif
1158
1159 #ifdef CONFIG_XEN
1160 idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
1161
1162 /*
1163  * A note on the "critical region" in our callback handler.
1164  * We want to avoid stacking callback handlers due to events occurring
1165  * during handling of the last event. To do this, we keep events disabled
1166  * until we've done all processing. HOWEVER, we must enable events before
1167  * popping the stack frame (can't be done atomically) and so it would still
1168  * be possible to get enough handler activations to overflow the stack.
1169  * Although unlikely, bugs of that kind are hard to track down, so we'd
1170  * like to avoid the possibility.
1171  * So, on entry to the handler we detect whether we interrupted an
1172  * existing activation in its critical region -- if so, we pop the current
1173  * activation and restart the handler using the previous one.
1174  */
1175 ENTRY(xen_do_hypervisor_callback)   # do_hypervisor_callback(struct *pt_regs)
1176         CFI_STARTPROC
1177 /*
1178  * Since we don't modify %rdi, evtchn_do_upall(struct *pt_regs) will
1179  * see the correct pointer to the pt_regs
1180  */
1181         movq %rdi, %rsp            # we don't return, adjust the stack frame
1182         CFI_ENDPROC
1183         DEFAULT_FRAME
1184 11:     incl PER_CPU_VAR(irq_count)
1185         movq %rsp,%rbp
1186         CFI_DEF_CFA_REGISTER rbp
1187         cmovzq PER_CPU_VAR(irq_stack_ptr),%rsp
1188         pushq %rbp                      # backlink for old unwinder
1189         call xen_evtchn_do_upcall
1190         popq %rsp
1191         CFI_DEF_CFA_REGISTER rsp
1192         decl PER_CPU_VAR(irq_count)
1193 #ifndef CONFIG_PREEMPT
1194         call xen_maybe_preempt_hcall
1195 #endif
1196         jmp  error_exit
1197         CFI_ENDPROC
1198 END(xen_do_hypervisor_callback)
1199
1200 /*
1201  * Hypervisor uses this for application faults while it executes.
1202  * We get here for two reasons:
1203  *  1. Fault while reloading DS, ES, FS or GS
1204  *  2. Fault while executing IRET
1205  * Category 1 we do not need to fix up as Xen has already reloaded all segment
1206  * registers that could be reloaded and zeroed the others.
1207  * Category 2 we fix up by killing the current process. We cannot use the
1208  * normal Linux return path in this case because if we use the IRET hypercall
1209  * to pop the stack frame we end up in an infinite loop of failsafe callbacks.
1210  * We distinguish between categories by comparing each saved segment register
1211  * with its current contents: any discrepancy means we in category 1.
1212  */
1213 ENTRY(xen_failsafe_callback)
1214         INTR_FRAME 1 (6*8)
1215         /*CFI_REL_OFFSET gs,GS*/
1216         /*CFI_REL_OFFSET fs,FS*/
1217         /*CFI_REL_OFFSET es,ES*/
1218         /*CFI_REL_OFFSET ds,DS*/
1219         CFI_REL_OFFSET r11,8
1220         CFI_REL_OFFSET rcx,0
1221         movw %ds,%cx
1222         cmpw %cx,0x10(%rsp)
1223         CFI_REMEMBER_STATE
1224         jne 1f
1225         movw %es,%cx
1226         cmpw %cx,0x18(%rsp)
1227         jne 1f
1228         movw %fs,%cx
1229         cmpw %cx,0x20(%rsp)
1230         jne 1f
1231         movw %gs,%cx
1232         cmpw %cx,0x28(%rsp)
1233         jne 1f
1234         /* All segments match their saved values => Category 2 (Bad IRET). */
1235         movq (%rsp),%rcx
1236         CFI_RESTORE rcx
1237         movq 8(%rsp),%r11
1238         CFI_RESTORE r11
1239         addq $0x30,%rsp
1240         CFI_ADJUST_CFA_OFFSET -0x30
1241         pushq_cfi $0    /* RIP */
1242         pushq_cfi %r11
1243         pushq_cfi %rcx
1244         jmp general_protection
1245         CFI_RESTORE_STATE
1246 1:      /* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */
1247         movq (%rsp),%rcx
1248         CFI_RESTORE rcx
1249         movq 8(%rsp),%r11
1250         CFI_RESTORE r11
1251         addq $0x30,%rsp
1252         CFI_ADJUST_CFA_OFFSET -0x30
1253         pushq_cfi $-1 /* orig_ax = -1 => not a system call */
1254         ALLOC_PT_GPREGS_ON_STACK
1255         SAVE_C_REGS
1256         SAVE_EXTRA_REGS
1257         jmp error_exit
1258         CFI_ENDPROC
1259 END(xen_failsafe_callback)
1260
1261 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
1262         xen_hvm_callback_vector xen_evtchn_do_upcall
1263
1264 #endif /* CONFIG_XEN */
1265
1266 #if IS_ENABLED(CONFIG_HYPERV)
1267 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
1268         hyperv_callback_vector hyperv_vector_handler
1269 #endif /* CONFIG_HYPERV */
1270
1271 idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
1272 idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
1273 idtentry stack_segment do_stack_segment has_error_code=1
1274 #ifdef CONFIG_XEN
1275 idtentry xen_debug do_debug has_error_code=0
1276 idtentry xen_int3 do_int3 has_error_code=0
1277 idtentry xen_stack_segment do_stack_segment has_error_code=1
1278 #endif
1279 idtentry general_protection do_general_protection has_error_code=1
1280 trace_idtentry page_fault do_page_fault has_error_code=1
1281 #ifdef CONFIG_KVM_GUEST
1282 idtentry async_page_fault do_async_page_fault has_error_code=1
1283 #endif
1284 #ifdef CONFIG_X86_MCE
1285 idtentry machine_check has_error_code=0 paranoid=1 do_sym=*machine_check_vector(%rip)
1286 #endif
1287
1288 /*
1289  * Save all registers in pt_regs, and switch gs if needed.
1290  * Use slow, but surefire "are we in kernel?" check.
1291  * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
1292  */
1293 ENTRY(paranoid_entry)
1294         XCPT_FRAME 1 15*8
1295         cld
1296         SAVE_C_REGS 8
1297         SAVE_EXTRA_REGS 8
1298         movl $1,%ebx
1299         movl $MSR_GS_BASE,%ecx
1300         rdmsr
1301         testl %edx,%edx
1302         js 1f   /* negative -> in kernel */
1303         SWAPGS
1304         xorl %ebx,%ebx
1305 1:      ret
1306         CFI_ENDPROC
1307 END(paranoid_entry)
1308
1309 /*
1310  * "Paranoid" exit path from exception stack.  This is invoked
1311  * only on return from non-NMI IST interrupts that came
1312  * from kernel space.
1313  *
1314  * We may be returning to very strange contexts (e.g. very early
1315  * in syscall entry), so checking for preemption here would
1316  * be complicated.  Fortunately, we there's no good reason
1317  * to try to handle preemption here.
1318  */
1319 /* On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it) */
1320 ENTRY(paranoid_exit)
1321         DEFAULT_FRAME
1322         DISABLE_INTERRUPTS(CLBR_NONE)
1323         TRACE_IRQS_OFF_DEBUG
1324         testl %ebx,%ebx                         /* swapgs needed? */
1325         jnz paranoid_exit_no_swapgs
1326         TRACE_IRQS_IRETQ
1327         SWAPGS_UNSAFE_STACK
1328         jmp paranoid_exit_restore
1329 paranoid_exit_no_swapgs:
1330         TRACE_IRQS_IRETQ_DEBUG
1331 paranoid_exit_restore:
1332         RESTORE_EXTRA_REGS
1333         RESTORE_C_REGS
1334         REMOVE_PT_GPREGS_FROM_STACK 8
1335         INTERRUPT_RETURN
1336         CFI_ENDPROC
1337 END(paranoid_exit)
1338
1339 /*
1340  * Save all registers in pt_regs, and switch gs if needed.
1341  * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
1342  */
1343 ENTRY(error_entry)
1344         XCPT_FRAME 1 15*8
1345         cld
1346         SAVE_C_REGS 8
1347         SAVE_EXTRA_REGS 8
1348         xorl %ebx,%ebx
1349         testl $3,CS+8(%rsp)
1350         je error_kernelspace
1351 error_swapgs:
1352         SWAPGS
1353 error_sti:
1354         TRACE_IRQS_OFF
1355         ret
1356
1357         /*
1358          * There are two places in the kernel that can potentially fault with
1359          * usergs. Handle them here.  B stepping K8s sometimes report a
1360          * truncated RIP for IRET exceptions returning to compat mode. Check
1361          * for these here too.
1362          */
1363 error_kernelspace:
1364         CFI_REL_OFFSET rcx, RCX+8
1365         incl %ebx
1366         leaq native_irq_return_iret(%rip),%rcx
1367         cmpq %rcx,RIP+8(%rsp)
1368         je error_bad_iret
1369         movl %ecx,%eax  /* zero extend */
1370         cmpq %rax,RIP+8(%rsp)
1371         je bstep_iret
1372         cmpq $gs_change,RIP+8(%rsp)
1373         je error_swapgs
1374         jmp error_sti
1375
1376 bstep_iret:
1377         /* Fix truncated RIP */
1378         movq %rcx,RIP+8(%rsp)
1379         /* fall through */
1380
1381 error_bad_iret:
1382         SWAPGS
1383         mov %rsp,%rdi
1384         call fixup_bad_iret
1385         mov %rax,%rsp
1386         decl %ebx       /* Return to usergs */
1387         jmp error_sti
1388         CFI_ENDPROC
1389 END(error_entry)
1390
1391
1392 /* On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it) */
1393 ENTRY(error_exit)
1394         DEFAULT_FRAME
1395         movl %ebx,%eax
1396         RESTORE_EXTRA_REGS
1397         DISABLE_INTERRUPTS(CLBR_NONE)
1398         TRACE_IRQS_OFF
1399         GET_THREAD_INFO(%rcx)
1400         testl %eax,%eax
1401         jne retint_kernel
1402         LOCKDEP_SYS_EXIT_IRQ
1403         movl TI_flags(%rcx),%edx
1404         movl $_TIF_WORK_MASK,%edi
1405         andl %edi,%edx
1406         jnz retint_careful
1407         jmp retint_swapgs
1408         CFI_ENDPROC
1409 END(error_exit)
1410
1411 /* Runs on exception stack */
1412 ENTRY(nmi)
1413         INTR_FRAME
1414         PARAVIRT_ADJUST_EXCEPTION_FRAME
1415         /*
1416          * We allow breakpoints in NMIs. If a breakpoint occurs, then
1417          * the iretq it performs will take us out of NMI context.
1418          * This means that we can have nested NMIs where the next
1419          * NMI is using the top of the stack of the previous NMI. We
1420          * can't let it execute because the nested NMI will corrupt the
1421          * stack of the previous NMI. NMI handlers are not re-entrant
1422          * anyway.
1423          *
1424          * To handle this case we do the following:
1425          *  Check the a special location on the stack that contains
1426          *  a variable that is set when NMIs are executing.
1427          *  The interrupted task's stack is also checked to see if it
1428          *  is an NMI stack.
1429          *  If the variable is not set and the stack is not the NMI
1430          *  stack then:
1431          *    o Set the special variable on the stack
1432          *    o Copy the interrupt frame into an "outermost" location on the
1433          *      stack
1434          *    o Copy the interrupt frame into an "iret" location on the stack
1435          *    o Continue processing the NMI
1436          *  If the variable is set or the previous stack is the NMI stack:
1437          *    o Modify the "iret" location to jump to the repeat_nmi
1438          *    o return back to the first NMI
1439          *
1440          * Now on exit of the first NMI, we first clear the stack variable
1441          * The NMI stack will tell any nested NMIs at that point that it is
1442          * nested. Then we pop the stack normally with iret, and if there was
1443          * a nested NMI that updated the copy interrupt stack frame, a
1444          * jump will be made to the repeat_nmi code that will handle the second
1445          * NMI.
1446          *
1447          * However, espfix prevents us from directly returning to userspace
1448          * with a single IRET instruction.  Similarly, IRET to user mode
1449          * can fault.  We therefore handle NMIs from user space like
1450          * other IST entries.
1451          */
1452
1453         /* Use %rdx as our temp variable throughout */
1454         pushq_cfi %rdx
1455         CFI_REL_OFFSET rdx, 0
1456
1457         testb   $3, CS-RIP+8(%rsp)
1458         jz      .Lnmi_from_kernel
1459
1460         /*
1461          * NMI from user mode.  We need to run on the thread stack, but we
1462          * can't go through the normal entry paths: NMIs are masked, and
1463          * we don't want to enable interrupts, because then we'll end
1464          * up in an awkward situation in which IRQs are on but NMIs
1465          * are off.
1466          */
1467
1468         SWAPGS
1469         cld
1470         movq    %rsp, %rdx
1471         movq    PER_CPU_VAR(kernel_stack), %rsp
1472         pushq   5*8(%rdx)       /* pt_regs->ss */
1473         pushq   4*8(%rdx)       /* pt_regs->rsp */
1474         pushq   3*8(%rdx)       /* pt_regs->flags */
1475         pushq   2*8(%rdx)       /* pt_regs->cs */
1476         pushq   1*8(%rdx)       /* pt_regs->rip */
1477         pushq   $-1             /* pt_regs->orig_ax */
1478         pushq   %rdi            /* pt_regs->di */
1479         pushq   %rsi            /* pt_regs->si */
1480         pushq   (%rdx)          /* pt_regs->dx */
1481         pushq   %rcx            /* pt_regs->cx */
1482         pushq   %rax            /* pt_regs->ax */
1483         pushq   %r8             /* pt_regs->r8 */
1484         pushq   %r9             /* pt_regs->r9 */
1485         pushq   %r10            /* pt_regs->r10 */
1486         pushq   %r11            /* pt_regs->r11 */
1487         pushq   %rbx            /* pt_regs->rbx */
1488         pushq   %rbp            /* pt_regs->rbp */
1489         pushq   %r12            /* pt_regs->r12 */
1490         pushq   %r13            /* pt_regs->r13 */
1491         pushq   %r14            /* pt_regs->r14 */
1492         pushq   %r15            /* pt_regs->r15 */
1493
1494         /*
1495          * At this point we no longer need to worry about stack damage
1496          * due to nesting -- we're on the normal thread stack and we're
1497          * done with the NMI stack.
1498          */
1499         movq    %rsp, %rdi
1500         movq    $-1, %rsi
1501         call    do_nmi
1502
1503         /*
1504          * Return back to user mode.  We must *not* do the normal exit
1505          * work, because we don't want to enable interrupts.  Fortunately,
1506          * do_nmi doesn't modify pt_regs.
1507          */
1508         SWAPGS
1509         jmp     restore_c_regs_and_iret
1510
1511 .Lnmi_from_kernel:
1512         /*
1513          * Here's what our stack frame will look like:
1514          * +---------------------------------------------------------+
1515          * | original SS                                             |
1516          * | original Return RSP                                     |
1517          * | original RFLAGS                                         |
1518          * | original CS                                             |
1519          * | original RIP                                            |
1520          * +---------------------------------------------------------+
1521          * | temp storage for rdx                                    |
1522          * +---------------------------------------------------------+
1523          * | "NMI executing" variable                                |
1524          * +---------------------------------------------------------+
1525          * | iret SS          } Copied from "outermost" frame        |
1526          * | iret Return RSP  } on each loop iteration; overwritten  |
1527          * | iret RFLAGS      } by a nested NMI to force another     |
1528          * | iret CS          } iteration if needed.                 |
1529          * | iret RIP         }                                      |
1530          * +---------------------------------------------------------+
1531          * | outermost SS          } initialized in first_nmi;       |
1532          * | outermost Return RSP  } will not be changed before      |
1533          * | outermost RFLAGS      } NMI processing is done.         |
1534          * | outermost CS          } Copied to "iret" frame on each  |
1535          * | outermost RIP         } iteration.                      |
1536          * +---------------------------------------------------------+
1537          * | pt_regs                                                 |
1538          * +---------------------------------------------------------+
1539          *
1540          * The "original" frame is used by hardware.  Before re-enabling
1541          * NMIs, we need to be done with it, and we need to leave enough
1542          * space for the asm code here.
1543          *
1544          * We return by executing IRET while RSP points to the "iret" frame.
1545          * That will either return for real or it will loop back into NMI
1546          * processing.
1547          *
1548          * The "outermost" frame is copied to the "iret" frame on each
1549          * iteration of the loop, so each iteration starts with the "iret"
1550          * frame pointing to the final return target.
1551          */
1552
1553         /*
1554          * Determine whether we're a nested NMI.
1555          *
1556          * If we interrupted kernel code between repeat_nmi and
1557          * end_repeat_nmi, then we are a nested NMI.  We must not
1558          * modify the "iret" frame because it's being written by
1559          * the outer NMI.  That's okay; the outer NMI handler is
1560          * about to about to call do_nmi anyway, so we can just
1561          * resume the outer NMI.
1562          */
1563
1564         movq    $repeat_nmi, %rdx
1565         cmpq    8(%rsp), %rdx
1566         ja      1f
1567         movq    $end_repeat_nmi, %rdx
1568         cmpq    8(%rsp), %rdx
1569         ja      nested_nmi_out
1570 1:
1571
1572         /*
1573          * Now check "NMI executing".  If it's set, then we're nested.
1574          * This will not detect if we interrupted an outer NMI just
1575          * before IRET.
1576          */
1577         cmpl $1, -8(%rsp)
1578         je nested_nmi
1579
1580         /*
1581          * Now test if the previous stack was an NMI stack.  This covers
1582          * the case where we interrupt an outer NMI after it clears
1583          * "NMI executing" but before IRET.  We need to be careful, though:
1584          * there is one case in which RSP could point to the NMI stack
1585          * despite there being no NMI active: naughty userspace controls
1586          * RSP at the very beginning of the SYSCALL targets.  We can
1587          * pull a fast one on naughty userspace, though: we program
1588          * SYSCALL to mask DF, so userspace cannot cause DF to be set
1589          * if it controls the kernel's RSP.  We set DF before we clear
1590          * "NMI executing".
1591          */
1592         lea     6*8(%rsp), %rdx
1593         /* Compare the NMI stack (rdx) with the stack we came from (4*8(%rsp)) */
1594         cmpq    %rdx, 4*8(%rsp)
1595         /* If the stack pointer is above the NMI stack, this is a normal NMI */
1596         ja      first_nmi
1597         subq    $EXCEPTION_STKSZ, %rdx
1598         cmpq    %rdx, 4*8(%rsp)
1599         /* If it is below the NMI stack, it is a normal NMI */
1600         jb      first_nmi
1601
1602         /* Ah, it is within the NMI stack. */
1603
1604         testb   $(X86_EFLAGS_DF >> 8), (3*8 + 1)(%rsp)
1605         jz      first_nmi       /* RSP was user controlled. */
1606
1607         /* This is a nested NMI. */
1608
1609         CFI_REMEMBER_STATE
1610
1611 nested_nmi:
1612         /*
1613          * Modify the "iret" frame to point to repeat_nmi, forcing another
1614          * iteration of NMI handling.
1615          */
1616         leaq -1*8(%rsp), %rdx
1617         movq %rdx, %rsp
1618         CFI_ADJUST_CFA_OFFSET 1*8
1619         leaq -10*8(%rsp), %rdx
1620         pushq_cfi $__KERNEL_DS
1621         pushq_cfi %rdx
1622         pushfq_cfi
1623         pushq_cfi $__KERNEL_CS
1624         pushq_cfi $repeat_nmi
1625
1626         /* Put stack back */
1627         addq $(6*8), %rsp
1628         CFI_ADJUST_CFA_OFFSET -6*8
1629
1630 nested_nmi_out:
1631         popq_cfi %rdx
1632         CFI_RESTORE rdx
1633
1634         /* We are returning to kernel mode, so this cannot result in a fault. */
1635         INTERRUPT_RETURN
1636
1637         CFI_RESTORE_STATE
1638 first_nmi:
1639         /* Restore rdx. */
1640         movq (%rsp), %rdx
1641         CFI_RESTORE rdx
1642
1643         /* Set "NMI executing" on the stack. */
1644         pushq_cfi $1
1645
1646         /* Leave room for the "iret" frame */
1647         subq $(5*8), %rsp
1648         CFI_ADJUST_CFA_OFFSET 5*8
1649
1650         /* Copy the "original" frame to the "outermost" frame */
1651         .rept 5
1652         pushq_cfi 11*8(%rsp)
1653         .endr
1654         CFI_DEF_CFA_OFFSET 5*8
1655
1656         /* Everything up to here is safe from nested NMIs */
1657
1658 repeat_nmi:
1659         /*
1660          * If there was a nested NMI, the first NMI's iret will return
1661          * here. But NMIs are still enabled and we can take another
1662          * nested NMI. The nested NMI checks the interrupted RIP to see
1663          * if it is between repeat_nmi and end_repeat_nmi, and if so
1664          * it will just return, as we are about to repeat an NMI anyway.
1665          * This makes it safe to copy to the stack frame that a nested
1666          * NMI will update.
1667          *
1668          * RSP is pointing to "outermost RIP".  gsbase is unknown, but, if
1669          * we're repeating an NMI, gsbase has the same value that it had on
1670          * the first iteration.  paranoid_entry will load the kernel
1671          * gsbase if needed before we call do_nmi.
1672          *
1673          * Set "NMI executing" in case we came back here via IRET.
1674          */
1675         movq $1, 10*8(%rsp)
1676
1677         /*
1678          * Copy the "outermost" frame to the "iret" frame.  NMIs that nest
1679          * here must not modify the "iret" frame while we're writing to
1680          * it or it will end up containing garbage.
1681          */
1682         addq $(10*8), %rsp
1683         CFI_ADJUST_CFA_OFFSET -10*8
1684         .rept 5
1685         pushq_cfi -6*8(%rsp)
1686         .endr
1687         subq $(5*8), %rsp
1688         CFI_DEF_CFA_OFFSET 5*8
1689 end_repeat_nmi:
1690
1691         /*
1692          * Everything below this point can be preempted by a nested NMI.
1693          * If this happens, then the inner NMI will change the "iret"
1694          * frame to point back to repeat_nmi.
1695          */
1696         pushq_cfi $-1           /* ORIG_RAX: no syscall to restart */
1697         ALLOC_PT_GPREGS_ON_STACK
1698
1699         /*
1700          * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
1701          * as we should not be calling schedule in NMI context.
1702          * Even with normal interrupts enabled. An NMI should not be
1703          * setting NEED_RESCHED or anything that normal interrupts and
1704          * exceptions might do.
1705          */
1706         call paranoid_entry
1707         DEFAULT_FRAME 0
1708
1709         /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
1710         movq %rsp,%rdi
1711         movq $-1,%rsi
1712         call do_nmi
1713
1714         testl %ebx,%ebx                         /* swapgs needed? */
1715         jnz nmi_restore
1716 nmi_swapgs:
1717         SWAPGS_UNSAFE_STACK
1718 nmi_restore:
1719         RESTORE_EXTRA_REGS
1720         RESTORE_C_REGS
1721
1722         /* Point RSP at the "iret" frame. */
1723         REMOVE_PT_GPREGS_FROM_STACK 6*8
1724
1725         /*
1726          * Clear "NMI executing".  Set DF first so that we can easily
1727          * distinguish the remaining code between here and IRET from
1728          * the SYSCALL entry and exit paths.  On a native kernel, we
1729          * could just inspect RIP, but, on paravirt kernels,
1730          * INTERRUPT_RETURN can translate into a jump into a
1731          * hypercall page.
1732          */
1733         std
1734         movq    $0, 5*8(%rsp)           /* clear "NMI executing" */
1735
1736         /*
1737          * INTERRUPT_RETURN reads the "iret" frame and exits the NMI
1738          * stack in a single instruction.  We are returning to kernel
1739          * mode, so this cannot result in a fault.
1740          */
1741         INTERRUPT_RETURN
1742         CFI_ENDPROC
1743 END(nmi)
1744
1745 ENTRY(ignore_sysret)
1746         CFI_STARTPROC
1747         mov $-ENOSYS,%eax
1748         sysret
1749         CFI_ENDPROC
1750 END(ignore_sysret)
1751