OSDN Git Service

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