GNU Linux-libre 4.19.286-gnu1
[releases.git] / arch / x86 / entry / entry_32.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  *  Copyright (C) 1991,1992  Linus Torvalds
4  *
5  * entry_32.S contains the system-call and low-level fault and trap handling routines.
6  *
7  * Stack layout while running C code:
8  *      ptrace needs to have all registers on the stack.
9  *      If the order here is changed, it needs to be
10  *      updated in fork.c:copy_process(), signal.c:do_signal(),
11  *      ptrace.c and ptrace.h
12  *
13  *       0(%esp) - %ebx
14  *       4(%esp) - %ecx
15  *       8(%esp) - %edx
16  *       C(%esp) - %esi
17  *      10(%esp) - %edi
18  *      14(%esp) - %ebp
19  *      18(%esp) - %eax
20  *      1C(%esp) - %ds
21  *      20(%esp) - %es
22  *      24(%esp) - %fs
23  *      28(%esp) - %gs          saved iff !CONFIG_X86_32_LAZY_GS
24  *      2C(%esp) - orig_eax
25  *      30(%esp) - %eip
26  *      34(%esp) - %cs
27  *      38(%esp) - %eflags
28  *      3C(%esp) - %oldesp
29  *      40(%esp) - %oldss
30  */
31
32 #include <linux/linkage.h>
33 #include <linux/err.h>
34 #include <asm/thread_info.h>
35 #include <asm/irqflags.h>
36 #include <asm/errno.h>
37 #include <asm/segment.h>
38 #include <asm/smp.h>
39 #include <asm/percpu.h>
40 #include <asm/processor-flags.h>
41 #include <asm/irq_vectors.h>
42 #include <asm/cpufeatures.h>
43 #include <asm/alternative-asm.h>
44 #include <asm/asm.h>
45 #include <asm/smap.h>
46 #include <asm/frame.h>
47 #include <asm/nospec-branch.h>
48
49         .section .entry.text, "ax"
50
51 /*
52  * We use macros for low-level operations which need to be overridden
53  * for paravirtualization.  The following will never clobber any registers:
54  *   INTERRUPT_RETURN (aka. "iret")
55  *   GET_CR0_INTO_EAX (aka. "movl %cr0, %eax")
56  *   ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit").
57  *
58  * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must
59  * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
60  * Allowing a register to be clobbered can shrink the paravirt replacement
61  * enough to patch inline, increasing performance.
62  */
63
64 #ifdef CONFIG_PREEMPT
65 # define preempt_stop(clobbers) DISABLE_INTERRUPTS(clobbers); TRACE_IRQS_OFF
66 #else
67 # define preempt_stop(clobbers)
68 # define resume_kernel          restore_all_kernel
69 #endif
70
71 .macro TRACE_IRQS_IRET
72 #ifdef CONFIG_TRACE_IRQFLAGS
73         testl   $X86_EFLAGS_IF, PT_EFLAGS(%esp)     # interrupts off?
74         jz      1f
75         TRACE_IRQS_ON
76 1:
77 #endif
78 .endm
79
80 #define PTI_SWITCH_MASK         (1 << PAGE_SHIFT)
81
82 /*
83  * User gs save/restore
84  *
85  * %gs is used for userland TLS and kernel only uses it for stack
86  * canary which is required to be at %gs:20 by gcc.  Read the comment
87  * at the top of stackprotector.h for more info.
88  *
89  * Local labels 98 and 99 are used.
90  */
91 #ifdef CONFIG_X86_32_LAZY_GS
92
93  /* unfortunately push/pop can't be no-op */
94 .macro PUSH_GS
95         pushl   $0
96 .endm
97 .macro POP_GS pop=0
98         addl    $(4 + \pop), %esp
99 .endm
100 .macro POP_GS_EX
101 .endm
102
103  /* all the rest are no-op */
104 .macro PTGS_TO_GS
105 .endm
106 .macro PTGS_TO_GS_EX
107 .endm
108 .macro GS_TO_REG reg
109 .endm
110 .macro REG_TO_PTGS reg
111 .endm
112 .macro SET_KERNEL_GS reg
113 .endm
114
115 #else   /* CONFIG_X86_32_LAZY_GS */
116
117 .macro PUSH_GS
118         pushl   %gs
119 .endm
120
121 .macro POP_GS pop=0
122 98:     popl    %gs
123   .if \pop <> 0
124         add     $\pop, %esp
125   .endif
126 .endm
127 .macro POP_GS_EX
128 .pushsection .fixup, "ax"
129 99:     movl    $0, (%esp)
130         jmp     98b
131 .popsection
132         _ASM_EXTABLE(98b, 99b)
133 .endm
134
135 .macro PTGS_TO_GS
136 98:     mov     PT_GS(%esp), %gs
137 .endm
138 .macro PTGS_TO_GS_EX
139 .pushsection .fixup, "ax"
140 99:     movl    $0, PT_GS(%esp)
141         jmp     98b
142 .popsection
143         _ASM_EXTABLE(98b, 99b)
144 .endm
145
146 .macro GS_TO_REG reg
147         movl    %gs, \reg
148 .endm
149 .macro REG_TO_PTGS reg
150         movl    \reg, PT_GS(%esp)
151 .endm
152 .macro SET_KERNEL_GS reg
153         movl    $(__KERNEL_STACK_CANARY), \reg
154         movl    \reg, %gs
155 .endm
156
157 #endif /* CONFIG_X86_32_LAZY_GS */
158
159 /* Unconditionally switch to user cr3 */
160 .macro SWITCH_TO_USER_CR3 scratch_reg:req
161         ALTERNATIVE "jmp .Lend_\@", "", X86_FEATURE_PTI
162
163         movl    %cr3, \scratch_reg
164         orl     $PTI_SWITCH_MASK, \scratch_reg
165         movl    \scratch_reg, %cr3
166 .Lend_\@:
167 .endm
168
169 .macro BUG_IF_WRONG_CR3 no_user_check=0
170 #ifdef CONFIG_DEBUG_ENTRY
171         ALTERNATIVE "jmp .Lend_\@", "", X86_FEATURE_PTI
172         .if \no_user_check == 0
173         /* coming from usermode? */
174         testl   $SEGMENT_RPL_MASK, PT_CS(%esp)
175         jz      .Lend_\@
176         .endif
177         /* On user-cr3? */
178         movl    %cr3, %eax
179         testl   $PTI_SWITCH_MASK, %eax
180         jnz     .Lend_\@
181         /* From userspace with kernel cr3 - BUG */
182         ud2
183 .Lend_\@:
184 #endif
185 .endm
186
187 /*
188  * Switch to kernel cr3 if not already loaded and return current cr3 in
189  * \scratch_reg
190  */
191 .macro SWITCH_TO_KERNEL_CR3 scratch_reg:req
192         ALTERNATIVE "jmp .Lend_\@", "", X86_FEATURE_PTI
193         movl    %cr3, \scratch_reg
194         /* Test if we are already on kernel CR3 */
195         testl   $PTI_SWITCH_MASK, \scratch_reg
196         jz      .Lend_\@
197         andl    $(~PTI_SWITCH_MASK), \scratch_reg
198         movl    \scratch_reg, %cr3
199         /* Return original CR3 in \scratch_reg */
200         orl     $PTI_SWITCH_MASK, \scratch_reg
201 .Lend_\@:
202 .endm
203
204 .macro SAVE_ALL pt_regs_ax=%eax switch_stacks=0
205         cld
206         PUSH_GS
207         pushl   %fs
208         pushl   %es
209         pushl   %ds
210         pushl   \pt_regs_ax
211         pushl   %ebp
212         pushl   %edi
213         pushl   %esi
214         pushl   %edx
215         pushl   %ecx
216         pushl   %ebx
217         movl    $(__USER_DS), %edx
218         movl    %edx, %ds
219         movl    %edx, %es
220         movl    $(__KERNEL_PERCPU), %edx
221         movl    %edx, %fs
222         SET_KERNEL_GS %edx
223
224         /* Switch to kernel stack if necessary */
225 .if \switch_stacks > 0
226         SWITCH_TO_KERNEL_STACK
227 .endif
228
229 .endm
230
231 .macro SAVE_ALL_NMI cr3_reg:req
232         SAVE_ALL
233
234         BUG_IF_WRONG_CR3
235
236         /*
237          * Now switch the CR3 when PTI is enabled.
238          *
239          * We can enter with either user or kernel cr3, the code will
240          * store the old cr3 in \cr3_reg and switches to the kernel cr3
241          * if necessary.
242          */
243         SWITCH_TO_KERNEL_CR3 scratch_reg=\cr3_reg
244
245 .Lend_\@:
246 .endm
247
248 .macro RESTORE_INT_REGS
249         popl    %ebx
250         popl    %ecx
251         popl    %edx
252         popl    %esi
253         popl    %edi
254         popl    %ebp
255         popl    %eax
256 .endm
257
258 .macro RESTORE_REGS pop=0
259         RESTORE_INT_REGS
260 1:      popl    %ds
261 2:      popl    %es
262 3:      popl    %fs
263         POP_GS \pop
264 .pushsection .fixup, "ax"
265 4:      movl    $0, (%esp)
266         jmp     1b
267 5:      movl    $0, (%esp)
268         jmp     2b
269 6:      movl    $0, (%esp)
270         jmp     3b
271 .popsection
272         _ASM_EXTABLE(1b, 4b)
273         _ASM_EXTABLE(2b, 5b)
274         _ASM_EXTABLE(3b, 6b)
275         POP_GS_EX
276 .endm
277
278 .macro RESTORE_ALL_NMI cr3_reg:req pop=0
279         /*
280          * Now switch the CR3 when PTI is enabled.
281          *
282          * We enter with kernel cr3 and switch the cr3 to the value
283          * stored on \cr3_reg, which is either a user or a kernel cr3.
284          */
285         ALTERNATIVE "jmp .Lswitched_\@", "", X86_FEATURE_PTI
286
287         testl   $PTI_SWITCH_MASK, \cr3_reg
288         jz      .Lswitched_\@
289
290         /* User cr3 in \cr3_reg - write it to hardware cr3 */
291         movl    \cr3_reg, %cr3
292
293 .Lswitched_\@:
294
295         BUG_IF_WRONG_CR3
296
297         RESTORE_REGS pop=\pop
298 .endm
299
300 .macro CHECK_AND_APPLY_ESPFIX
301 #ifdef CONFIG_X86_ESPFIX32
302 #define GDT_ESPFIX_SS PER_CPU_VAR(gdt_page) + (GDT_ENTRY_ESPFIX_SS * 8)
303
304         ALTERNATIVE     "jmp .Lend_\@", "", X86_BUG_ESPFIX
305
306         movl    PT_EFLAGS(%esp), %eax           # mix EFLAGS, SS and CS
307         /*
308          * Warning: PT_OLDSS(%esp) contains the wrong/random values if we
309          * are returning to the kernel.
310          * See comments in process.c:copy_thread() for details.
311          */
312         movb    PT_OLDSS(%esp), %ah
313         movb    PT_CS(%esp), %al
314         andl    $(X86_EFLAGS_VM | (SEGMENT_TI_MASK << 8) | SEGMENT_RPL_MASK), %eax
315         cmpl    $((SEGMENT_LDT << 8) | USER_RPL), %eax
316         jne     .Lend_\@        # returning to user-space with LDT SS
317
318         /*
319          * Setup and switch to ESPFIX stack
320          *
321          * We're returning to userspace with a 16 bit stack. The CPU will not
322          * restore the high word of ESP for us on executing iret... This is an
323          * "official" bug of all the x86-compatible CPUs, which we can work
324          * around to make dosemu and wine happy. We do this by preloading the
325          * high word of ESP with the high word of the userspace ESP while
326          * compensating for the offset by changing to the ESPFIX segment with
327          * a base address that matches for the difference.
328          */
329         mov     %esp, %edx                      /* load kernel esp */
330         mov     PT_OLDESP(%esp), %eax           /* load userspace esp */
331         mov     %dx, %ax                        /* eax: new kernel esp */
332         sub     %eax, %edx                      /* offset (low word is 0) */
333         shr     $16, %edx
334         mov     %dl, GDT_ESPFIX_SS + 4          /* bits 16..23 */
335         mov     %dh, GDT_ESPFIX_SS + 7          /* bits 24..31 */
336         pushl   $__ESPFIX_SS
337         pushl   %eax                            /* new kernel esp */
338         /*
339          * Disable interrupts, but do not irqtrace this section: we
340          * will soon execute iret and the tracer was already set to
341          * the irqstate after the IRET:
342          */
343         DISABLE_INTERRUPTS(CLBR_ANY)
344         lss     (%esp), %esp                    /* switch to espfix segment */
345 .Lend_\@:
346 #endif /* CONFIG_X86_ESPFIX32 */
347 .endm
348
349 /*
350  * Called with pt_regs fully populated and kernel segments loaded,
351  * so we can access PER_CPU and use the integer registers.
352  *
353  * We need to be very careful here with the %esp switch, because an NMI
354  * can happen everywhere. If the NMI handler finds itself on the
355  * entry-stack, it will overwrite the task-stack and everything we
356  * copied there. So allocate the stack-frame on the task-stack and
357  * switch to it before we do any copying.
358  */
359
360 #define CS_FROM_ENTRY_STACK     (1 << 31)
361 #define CS_FROM_USER_CR3        (1 << 30)
362
363 .macro SWITCH_TO_KERNEL_STACK
364
365         ALTERNATIVE     "", "jmp .Lend_\@", X86_FEATURE_XENPV
366
367         BUG_IF_WRONG_CR3
368
369         SWITCH_TO_KERNEL_CR3 scratch_reg=%eax
370
371         /*
372          * %eax now contains the entry cr3 and we carry it forward in
373          * that register for the time this macro runs
374          */
375
376         /*
377          * The high bits of the CS dword (__csh) are used for
378          * CS_FROM_ENTRY_STACK and CS_FROM_USER_CR3. Clear them in case
379          * hardware didn't do this for us.
380          */
381         andl    $(0x0000ffff), PT_CS(%esp)
382
383         /* Are we on the entry stack? Bail out if not! */
384         movl    PER_CPU_VAR(cpu_entry_area), %ecx
385         addl    $CPU_ENTRY_AREA_entry_stack + SIZEOF_entry_stack, %ecx
386         subl    %esp, %ecx      /* ecx = (end of entry_stack) - esp */
387         cmpl    $SIZEOF_entry_stack, %ecx
388         jae     .Lend_\@
389
390         /* Load stack pointer into %esi and %edi */
391         movl    %esp, %esi
392         movl    %esi, %edi
393
394         /* Move %edi to the top of the entry stack */
395         andl    $(MASK_entry_stack), %edi
396         addl    $(SIZEOF_entry_stack), %edi
397
398         /* Load top of task-stack into %edi */
399         movl    TSS_entry2task_stack(%edi), %edi
400
401         /* Special case - entry from kernel mode via entry stack */
402 #ifdef CONFIG_VM86
403         movl    PT_EFLAGS(%esp), %ecx           # mix EFLAGS and CS
404         movb    PT_CS(%esp), %cl
405         andl    $(X86_EFLAGS_VM | SEGMENT_RPL_MASK), %ecx
406 #else
407         movl    PT_CS(%esp), %ecx
408         andl    $SEGMENT_RPL_MASK, %ecx
409 #endif
410         cmpl    $USER_RPL, %ecx
411         jb      .Lentry_from_kernel_\@
412
413         /* Bytes to copy */
414         movl    $PTREGS_SIZE, %ecx
415
416 #ifdef CONFIG_VM86
417         testl   $X86_EFLAGS_VM, PT_EFLAGS(%esi)
418         jz      .Lcopy_pt_regs_\@
419
420         /*
421          * Stack-frame contains 4 additional segment registers when
422          * coming from VM86 mode
423          */
424         addl    $(4 * 4), %ecx
425
426 #endif
427 .Lcopy_pt_regs_\@:
428
429         /* Allocate frame on task-stack */
430         subl    %ecx, %edi
431
432         /* Switch to task-stack */
433         movl    %edi, %esp
434
435         /*
436          * We are now on the task-stack and can safely copy over the
437          * stack-frame
438          */
439         shrl    $2, %ecx
440         cld
441         rep movsl
442
443         jmp .Lend_\@
444
445 .Lentry_from_kernel_\@:
446
447         /*
448          * This handles the case when we enter the kernel from
449          * kernel-mode and %esp points to the entry-stack. When this
450          * happens we need to switch to the task-stack to run C code,
451          * but switch back to the entry-stack again when we approach
452          * iret and return to the interrupted code-path. This usually
453          * happens when we hit an exception while restoring user-space
454          * segment registers on the way back to user-space or when the
455          * sysenter handler runs with eflags.tf set.
456          *
457          * When we switch to the task-stack here, we can't trust the
458          * contents of the entry-stack anymore, as the exception handler
459          * might be scheduled out or moved to another CPU. Therefore we
460          * copy the complete entry-stack to the task-stack and set a
461          * marker in the iret-frame (bit 31 of the CS dword) to detect
462          * what we've done on the iret path.
463          *
464          * On the iret path we copy everything back and switch to the
465          * entry-stack, so that the interrupted kernel code-path
466          * continues on the same stack it was interrupted with.
467          *
468          * Be aware that an NMI can happen anytime in this code.
469          *
470          * %esi: Entry-Stack pointer (same as %esp)
471          * %edi: Top of the task stack
472          * %eax: CR3 on kernel entry
473          */
474
475         /* Calculate number of bytes on the entry stack in %ecx */
476         movl    %esi, %ecx
477
478         /* %ecx to the top of entry-stack */
479         andl    $(MASK_entry_stack), %ecx
480         addl    $(SIZEOF_entry_stack), %ecx
481
482         /* Number of bytes on the entry stack to %ecx */
483         sub     %esi, %ecx
484
485         /* Mark stackframe as coming from entry stack */
486         orl     $CS_FROM_ENTRY_STACK, PT_CS(%esp)
487
488         /*
489          * Test the cr3 used to enter the kernel and add a marker
490          * so that we can switch back to it before iret.
491          */
492         testl   $PTI_SWITCH_MASK, %eax
493         jz      .Lcopy_pt_regs_\@
494         orl     $CS_FROM_USER_CR3, PT_CS(%esp)
495
496         /*
497          * %esi and %edi are unchanged, %ecx contains the number of
498          * bytes to copy. The code at .Lcopy_pt_regs_\@ will allocate
499          * the stack-frame on task-stack and copy everything over
500          */
501         jmp .Lcopy_pt_regs_\@
502
503 .Lend_\@:
504 .endm
505
506 /*
507  * Switch back from the kernel stack to the entry stack.
508  *
509  * The %esp register must point to pt_regs on the task stack. It will
510  * first calculate the size of the stack-frame to copy, depending on
511  * whether we return to VM86 mode or not. With that it uses 'rep movsl'
512  * to copy the contents of the stack over to the entry stack.
513  *
514  * We must be very careful here, as we can't trust the contents of the
515  * task-stack once we switched to the entry-stack. When an NMI happens
516  * while on the entry-stack, the NMI handler will switch back to the top
517  * of the task stack, overwriting our stack-frame we are about to copy.
518  * Therefore we switch the stack only after everything is copied over.
519  */
520 .macro SWITCH_TO_ENTRY_STACK
521
522         ALTERNATIVE     "", "jmp .Lend_\@", X86_FEATURE_XENPV
523
524         /* Bytes to copy */
525         movl    $PTREGS_SIZE, %ecx
526
527 #ifdef CONFIG_VM86
528         testl   $(X86_EFLAGS_VM), PT_EFLAGS(%esp)
529         jz      .Lcopy_pt_regs_\@
530
531         /* Additional 4 registers to copy when returning to VM86 mode */
532         addl    $(4 * 4), %ecx
533
534 .Lcopy_pt_regs_\@:
535 #endif
536
537         /* Initialize source and destination for movsl */
538         movl    PER_CPU_VAR(cpu_tss_rw + TSS_sp0), %edi
539         subl    %ecx, %edi
540         movl    %esp, %esi
541
542         /* Save future stack pointer in %ebx */
543         movl    %edi, %ebx
544
545         /* Copy over the stack-frame */
546         shrl    $2, %ecx
547         cld
548         rep movsl
549
550         /*
551          * Switch to entry-stack - needs to happen after everything is
552          * copied because the NMI handler will overwrite the task-stack
553          * when on entry-stack
554          */
555         movl    %ebx, %esp
556
557 .Lend_\@:
558 .endm
559
560 /*
561  * This macro handles the case when we return to kernel-mode on the iret
562  * path and have to switch back to the entry stack and/or user-cr3
563  *
564  * See the comments below the .Lentry_from_kernel_\@ label in the
565  * SWITCH_TO_KERNEL_STACK macro for more details.
566  */
567 .macro PARANOID_EXIT_TO_KERNEL_MODE
568
569         /*
570          * Test if we entered the kernel with the entry-stack. Most
571          * likely we did not, because this code only runs on the
572          * return-to-kernel path.
573          */
574         testl   $CS_FROM_ENTRY_STACK, PT_CS(%esp)
575         jz      .Lend_\@
576
577         /* Unlikely slow-path */
578
579         /* Clear marker from stack-frame */
580         andl    $(~CS_FROM_ENTRY_STACK), PT_CS(%esp)
581
582         /* Copy the remaining task-stack contents to entry-stack */
583         movl    %esp, %esi
584         movl    PER_CPU_VAR(cpu_tss_rw + TSS_sp0), %edi
585
586         /* Bytes on the task-stack to ecx */
587         movl    PER_CPU_VAR(cpu_tss_rw + TSS_sp1), %ecx
588         subl    %esi, %ecx
589
590         /* Allocate stack-frame on entry-stack */
591         subl    %ecx, %edi
592
593         /*
594          * Save future stack-pointer, we must not switch until the
595          * copy is done, otherwise the NMI handler could destroy the
596          * contents of the task-stack we are about to copy.
597          */
598         movl    %edi, %ebx
599
600         /* Do the copy */
601         shrl    $2, %ecx
602         cld
603         rep movsl
604
605         /* Safe to switch to entry-stack now */
606         movl    %ebx, %esp
607
608         /*
609          * We came from entry-stack and need to check if we also need to
610          * switch back to user cr3.
611          */
612         testl   $CS_FROM_USER_CR3, PT_CS(%esp)
613         jz      .Lend_\@
614
615         /* Clear marker from stack-frame */
616         andl    $(~CS_FROM_USER_CR3), PT_CS(%esp)
617
618         SWITCH_TO_USER_CR3 scratch_reg=%eax
619
620 .Lend_\@:
621 .endm
622 /*
623  * %eax: prev task
624  * %edx: next task
625  */
626 ENTRY(__switch_to_asm)
627         /*
628          * Save callee-saved registers
629          * This must match the order in struct inactive_task_frame
630          */
631         pushl   %ebp
632         pushl   %ebx
633         pushl   %edi
634         pushl   %esi
635         pushfl
636
637         /* switch stack */
638         movl    %esp, TASK_threadsp(%eax)
639         movl    TASK_threadsp(%edx), %esp
640
641 #ifdef CONFIG_STACKPROTECTOR
642         movl    TASK_stack_canary(%edx), %ebx
643         movl    %ebx, PER_CPU_VAR(stack_canary)+stack_canary_offset
644 #endif
645
646         /*
647          * When switching from a shallower to a deeper call stack
648          * the RSB may either underflow or use entries populated
649          * with userspace addresses. On CPUs where those concerns
650          * exist, overwrite the RSB with entries which capture
651          * speculative execution to prevent attack.
652          */
653         FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
654
655         /* restore callee-saved registers */
656         popfl
657         popl    %esi
658         popl    %edi
659         popl    %ebx
660         popl    %ebp
661
662         jmp     __switch_to
663 END(__switch_to_asm)
664
665 /*
666  * The unwinder expects the last frame on the stack to always be at the same
667  * offset from the end of the page, which allows it to validate the stack.
668  * Calling schedule_tail() directly would break that convention because its an
669  * asmlinkage function so its argument has to be pushed on the stack.  This
670  * wrapper creates a proper "end of stack" frame header before the call.
671  */
672 ENTRY(schedule_tail_wrapper)
673         FRAME_BEGIN
674
675         pushl   %eax
676         call    schedule_tail
677         popl    %eax
678
679         FRAME_END
680         ret
681 ENDPROC(schedule_tail_wrapper)
682 /*
683  * A newly forked process directly context switches into this address.
684  *
685  * eax: prev task we switched from
686  * ebx: kernel thread func (NULL for user thread)
687  * edi: kernel thread arg
688  */
689 ENTRY(ret_from_fork)
690         call    schedule_tail_wrapper
691
692         testl   %ebx, %ebx
693         jnz     1f              /* kernel threads are uncommon */
694
695 2:
696         /* When we fork, we trace the syscall return in the child, too. */
697         movl    %esp, %eax
698         call    syscall_return_slowpath
699         jmp     restore_all
700
701         /* kernel thread */
702 1:      movl    %edi, %eax
703         CALL_NOSPEC %ebx
704         /*
705          * A kernel thread is allowed to return here after successfully
706          * calling do_execve().  Exit to userspace to complete the execve()
707          * syscall.
708          */
709         movl    $0, PT_EAX(%esp)
710         jmp     2b
711 END(ret_from_fork)
712
713 /*
714  * Return to user mode is not as complex as all this looks,
715  * but we want the default path for a system call return to
716  * go as quickly as possible which is why some of this is
717  * less clear than it otherwise should be.
718  */
719
720         # userspace resumption stub bypassing syscall exit tracing
721         ALIGN
722 ret_from_exception:
723         preempt_stop(CLBR_ANY)
724 ret_from_intr:
725 #ifdef CONFIG_VM86
726         movl    PT_EFLAGS(%esp), %eax           # mix EFLAGS and CS
727         movb    PT_CS(%esp), %al
728         andl    $(X86_EFLAGS_VM | SEGMENT_RPL_MASK), %eax
729 #else
730         /*
731          * We can be coming here from child spawned by kernel_thread().
732          */
733         movl    PT_CS(%esp), %eax
734         andl    $SEGMENT_RPL_MASK, %eax
735 #endif
736         cmpl    $USER_RPL, %eax
737         jb      resume_kernel                   # not returning to v8086 or userspace
738
739 ENTRY(resume_userspace)
740         DISABLE_INTERRUPTS(CLBR_ANY)
741         TRACE_IRQS_OFF
742         movl    %esp, %eax
743         call    prepare_exit_to_usermode
744         jmp     restore_all
745 END(ret_from_exception)
746
747 #ifdef CONFIG_PREEMPT
748 ENTRY(resume_kernel)
749         DISABLE_INTERRUPTS(CLBR_ANY)
750 .Lneed_resched:
751         cmpl    $0, PER_CPU_VAR(__preempt_count)
752         jnz     restore_all_kernel
753         testl   $X86_EFLAGS_IF, PT_EFLAGS(%esp) # interrupts off (exception path) ?
754         jz      restore_all_kernel
755         call    preempt_schedule_irq
756         jmp     .Lneed_resched
757 END(resume_kernel)
758 #endif
759
760 GLOBAL(__begin_SYSENTER_singlestep_region)
761 /*
762  * All code from here through __end_SYSENTER_singlestep_region is subject
763  * to being single-stepped if a user program sets TF and executes SYSENTER.
764  * There is absolutely nothing that we can do to prevent this from happening
765  * (thanks Intel!).  To keep our handling of this situation as simple as
766  * possible, we handle TF just like AC and NT, except that our #DB handler
767  * will ignore all of the single-step traps generated in this range.
768  */
769
770 #ifdef CONFIG_XEN
771 /*
772  * Xen doesn't set %esp to be precisely what the normal SYSENTER
773  * entry point expects, so fix it up before using the normal path.
774  */
775 ENTRY(xen_sysenter_target)
776         addl    $5*4, %esp                      /* remove xen-provided frame */
777         jmp     .Lsysenter_past_esp
778 #endif
779
780 /*
781  * 32-bit SYSENTER entry.
782  *
783  * 32-bit system calls through the vDSO's __kernel_vsyscall enter here
784  * if X86_FEATURE_SEP is available.  This is the preferred system call
785  * entry on 32-bit systems.
786  *
787  * The SYSENTER instruction, in principle, should *only* occur in the
788  * vDSO.  In practice, a small number of Android devices were shipped
789  * with a copy of Bionic that inlined a SYSENTER instruction.  This
790  * never happened in any of Google's Bionic versions -- it only happened
791  * in a narrow range of Intel-provided versions.
792  *
793  * SYSENTER loads SS, ESP, CS, and EIP from previously programmed MSRs.
794  * IF and VM in RFLAGS are cleared (IOW: interrupts are off).
795  * SYSENTER does not save anything on the stack,
796  * and does not save old EIP (!!!), ESP, or EFLAGS.
797  *
798  * To avoid losing track of EFLAGS.VM (and thus potentially corrupting
799  * user and/or vm86 state), we explicitly disable the SYSENTER
800  * instruction in vm86 mode by reprogramming the MSRs.
801  *
802  * Arguments:
803  * eax  system call number
804  * ebx  arg1
805  * ecx  arg2
806  * edx  arg3
807  * esi  arg4
808  * edi  arg5
809  * ebp  user stack
810  * 0(%ebp) arg6
811  */
812 ENTRY(entry_SYSENTER_32)
813         /*
814          * On entry-stack with all userspace-regs live - save and
815          * restore eflags and %eax to use it as scratch-reg for the cr3
816          * switch.
817          */
818         pushfl
819         pushl   %eax
820         BUG_IF_WRONG_CR3 no_user_check=1
821         SWITCH_TO_KERNEL_CR3 scratch_reg=%eax
822         popl    %eax
823         popfl
824
825         /* Stack empty again, switch to task stack */
826         movl    TSS_entry2task_stack(%esp), %esp
827
828 .Lsysenter_past_esp:
829         pushl   $__USER_DS              /* pt_regs->ss */
830         pushl   %ebp                    /* pt_regs->sp (stashed in bp) */
831         pushfl                          /* pt_regs->flags (except IF = 0) */
832         orl     $X86_EFLAGS_IF, (%esp)  /* Fix IF */
833         pushl   $__USER_CS              /* pt_regs->cs */
834         pushl   $0                      /* pt_regs->ip = 0 (placeholder) */
835         pushl   %eax                    /* pt_regs->orig_ax */
836         SAVE_ALL pt_regs_ax=$-ENOSYS    /* save rest, stack already switched */
837
838         /*
839          * SYSENTER doesn't filter flags, so we need to clear NT, AC
840          * and TF ourselves.  To save a few cycles, we can check whether
841          * either was set instead of doing an unconditional popfq.
842          * This needs to happen before enabling interrupts so that
843          * we don't get preempted with NT set.
844          *
845          * If TF is set, we will single-step all the way to here -- do_debug
846          * will ignore all the traps.  (Yes, this is slow, but so is
847          * single-stepping in general.  This allows us to avoid having
848          * a more complicated code to handle the case where a user program
849          * forces us to single-step through the SYSENTER entry code.)
850          *
851          * NB.: .Lsysenter_fix_flags is a label with the code under it moved
852          * out-of-line as an optimization: NT is unlikely to be set in the
853          * majority of the cases and instead of polluting the I$ unnecessarily,
854          * we're keeping that code behind a branch which will predict as
855          * not-taken and therefore its instructions won't be fetched.
856          */
857         testl   $X86_EFLAGS_NT|X86_EFLAGS_AC|X86_EFLAGS_TF, PT_EFLAGS(%esp)
858         jnz     .Lsysenter_fix_flags
859 .Lsysenter_flags_fixed:
860
861         /*
862          * User mode is traced as though IRQs are on, and SYSENTER
863          * turned them off.
864          */
865         TRACE_IRQS_OFF
866
867         movl    %esp, %eax
868         call    do_fast_syscall_32
869         /* XEN PV guests always use IRET path */
870         ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
871                     "jmp .Lsyscall_32_done", X86_FEATURE_XENPV
872
873 /* Opportunistic SYSEXIT */
874         TRACE_IRQS_ON                   /* User mode traces as IRQs on. */
875
876         /*
877          * Setup entry stack - we keep the pointer in %eax and do the
878          * switch after almost all user-state is restored.
879          */
880
881         /* Load entry stack pointer and allocate frame for eflags/eax */
882         movl    PER_CPU_VAR(cpu_tss_rw + TSS_sp0), %eax
883         subl    $(2*4), %eax
884
885         /* Copy eflags and eax to entry stack */
886         movl    PT_EFLAGS(%esp), %edi
887         movl    PT_EAX(%esp), %esi
888         movl    %edi, (%eax)
889         movl    %esi, 4(%eax)
890
891         /* Restore user registers and segments */
892         movl    PT_EIP(%esp), %edx      /* pt_regs->ip */
893         movl    PT_OLDESP(%esp), %ecx   /* pt_regs->sp */
894 1:      mov     PT_FS(%esp), %fs
895         PTGS_TO_GS
896
897         popl    %ebx                    /* pt_regs->bx */
898         addl    $2*4, %esp              /* skip pt_regs->cx and pt_regs->dx */
899         popl    %esi                    /* pt_regs->si */
900         popl    %edi                    /* pt_regs->di */
901         popl    %ebp                    /* pt_regs->bp */
902
903         /* Switch to entry stack */
904         movl    %eax, %esp
905
906         /* Now ready to switch the cr3 */
907         SWITCH_TO_USER_CR3 scratch_reg=%eax
908
909         /*
910          * Restore all flags except IF. (We restore IF separately because
911          * STI gives a one-instruction window in which we won't be interrupted,
912          * whereas POPF does not.)
913          */
914         btrl    $X86_EFLAGS_IF_BIT, (%esp)
915         BUG_IF_WRONG_CR3 no_user_check=1
916         popfl
917         popl    %eax
918
919         /*
920          * Return back to the vDSO, which will pop ecx and edx.
921          * Don't bother with DS and ES (they already contain __USER_DS).
922          */
923         sti
924         sysexit
925
926 .pushsection .fixup, "ax"
927 2:      movl    $0, PT_FS(%esp)
928         jmp     1b
929 .popsection
930         _ASM_EXTABLE(1b, 2b)
931         PTGS_TO_GS_EX
932
933 .Lsysenter_fix_flags:
934         pushl   $X86_EFLAGS_FIXED
935         popfl
936         jmp     .Lsysenter_flags_fixed
937 GLOBAL(__end_SYSENTER_singlestep_region)
938 ENDPROC(entry_SYSENTER_32)
939
940 /*
941  * 32-bit legacy system call entry.
942  *
943  * 32-bit x86 Linux system calls traditionally used the INT $0x80
944  * instruction.  INT $0x80 lands here.
945  *
946  * This entry point can be used by any 32-bit perform system calls.
947  * Instances of INT $0x80 can be found inline in various programs and
948  * libraries.  It is also used by the vDSO's __kernel_vsyscall
949  * fallback for hardware that doesn't support a faster entry method.
950  * Restarted 32-bit system calls also fall back to INT $0x80
951  * regardless of what instruction was originally used to do the system
952  * call.  (64-bit programs can use INT $0x80 as well, but they can
953  * only run on 64-bit kernels and therefore land in
954  * entry_INT80_compat.)
955  *
956  * This is considered a slow path.  It is not used by most libc
957  * implementations on modern hardware except during process startup.
958  *
959  * Arguments:
960  * eax  system call number
961  * ebx  arg1
962  * ecx  arg2
963  * edx  arg3
964  * esi  arg4
965  * edi  arg5
966  * ebp  arg6
967  */
968 ENTRY(entry_INT80_32)
969         ASM_CLAC
970         pushl   %eax                    /* pt_regs->orig_ax */
971
972         SAVE_ALL pt_regs_ax=$-ENOSYS switch_stacks=1    /* save rest */
973
974         /*
975          * User mode is traced as though IRQs are on, and the interrupt gate
976          * turned them off.
977          */
978         TRACE_IRQS_OFF
979
980         movl    %esp, %eax
981         call    do_int80_syscall_32
982 .Lsyscall_32_done:
983
984 restore_all:
985         TRACE_IRQS_IRET
986         SWITCH_TO_ENTRY_STACK
987 .Lrestore_all_notrace:
988         CHECK_AND_APPLY_ESPFIX
989 .Lrestore_nocheck:
990         /* Switch back to user CR3 */
991         SWITCH_TO_USER_CR3 scratch_reg=%eax
992
993         BUG_IF_WRONG_CR3
994
995         /* Restore user state */
996         RESTORE_REGS pop=4                      # skip orig_eax/error_code
997 .Lirq_return:
998         /*
999          * ARCH_HAS_MEMBARRIER_SYNC_CORE rely on IRET core serialization
1000          * when returning from IPI handler and when returning from
1001          * scheduler to user-space.
1002          */
1003         INTERRUPT_RETURN
1004
1005 restore_all_kernel:
1006         TRACE_IRQS_IRET
1007         PARANOID_EXIT_TO_KERNEL_MODE
1008         BUG_IF_WRONG_CR3
1009         RESTORE_REGS 4
1010         jmp     .Lirq_return
1011
1012 .section .fixup, "ax"
1013 ENTRY(iret_exc  )
1014         pushl   $0                              # no error code
1015         pushl   $do_iret_error
1016
1017 #ifdef CONFIG_DEBUG_ENTRY
1018         /*
1019          * The stack-frame here is the one that iret faulted on, so its a
1020          * return-to-user frame. We are on kernel-cr3 because we come here from
1021          * the fixup code. This confuses the CR3 checker, so switch to user-cr3
1022          * as the checker expects it.
1023          */
1024         pushl   %eax
1025         SWITCH_TO_USER_CR3 scratch_reg=%eax
1026         popl    %eax
1027 #endif
1028
1029         jmp     common_exception
1030 .previous
1031         _ASM_EXTABLE(.Lirq_return, iret_exc)
1032 ENDPROC(entry_INT80_32)
1033
1034 .macro FIXUP_ESPFIX_STACK
1035 /*
1036  * Switch back for ESPFIX stack to the normal zerobased stack
1037  *
1038  * We can't call C functions using the ESPFIX stack. This code reads
1039  * the high word of the segment base from the GDT and swiches to the
1040  * normal stack and adjusts ESP with the matching offset.
1041  */
1042 #ifdef CONFIG_X86_ESPFIX32
1043         /* fixup the stack */
1044         mov     GDT_ESPFIX_SS + 4, %al /* bits 16..23 */
1045         mov     GDT_ESPFIX_SS + 7, %ah /* bits 24..31 */
1046         shl     $16, %eax
1047         addl    %esp, %eax                      /* the adjusted stack pointer */
1048         pushl   $__KERNEL_DS
1049         pushl   %eax
1050         lss     (%esp), %esp                    /* switch to the normal stack segment */
1051 #endif
1052 .endm
1053 .macro UNWIND_ESPFIX_STACK
1054 #ifdef CONFIG_X86_ESPFIX32
1055         movl    %ss, %eax
1056         /* see if on espfix stack */
1057         cmpw    $__ESPFIX_SS, %ax
1058         jne     27f
1059         movl    $__KERNEL_DS, %eax
1060         movl    %eax, %ds
1061         movl    %eax, %es
1062         /* switch to normal stack */
1063         FIXUP_ESPFIX_STACK
1064 27:
1065 #endif
1066 .endm
1067
1068 /*
1069  * Build the entry stubs with some assembler magic.
1070  * We pack 1 stub into every 8-byte block.
1071  */
1072         .align 8
1073 ENTRY(irq_entries_start)
1074     vector=FIRST_EXTERNAL_VECTOR
1075     .rept (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
1076         pushl   $(~vector+0x80)                 /* Note: always in signed byte range */
1077     vector=vector+1
1078         jmp     common_interrupt
1079         .align  8
1080     .endr
1081 END(irq_entries_start)
1082
1083 #ifdef CONFIG_X86_LOCAL_APIC
1084         .align 8
1085 ENTRY(spurious_entries_start)
1086     vector=FIRST_SYSTEM_VECTOR
1087     .rept (NR_VECTORS - FIRST_SYSTEM_VECTOR)
1088         pushl   $(~vector+0x80)                 /* Note: always in signed byte range */
1089     vector=vector+1
1090         jmp     common_spurious
1091         .align  8
1092     .endr
1093 END(spurious_entries_start)
1094
1095 common_spurious:
1096         ASM_CLAC
1097         addl    $-0x80, (%esp)                  /* Adjust vector into the [-256, -1] range */
1098         SAVE_ALL switch_stacks=1
1099         ENCODE_FRAME_POINTER
1100         TRACE_IRQS_OFF
1101         movl    %esp, %eax
1102         call    smp_spurious_interrupt
1103         jmp     ret_from_intr
1104 ENDPROC(common_spurious)
1105 #endif
1106
1107 /*
1108  * the CPU automatically disables interrupts when executing an IRQ vector,
1109  * so IRQ-flags tracing has to follow that:
1110  */
1111         .p2align CONFIG_X86_L1_CACHE_SHIFT
1112 common_interrupt:
1113         ASM_CLAC
1114         addl    $-0x80, (%esp)                  /* Adjust vector into the [-256, -1] range */
1115
1116         SAVE_ALL switch_stacks=1
1117         ENCODE_FRAME_POINTER
1118         TRACE_IRQS_OFF
1119         movl    %esp, %eax
1120         call    do_IRQ
1121         jmp     ret_from_intr
1122 ENDPROC(common_interrupt)
1123
1124 #define BUILD_INTERRUPT3(name, nr, fn)                  \
1125 ENTRY(name)                                             \
1126         ASM_CLAC;                                       \
1127         pushl   $~(nr);                                 \
1128         SAVE_ALL switch_stacks=1;                       \
1129         ENCODE_FRAME_POINTER;                           \
1130         TRACE_IRQS_OFF                                  \
1131         movl    %esp, %eax;                             \
1132         call    fn;                                     \
1133         jmp     ret_from_intr;                          \
1134 ENDPROC(name)
1135
1136 #define BUILD_INTERRUPT(name, nr)               \
1137         BUILD_INTERRUPT3(name, nr, smp_##name); \
1138
1139 /* The include is where all of the SMP etc. interrupts come from */
1140 #include <asm/entry_arch.h>
1141
1142 ENTRY(coprocessor_error)
1143         ASM_CLAC
1144         pushl   $0
1145         pushl   $do_coprocessor_error
1146         jmp     common_exception
1147 END(coprocessor_error)
1148
1149 ENTRY(simd_coprocessor_error)
1150         ASM_CLAC
1151         pushl   $0
1152 #ifdef CONFIG_X86_INVD_BUG
1153         /* AMD 486 bug: invd from userspace calls exception 19 instead of #GP */
1154         ALTERNATIVE "pushl      $do_general_protection",        \
1155                     "pushl      $do_simd_coprocessor_error",    \
1156                     X86_FEATURE_XMM
1157 #else
1158         pushl   $do_simd_coprocessor_error
1159 #endif
1160         jmp     common_exception
1161 END(simd_coprocessor_error)
1162
1163 ENTRY(device_not_available)
1164         ASM_CLAC
1165         pushl   $-1                             # mark this as an int
1166         pushl   $do_device_not_available
1167         jmp     common_exception
1168 END(device_not_available)
1169
1170 #ifdef CONFIG_PARAVIRT
1171 ENTRY(native_iret)
1172         iret
1173         _ASM_EXTABLE(native_iret, iret_exc)
1174 END(native_iret)
1175 #endif
1176
1177 ENTRY(overflow)
1178         ASM_CLAC
1179         pushl   $0
1180         pushl   $do_overflow
1181         jmp     common_exception
1182 END(overflow)
1183
1184 ENTRY(bounds)
1185         ASM_CLAC
1186         pushl   $0
1187         pushl   $do_bounds
1188         jmp     common_exception
1189 END(bounds)
1190
1191 ENTRY(invalid_op)
1192         ASM_CLAC
1193         pushl   $0
1194         pushl   $do_invalid_op
1195         jmp     common_exception
1196 END(invalid_op)
1197
1198 ENTRY(coprocessor_segment_overrun)
1199         ASM_CLAC
1200         pushl   $0
1201         pushl   $do_coprocessor_segment_overrun
1202         jmp     common_exception
1203 END(coprocessor_segment_overrun)
1204
1205 ENTRY(invalid_TSS)
1206         ASM_CLAC
1207         pushl   $do_invalid_TSS
1208         jmp     common_exception
1209 END(invalid_TSS)
1210
1211 ENTRY(segment_not_present)
1212         ASM_CLAC
1213         pushl   $do_segment_not_present
1214         jmp     common_exception
1215 END(segment_not_present)
1216
1217 ENTRY(stack_segment)
1218         ASM_CLAC
1219         pushl   $do_stack_segment
1220         jmp     common_exception
1221 END(stack_segment)
1222
1223 ENTRY(alignment_check)
1224         ASM_CLAC
1225         pushl   $do_alignment_check
1226         jmp     common_exception
1227 END(alignment_check)
1228
1229 ENTRY(divide_error)
1230         ASM_CLAC
1231         pushl   $0                              # no error code
1232         pushl   $do_divide_error
1233         jmp     common_exception
1234 END(divide_error)
1235
1236 #ifdef CONFIG_X86_MCE
1237 ENTRY(machine_check)
1238         ASM_CLAC
1239         pushl   $0
1240         pushl   machine_check_vector
1241         jmp     common_exception
1242 END(machine_check)
1243 #endif
1244
1245 ENTRY(spurious_interrupt_bug)
1246         ASM_CLAC
1247         pushl   $0
1248         pushl   $do_spurious_interrupt_bug
1249         jmp     common_exception
1250 END(spurious_interrupt_bug)
1251
1252 #ifdef CONFIG_XEN
1253 ENTRY(xen_hypervisor_callback)
1254         pushl   $-1                             /* orig_ax = -1 => not a system call */
1255         SAVE_ALL
1256         ENCODE_FRAME_POINTER
1257         TRACE_IRQS_OFF
1258
1259         /*
1260          * Check to see if we got the event in the critical
1261          * region in xen_iret_direct, after we've reenabled
1262          * events and checked for pending events.  This simulates
1263          * iret instruction's behaviour where it delivers a
1264          * pending interrupt when enabling interrupts:
1265          */
1266         movl    PT_EIP(%esp), %eax
1267         cmpl    $xen_iret_start_crit, %eax
1268         jb      1f
1269         cmpl    $xen_iret_end_crit, %eax
1270         jae     1f
1271
1272         jmp     xen_iret_crit_fixup
1273
1274 ENTRY(xen_do_upcall)
1275 1:      mov     %esp, %eax
1276         call    xen_evtchn_do_upcall
1277 #ifndef CONFIG_PREEMPT
1278         call    xen_maybe_preempt_hcall
1279 #endif
1280         jmp     ret_from_intr
1281 ENDPROC(xen_hypervisor_callback)
1282
1283 /*
1284  * Hypervisor uses this for application faults while it executes.
1285  * We get here for two reasons:
1286  *  1. Fault while reloading DS, ES, FS or GS
1287  *  2. Fault while executing IRET
1288  * Category 1 we fix up by reattempting the load, and zeroing the segment
1289  * register if the load fails.
1290  * Category 2 we fix up by jumping to do_iret_error. We cannot use the
1291  * normal Linux return path in this case because if we use the IRET hypercall
1292  * to pop the stack frame we end up in an infinite loop of failsafe callbacks.
1293  * We distinguish between categories by maintaining a status value in EAX.
1294  */
1295 ENTRY(xen_failsafe_callback)
1296         pushl   %eax
1297         movl    $1, %eax
1298 1:      mov     4(%esp), %ds
1299 2:      mov     8(%esp), %es
1300 3:      mov     12(%esp), %fs
1301 4:      mov     16(%esp), %gs
1302         /* EAX == 0 => Category 1 (Bad segment)
1303            EAX != 0 => Category 2 (Bad IRET) */
1304         testl   %eax, %eax
1305         popl    %eax
1306         lea     16(%esp), %esp
1307         jz      5f
1308         jmp     iret_exc
1309 5:      pushl   $-1                             /* orig_ax = -1 => not a system call */
1310         SAVE_ALL
1311         ENCODE_FRAME_POINTER
1312         jmp     ret_from_exception
1313
1314 .section .fixup, "ax"
1315 6:      xorl    %eax, %eax
1316         movl    %eax, 4(%esp)
1317         jmp     1b
1318 7:      xorl    %eax, %eax
1319         movl    %eax, 8(%esp)
1320         jmp     2b
1321 8:      xorl    %eax, %eax
1322         movl    %eax, 12(%esp)
1323         jmp     3b
1324 9:      xorl    %eax, %eax
1325         movl    %eax, 16(%esp)
1326         jmp     4b
1327 .previous
1328         _ASM_EXTABLE(1b, 6b)
1329         _ASM_EXTABLE(2b, 7b)
1330         _ASM_EXTABLE(3b, 8b)
1331         _ASM_EXTABLE(4b, 9b)
1332 ENDPROC(xen_failsafe_callback)
1333
1334 BUILD_INTERRUPT3(xen_hvm_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
1335                  xen_evtchn_do_upcall)
1336
1337 #endif /* CONFIG_XEN */
1338
1339 #if IS_ENABLED(CONFIG_HYPERV)
1340
1341 BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
1342                  hyperv_vector_handler)
1343
1344 BUILD_INTERRUPT3(hyperv_reenlightenment_vector, HYPERV_REENLIGHTENMENT_VECTOR,
1345                  hyperv_reenlightenment_intr)
1346
1347 BUILD_INTERRUPT3(hv_stimer0_callback_vector, HYPERV_STIMER0_VECTOR,
1348                  hv_stimer0_vector_handler)
1349
1350 #endif /* CONFIG_HYPERV */
1351
1352 ENTRY(page_fault)
1353         ASM_CLAC
1354         pushl   $do_page_fault
1355         ALIGN
1356         jmp common_exception
1357 END(page_fault)
1358
1359 common_exception:
1360         /* the function address is in %gs's slot on the stack */
1361         pushl   %fs
1362         pushl   %es
1363         pushl   %ds
1364         pushl   %eax
1365         movl    $(__USER_DS), %eax
1366         movl    %eax, %ds
1367         movl    %eax, %es
1368         movl    $(__KERNEL_PERCPU), %eax
1369         movl    %eax, %fs
1370         pushl   %ebp
1371         pushl   %edi
1372         pushl   %esi
1373         pushl   %edx
1374         pushl   %ecx
1375         pushl   %ebx
1376         SWITCH_TO_KERNEL_STACK
1377         ENCODE_FRAME_POINTER
1378         cld
1379         UNWIND_ESPFIX_STACK
1380         GS_TO_REG %ecx
1381         movl    PT_GS(%esp), %edi               # get the function address
1382         movl    PT_ORIG_EAX(%esp), %edx         # get the error code
1383         movl    $-1, PT_ORIG_EAX(%esp)          # no syscall to restart
1384         REG_TO_PTGS %ecx
1385         SET_KERNEL_GS %ecx
1386         TRACE_IRQS_OFF
1387         movl    %esp, %eax                      # pt_regs pointer
1388         CALL_NOSPEC %edi
1389         jmp     ret_from_exception
1390 END(common_exception)
1391
1392 ENTRY(debug)
1393         /*
1394          * Entry from sysenter is now handled in common_exception
1395          */
1396         ASM_CLAC
1397         pushl   $-1                             # mark this as an int
1398         pushl   $do_debug
1399         jmp     common_exception
1400 END(debug)
1401
1402 /*
1403  * NMI is doubly nasty.  It can happen on the first instruction of
1404  * entry_SYSENTER_32 (just like #DB), but it can also interrupt the beginning
1405  * of the #DB handler even if that #DB in turn hit before entry_SYSENTER_32
1406  * switched stacks.  We handle both conditions by simply checking whether we
1407  * interrupted kernel code running on the SYSENTER stack.
1408  */
1409 ENTRY(nmi)
1410         ASM_CLAC
1411
1412 #ifdef CONFIG_X86_ESPFIX32
1413         pushl   %eax
1414         movl    %ss, %eax
1415         cmpw    $__ESPFIX_SS, %ax
1416         popl    %eax
1417         je      .Lnmi_espfix_stack
1418 #endif
1419
1420         pushl   %eax                            # pt_regs->orig_ax
1421         SAVE_ALL_NMI cr3_reg=%edi
1422         ENCODE_FRAME_POINTER
1423         xorl    %edx, %edx                      # zero error code
1424         movl    %esp, %eax                      # pt_regs pointer
1425
1426         /* Are we currently on the SYSENTER stack? */
1427         movl    PER_CPU_VAR(cpu_entry_area), %ecx
1428         addl    $CPU_ENTRY_AREA_entry_stack + SIZEOF_entry_stack, %ecx
1429         subl    %eax, %ecx      /* ecx = (end of entry_stack) - esp */
1430         cmpl    $SIZEOF_entry_stack, %ecx
1431         jb      .Lnmi_from_sysenter_stack
1432
1433         /* Not on SYSENTER stack. */
1434         call    do_nmi
1435         jmp     .Lnmi_return
1436
1437 .Lnmi_from_sysenter_stack:
1438         /*
1439          * We're on the SYSENTER stack.  Switch off.  No one (not even debug)
1440          * is using the thread stack right now, so it's safe for us to use it.
1441          */
1442         movl    %esp, %ebx
1443         movl    PER_CPU_VAR(cpu_current_top_of_stack), %esp
1444         call    do_nmi
1445         movl    %ebx, %esp
1446
1447 .Lnmi_return:
1448         CHECK_AND_APPLY_ESPFIX
1449         RESTORE_ALL_NMI cr3_reg=%edi pop=4
1450         jmp     .Lirq_return
1451
1452 #ifdef CONFIG_X86_ESPFIX32
1453 .Lnmi_espfix_stack:
1454         /*
1455          * create the pointer to lss back
1456          */
1457         pushl   %ss
1458         pushl   %esp
1459         addl    $4, (%esp)
1460         /* copy the iret frame of 12 bytes */
1461         .rept 3
1462         pushl   16(%esp)
1463         .endr
1464         pushl   %eax
1465         SAVE_ALL_NMI cr3_reg=%edi
1466         ENCODE_FRAME_POINTER
1467         FIXUP_ESPFIX_STACK                      # %eax == %esp
1468         xorl    %edx, %edx                      # zero error code
1469         call    do_nmi
1470         RESTORE_ALL_NMI cr3_reg=%edi
1471         lss     12+4(%esp), %esp                # back to espfix stack
1472         jmp     .Lirq_return
1473 #endif
1474 END(nmi)
1475
1476 ENTRY(int3)
1477         ASM_CLAC
1478         pushl   $-1                             # mark this as an int
1479
1480         SAVE_ALL switch_stacks=1
1481         ENCODE_FRAME_POINTER
1482         TRACE_IRQS_OFF
1483         xorl    %edx, %edx                      # zero error code
1484         movl    %esp, %eax                      # pt_regs pointer
1485         call    do_int3
1486         jmp     ret_from_exception
1487 END(int3)
1488
1489 ENTRY(general_protection)
1490         ASM_CLAC
1491         pushl   $do_general_protection
1492         jmp     common_exception
1493 END(general_protection)
1494
1495 #ifdef CONFIG_KVM_GUEST
1496 ENTRY(async_page_fault)
1497         ASM_CLAC
1498         pushl   $do_async_page_fault
1499         jmp     common_exception
1500 END(async_page_fault)
1501 #endif
1502
1503 ENTRY(rewind_stack_and_make_dead)
1504         /* Prevent any naive code from trying to unwind to our caller. */
1505         xorl    %ebp, %ebp
1506
1507         movl    PER_CPU_VAR(cpu_current_top_of_stack), %esi
1508         leal    -TOP_OF_KERNEL_STACK_PADDING-PTREGS_SIZE(%esi), %esp
1509
1510         call    make_task_dead
1511 1:      jmp 1b
1512 END(rewind_stack_and_make_dead)