From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751154AbcFRU4c (ORCPT ); Sat, 18 Jun 2016 16:56:32 -0400 Received: from mail-yw0-f193.google.com ([209.85.161.193]:33048 "EHLO mail-yw0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751042AbcFRU4b (ORCPT ); Sat, 18 Jun 2016 16:56:31 -0400 From: Brian Gerst To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Ingo Molnar , "H. Peter Anvin" , Denys Vlasenko , Andy Lutomirski , Borislav Petkov , Thomas Gleixner Subject: [PATCH v2 0/6] x86: Rewrite switch_to() Date: Sat, 18 Jun 2016 16:56:12 -0400 Message-Id: <1466283378-17062-1-git-send-email-brgerst@gmail.com> X-Mailer: git-send-email 2.5.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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(-)