This patch set simplifies the switch_to() code, by moving the stack switch code out of line into an asm stub before calling __switch_to(). This ends up being more readable, and using the C calling convention instead of clobbering all registers improves code generation. It also allows newly forked processes to construct a special stack frame to seamlessly flow to ret_from_fork, instead of using a test and branch, or an unbalanced call/ret.
Changes from v1: - Added struct inactive_task_frame - Added comments about kernel threads returning to userspace - Cleaned up some incorrect uses of thread.sp Brian Gerst (6): x86-32, kgdb: Don't use thread.ip in sleeping_thread_to_gdb_regs() x86-64, kgdb: clear GDB_PS on 64-bit x86: Add struct inactive_task_frame x86: Rewrite switch_to() code x86: Pass kernel thread parameters in fork_frame x86: Fix thread_saved_pc() arch/x86/entry/entry_32.S | 68 +++++++++++++----- arch/x86/entry/entry_64.S | 76 ++++++++++++++------ arch/x86/include/asm/processor.h | 13 +--- arch/x86/include/asm/stacktrace.h | 4 +- arch/x86/include/asm/switch_to.h | 142 +++++++------------------------------ arch/x86/include/asm/thread_info.h | 2 - arch/x86/kernel/asm-offsets.c | 6 ++ arch/x86/kernel/asm-offsets_32.c | 5 ++ arch/x86/kernel/asm-offsets_64.c | 5 ++ arch/x86/kernel/kgdb.c | 8 +-- arch/x86/kernel/process.c | 13 +++- arch/x86/kernel/process_32.c | 29 +++----- arch/x86/kernel/process_64.c | 19 ++--- arch/x86/kernel/smpboot.c | 1 - 14 files changed, 187 insertions(+), 204 deletions(-)