From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756673AbbJINPq (ORCPT ); Fri, 9 Oct 2015 09:15:46 -0400 Received: from terminus.zytor.com ([198.137.202.10]:46238 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932923AbbJINPm (ORCPT ); Fri, 9 Oct 2015 09:15:42 -0400 Date: Fri, 9 Oct 2015 06:14:45 -0700 From: tip-bot for Andy Lutomirski Message-ID: Cc: bp@alien8.de, luto@kernel.org, brgerst@gmail.com, dvlasenk@redhat.com, mingo@kernel.org, peterz@infradead.org, luto@amacapital.net, torvalds@linux-foundation.org, tglx@linutronix.de, hpa@zytor.com, linux-kernel@vger.kernel.org Reply-To: luto@kernel.org, bp@alien8.de, brgerst@gmail.com, dvlasenk@redhat.com, luto@amacapital.net, peterz@infradead.org, torvalds@linux-foundation.org, mingo@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org, tglx@linutronix.de In-Reply-To: References: To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86/entry: Micro-optimize compat fast syscall arg fetch Git-Commit-ID: c68ca6787bdd6d2df37cf950135aa11e71af358a 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: c68ca6787bdd6d2df37cf950135aa11e71af358a Gitweb: http://git.kernel.org/tip/c68ca6787bdd6d2df37cf950135aa11e71af358a Author: Andy Lutomirski AuthorDate: Mon, 5 Oct 2015 17:48:20 -0700 Committer: Ingo Molnar CommitDate: Fri, 9 Oct 2015 09:41:12 +0200 x86/entry: Micro-optimize compat fast syscall arg fetch We're following a 32-bit pointer, and the uaccess code isn't smart enough to figure out that the access_ok() check isn't needed. This saves about three cycles on a cache-hot fast syscall. Signed-off-by: Andy Lutomirski Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: linux-kernel@vger.kernel.org Link: http://lkml.kernel.org/r/bdff034e2f23c5eb974c760cf494cb5bddce8f29.1444091585.git.luto@kernel.org Signed-off-by: Ingo Molnar --- arch/x86/entry/common.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index d5eee85..08a945d 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -394,8 +394,20 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) * WARNING: We are in CONTEXT_USER and RCU isn't paying attention! */ local_irq_enable(); - if (get_user(*(u32 *)®s->cx, - (u32 __user __force *)(unsigned long)(u32)regs->sp)) { + if ( +#ifdef CONFIG_X86_64 + /* + * Micro-optimization: the pointer we're following is explicitly + * 32 bits, so it can't be out of range. + */ + __get_user(*(u32 *)®s->cx, + (u32 __user __force *)(unsigned long)(u32)regs->sp) +#else + get_user(*(u32 *)®s->cx, + (u32 __user __force *)(unsigned long)(u32)regs->sp) +#endif + ) { + /* User code screwed up. */ local_irq_disable(); regs->ax = -EFAULT;