Skip to content

RFC Pile o' entry stack changes

Andy Lutomirski lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest17 patches 16 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/17x86/asm/64: Remove the restore_c_regs_and_iret labelarch/x86/entry/entry_64.S+2 -35 replies
2/17x86/asm/64: Split the iret-to-user and iret-to-kernel pathsarch/x86/entry/entry_64.S arch/x86/entry/entry_64_compat.S arch/x86/kernel/head_64.S+13 -110 replies
3/17x86/asm/64: Move SWAPGS into the common iret-to-usermode patharch/x86/entry/entry_64.S arch/x86/entry/entry_64_compat.S+11 -180 replies
4/17x86/asm/64: Simplify reg restore code in the standard IRET pathsarch/x86/entry/calling.h arch/x86/entry/entry_64.S+31 -61 reply
5/17x86/asm/64: Shrink paranoid_exit_restore and make labels localarch/x86/entry/entry_64.S+5 -80 replies
6/17x86/asm/64: Use pop instead of movq in syscall_return_via_sysretarch/x86/entry/entry_64.S+11 -30 replies
7/17x86/asm/64: Merge the fast and slow SYSRET pathsarch/x86/entry/entry_64.S+3 -30 replies
8/17x86/asm/64: De-Xen-ify our NMI codearch/x86/entry/entry_64.S+17 -243 replies
9/17x86/asm/32: Pull MSR_IA32_SYSENTER_CS update code out of native_load_sp0()arch/x86/include/asm/processor.h arch/x86/include/asm/switch_to.h arch/x86/kernel/process_32.c +2 more+18 -91 reply
10/17x86/asm/64: Pass sp0 directly to load_sp0()arch/x86/include/asm/paravirt.h arch/x86/include/asm/paravirt_types.h arch/x86/include/asm/processor.h +6 more+22 -300 replies
11/17x86/asm: Add task_top_of_stack() to find the top of a task's stackarch/x86/include/asm/processor.h+2 -00 replies
12/17x86/xen/64: Clean up SP code in cpu_initialize_context()arch/x86/xen/smp_pv.c+14 -31 reply
13/17x86/boot/64: Stop initializing TSS.sp0 at bootarch/x86/kernel/cpu/common.c arch/x86/kernel/process.c+12 -30 replies
14/17x86/asm/64: Remove all remaining direct thread_struct::sp0 readsarch/x86/include/asm/switch_to.h arch/x86/kernel/process_32.c arch/x86/kernel/process_64.c +1 more+10 -40 replies
15/17x86/boot/32: Fix cpu_current_top_of_stack initialization at bootarch/x86/kernel/smpboot.c+1 -20 replies
16/17x86/asm/64: Remove thread_struct::sp0arch/x86/include/asm/compat.h arch/x86/include/asm/processor.h arch/x86/include/asm/switch_to.h +1 more+22 -190 replies
17/17x86/traps: Use a new on_thread_stack() helper to clean up an assertionarch/x86/include/asm/processor.h arch/x86/include/asm/thread_info.h arch/x86/kernel/traps.c+18 -132 replies

Reviews trailers per patch

1 of 17 patches has a Reviewed-by or Acked-by.

PatchBorislav Petkov
1/17R-b
2/17
3/17
4/17
5/17
6/17
7/17
8/17
9/17
10/17
11/17
12/17
13/17
14/17
15/17
16/17
17/17

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [RFC 00/17] Pile o' entry stack changes

Hi all-

Here's a pile of entry changes. In brief summary:

- Lots of people (Linus included) have asked to convert the entry code to pop registers on exit instead of movqing them off the stack. This makes a bunch of progress in that direction.

- Linux's sp0 handling has annoyed me for a while. We have thread_struct::sp0, which never made much sense to me. This series removes it on x86_64 and removes most references on x86_32.

- Xen PV's cpuinit code did incomprehensible things with stack pointers. This makes it comprehensible.

Juergen, this needs a bit of help on Xen -- see the NMI patch for details.

Reviews would be appreciated :)

Andy Lutomirski (17):
x86/asm/64: Remove the restore_c_regs_and_iret label x86/asm/64: Split the iret-to-user and iret-to-kernel paths x86/asm/64: Move SWAPGS into the common iret-to-usermode path x86/asm/64: Simplify reg restore code in the standard IRET paths x86/asm/64: Shrink paranoid_exit_restore and make labels local x86/asm/64: Use pop instead of movq in syscall_return_via_sysret x86/asm/64: Merge the fast and slow SYSRET paths x86/asm/64: De-Xen-ify our NMI code
x86/asm/32: Pull MSR_IA32_SYSENTER_CS update code out of

    native_load_sp0()

x86/asm/64: Pass sp0 directly to load_sp0()
x86/asm: Add task_top_of_stack() to find the top of a task's stack x86/xen/64: Clean up SP code in cpu_initialize_context() x86/boot/64: Stop initializing TSS.sp0 at boot
x86/asm/64: Remove all remaining direct thread_struct::sp0 reads x86/boot/32: Fix cpu_current_top_of_stack initialization at boot x86/asm/64: Remove thread_struct::sp0
x86/traps: Use a new on_thread_stack() helper to clean up an assertion

 arch/x86/entry/calling.h              |   9 +++
 arch/x86/entry/entry_64.S             | 133 ++++++++++++++++++----------------
 arch/x86/entry/entry_64_compat.S      |   3 +-
 arch/x86/include/asm/compat.h         |   1 +
 arch/x86/include/asm/paravirt.h       |   5 +-
 arch/x86/include/asm/paravirt_types.h |   2 +-
 arch/x86/include/asm/processor.h      |  68 +++++++++--------
 arch/x86/include/asm/switch_to.h      |  23 ++++++
 arch/x86/include/asm/thread_info.h    |  11 ---
 arch/x86/kernel/cpu/common.c          |  12 ++-
 arch/x86/kernel/head_64.S             |   2 +-
 arch/x86/kernel/process.c             |   3 +-
 arch/x86/kernel/process_32.c          |   3 +-
 arch/x86/kernel/process_64.c          |   5 +-
 arch/x86/kernel/smpboot.c             |   3 +-
 arch/x86/kernel/traps.c               |   3 +-
 arch/x86/kernel/vm86_32.c             |  14 ++--
 arch/x86/lguest/boot.c                |   7 +-
 arch/x86/xen/enlighten_pv.c           |   7 +-
 arch/x86/xen/smp_pv.c                 |  17 ++++-
 20 files changed, 192 insertions(+), 139 deletions(-)
Signature · 1 line
2.13.5