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