Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754062AbbKXJhh (ORCPT ); Tue, 24 Nov 2015 04:37:37 -0500 Received: from terminus.zytor.com ([198.137.202.10]:55489 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752625AbbKXJhe (ORCPT ); Tue, 24 Nov 2015 04:37:34 -0500 Date: Tue, 24 Nov 2015 01:36:43 -0800 From: tip-bot for Andy Lutomirski Message-ID: Cc: luto@amacapital.net, luto@kernel.org, linux-kernel@vger.kernel.org, fweisbec@gmail.com, tglx@linutronix.de, torvalds@linux-foundation.org, peterz@infradead.org, brgerst@gmail.com, mingo@kernel.org, hpa@zytor.com, dvlasenk@redhat.com, bp@alien8.de Reply-To: luto@kernel.org, linux-kernel@vger.kernel.org, luto@amacapital.net, tglx@linutronix.de, torvalds@linux-foundation.org, fweisbec@gmail.com, peterz@infradead.org, bp@alien8.de, mingo@kernel.org, dvlasenk@redhat.com, hpa@zytor.com, brgerst@gmail.com In-Reply-To: <73ee804fff48cd8c66b65b724f9f728a11a8c686.1447361906.git.luto@kernel.org> References: <73ee804fff48cd8c66b65b724f9f728a11a8c686.1447361906.git.luto@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86/entry/64: Bypass enter_from_user_mode on non-context-tracking boots Git-Commit-ID: 478dc89cf316697e8029411a64ea2b30c528434d 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 Content-Length: 2955 Lines: 92 Commit-ID: 478dc89cf316697e8029411a64ea2b30c528434d Gitweb: http://git.kernel.org/tip/478dc89cf316697e8029411a64ea2b30c528434d Author: Andy Lutomirski AuthorDate: Thu, 12 Nov 2015 12:59:04 -0800 Committer: Ingo Molnar CommitDate: Tue, 24 Nov 2015 09:56:44 +0100 x86/entry/64: Bypass enter_from_user_mode on non-context-tracking boots On CONFIG_CONTEXT_TRACKING kernels that have context tracking disabled at runtime (which includes most distro kernels), we still have the overhead of a call to enter_from_user_mode in interrupt and exception entries. If jump labels are available, this uses the jump label infrastructure to skip the call. Signed-off-by: Andy Lutomirski Reviewed-by: Thomas Gleixner Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: Frederic Weisbecker Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/73ee804fff48cd8c66b65b724f9f728a11a8c686.1447361906.git.luto@kernel.org Signed-off-by: Ingo Molnar --- arch/x86/entry/calling.h | 15 +++++++++++++++ arch/x86/entry/entry_64.S | 8 ++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h index 3c71dd9..e32206e 100644 --- a/arch/x86/entry/calling.h +++ b/arch/x86/entry/calling.h @@ -1,3 +1,5 @@ +#include + /* x86 function call convention, 64-bit: @@ -232,3 +234,16 @@ For 32-bit we have the following conventions - kernel is built with #endif /* CONFIG_X86_64 */ +/* + * This does 'call enter_from_user_mode' unless we can avoid it based on + * kernel config or using the static jump infrastructure. + */ +.macro CALL_enter_from_user_mode +#ifdef CONFIG_CONTEXT_TRACKING +#ifdef HAVE_JUMP_LABEL + STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0 +#endif + call enter_from_user_mode +.Lafter_call_\@: +#endif +.endm diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index a55697d..9d34d3c 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -520,9 +520,7 @@ END(irq_entries_start) */ TRACE_IRQS_OFF -#ifdef CONFIG_CONTEXT_TRACKING - call enter_from_user_mode -#endif + CALL_enter_from_user_mode 1: /* @@ -1066,9 +1064,7 @@ ENTRY(error_entry) * (which can take locks). */ TRACE_IRQS_OFF -#ifdef CONFIG_CONTEXT_TRACKING - call enter_from_user_mode -#endif + CALL_enter_from_user_mode ret .Lerror_entry_done: -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/