x86: fixup more paravirt fallout

Use a common irq_return entry point for all the iret places, which
need the paravirt INTERRUPT return wrapper.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by

Ingo Molnar and committed by
Thomas Gleixner
3701d863 1ec7fd50

+19 -14
+6 -9
arch/x86/kernel/entry_32.S
··· 409 RESTORE_REGS 410 addl $4, %esp # skip orig_eax/error_code 411 CFI_ADJUST_CFA_OFFSET -4 412 - 1: INTERRUPT_RETURN 413 .section .fixup,"ax" 414 iret_exc: 415 pushl $0 # no error code ··· 419 .previous 420 .section __ex_table,"a" 421 .align 4 422 - .long 1b,iret_exc 423 .previous 424 425 CFI_RESTORE_STATE ··· 866 RESTORE_REGS 867 lss 12+4(%esp), %esp # back to espfix stack 868 CFI_ADJUST_CFA_OFFSET -24 869 - 1: INTERRUPT_RETURN 870 CFI_ENDPROC 871 - .section __ex_table,"a" 872 - .align 4 873 - .long 1b,iret_exc 874 - .previous 875 KPROBE_END(nmi) 876 877 #ifdef CONFIG_PARAVIRT 878 ENTRY(native_iret) 879 - 1: iret 880 .section __ex_table,"a" 881 .align 4 882 - .long 1b,iret_exc 883 .previous 884 END(native_iret) 885
··· 409 RESTORE_REGS 410 addl $4, %esp # skip orig_eax/error_code 411 CFI_ADJUST_CFA_OFFSET -4 412 + ENTRY(irq_return) 413 + INTERRUPT_RETURN 414 .section .fixup,"ax" 415 iret_exc: 416 pushl $0 # no error code ··· 418 .previous 419 .section __ex_table,"a" 420 .align 4 421 + .long irq_return,iret_exc 422 .previous 423 424 CFI_RESTORE_STATE ··· 865 RESTORE_REGS 866 lss 12+4(%esp), %esp # back to espfix stack 867 CFI_ADJUST_CFA_OFFSET -24 868 + jmp irq_return 869 CFI_ENDPROC 870 KPROBE_END(nmi) 871 872 #ifdef CONFIG_PARAVIRT 873 ENTRY(native_iret) 874 + iret 875 .section __ex_table,"a" 876 .align 4 877 + .long native_iret, iret_exc 878 .previous 879 END(native_iret) 880
+13 -5
arch/x86/kernel/entry_64.S
··· 581 */ 582 TRACE_IRQS_IRETQ 583 restore_args: 584 - RESTORE_ARGS 0,8,0 585 - #ifdef CONFIG_PARAVIRT 586 INTERRUPT_RETURN 587 - #endif 588 ENTRY(native_iret) 589 iretq 590 591 .section __ex_table,"a" 592 .quad native_iret, bad_iret 593 .previous 594 .section .fixup,"ax" 595 bad_iret: 596 /* ··· 812 SWAPGS_UNSAFE_STACK 813 paranoid_restore\trace: 814 RESTORE_ALL 8 815 - INTERRUPT_RETURN 816 paranoid_userspace\trace: 817 GET_THREAD_INFO(%rcx) 818 movl threadinfo_flags(%rcx),%ebx ··· 927 iret run with kernel gs again, so don't set the user space flag. 928 B stepping K8s sometimes report an truncated RIP for IRET 929 exceptions returning to compat mode. Check for these here too. */ 930 - leaq native_iret(%rip),%rbp 931 cmpq %rbp,RIP(%rsp) 932 je error_swapgs 933 movl %ebp,%ebp /* zero extend */
··· 581 */ 582 TRACE_IRQS_IRETQ 583 restore_args: 584 + RESTORE_ARGS 0,8,0 585 + 586 + ENTRY(irq_return) 587 INTERRUPT_RETURN 588 + 589 + .section __ex_table, "a" 590 + .quad irq_return, bad_iret 591 + .previous 592 + 593 + #ifdef CONFIG_PARAVIRT 594 ENTRY(native_iret) 595 iretq 596 597 .section __ex_table,"a" 598 .quad native_iret, bad_iret 599 .previous 600 + #endif 601 + 602 .section .fixup,"ax" 603 bad_iret: 604 /* ··· 804 SWAPGS_UNSAFE_STACK 805 paranoid_restore\trace: 806 RESTORE_ALL 8 807 + jmp irq_return 808 paranoid_userspace\trace: 809 GET_THREAD_INFO(%rcx) 810 movl threadinfo_flags(%rcx),%ebx ··· 919 iret run with kernel gs again, so don't set the user space flag. 920 B stepping K8s sometimes report an truncated RIP for IRET 921 exceptions returning to compat mode. Check for these here too. */ 922 + leaq irq_return(%rip),%rbp 923 cmpq %rbp,RIP(%rsp) 924 je error_swapgs 925 movl %ebp,%ebp /* zero extend */