From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753384AbbCDW5Z (ORCPT ); Wed, 4 Mar 2015 17:57:25 -0500 Received: from terminus.zytor.com ([198.137.202.10]:42058 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751773AbbCDW5W (ORCPT ); Wed, 4 Mar 2015 17:57:22 -0500 Date: Wed, 4 Mar 2015 14:56:46 -0800 From: tip-bot for Denys Vlasenko Message-ID: Cc: hpa@zytor.com, fweisbec@gmail.com, bp@alien8.de, luto@amacapital.net, mingo@kernel.org, rostedt@goodmis.org, oleg@redhat.com, torvalds@linux-foundation.org, ast@plumgrid.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, keescook@chromium.org, wad@chromium.org, dvlasenk@redhat.com Reply-To: linux-kernel@vger.kernel.org, ast@plumgrid.com, dvlasenk@redhat.com, wad@chromium.org, keescook@chromium.org, tglx@linutronix.de, hpa@zytor.com, bp@alien8.de, fweisbec@gmail.com, luto@amacapital.net, mingo@kernel.org, torvalds@linux-foundation.org, oleg@redhat.com, rostedt@goodmis.org In-Reply-To: <1aef69b346a6db0d99cdfb0f5ba83e8c985e27d7.1424989793.git.luto@amacapital.net> References: <1aef69b346a6db0d99cdfb0f5ba83e8c985e27d7.1424989793.git.luto@amacapital.net> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86/asm/entry/64: Simplify optimistic SYSRET Git-Commit-ID: d441c1f2b73ec742c2e55be804ebc6fee130c77f X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: d441c1f2b73ec742c2e55be804ebc6fee130c77f Gitweb: http://git.kernel.org/tip/d441c1f2b73ec742c2e55be804ebc6fee130c77f Author: Denys Vlasenko AuthorDate: Thu, 26 Feb 2015 14:40:38 -0800 Committer: Ingo Molnar CommitDate: Wed, 4 Mar 2015 22:50:52 +0100 x86/asm/entry/64: Simplify optimistic SYSRET Avoid redundant load of %r11 (it is already loaded a few instructions before). Also simplify %rsp restoration, instead of two steps: add $0x80, %rsp mov 0x18(%rsp), %rsp we can do a simplified single step to restore user-space RSP: mov 0x98(%rsp), %rsp and get the same result. Signed-off-by: Denys Vlasenko Signed-off-by: Andy Lutomirski [ Clarified the changelog. ] Cc: Alexei Starovoitov Cc: Borislav Petkov Cc: Frederic Weisbecker Cc: H. Peter Anvin Cc: Kees Cook Cc: Linus Torvalds Cc: Oleg Nesterov Cc: Steven Rostedt Cc: Thomas Gleixner Cc: Will Drewry Link: http://lkml.kernel.org/r/1aef69b346a6db0d99cdfb0f5ba83e8c985e27d7.1424989793.git.luto@amacapital.net Signed-off-by: Ingo Molnar --- arch/x86/include/asm/calling.h | 3 +++ arch/x86/kernel/entry_64.S | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h index 3374235..f1a962f 100644 --- a/arch/x86/include/asm/calling.h +++ b/arch/x86/include/asm/calling.h @@ -176,6 +176,9 @@ For 32-bit we have the following conventions - kernel is built with .macro RESTORE_C_REGS_EXCEPT_RCX RESTORE_C_REGS_HELPER 1,0,1,1,1 .endm + .macro RESTORE_C_REGS_EXCEPT_R11 + RESTORE_C_REGS_HELPER 1,1,0,1,1 + .endm .macro RESTORE_RSI_RDI RESTORE_C_REGS_HELPER 0,0,0,0,0 .endm diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 858e94e..bc15278 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -757,9 +757,9 @@ retint_swapgs: /* return to user-space */ */ irq_return_via_sysret: CFI_REMEMBER_STATE - RESTORE_C_REGS - REMOVE_PT_GPREGS_FROM_STACK 8 - movq (RSP-RIP)(%rsp),%rsp + /* r11 is already restored (see code above) */ + RESTORE_C_REGS_EXCEPT_R11 + movq RSP(%rsp),%rsp USERGS_SYSRET64 CFI_RESTORE_STATE