Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964995AbbD0O5k (ORCPT ); Mon, 27 Apr 2015 10:57:40 -0400 Received: from mail-ie0-f173.google.com ([209.85.223.173]:33332 "EHLO mail-ie0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964882AbbD0O5i (ORCPT ); Mon, 27 Apr 2015 10:57:38 -0400 MIME-Version: 1.0 In-Reply-To: <20150427113506.GG6774@pd.tnic> References: <5d120f358612d73fc909f5bfa47e7bd082db0af0.1429841474.git.luto@kernel.org> <20150425211206.GE32099@pd.tnic> <20150427085305.GB6774@pd.tnic> <20150427113506.GG6774@pd.tnic> Date: Mon, 27 Apr 2015 07:57:36 -0700 X-Google-Sender-Auth: CWEZ7imsfo4zMrjdcAWYKl3ZZlI Message-ID: Subject: Re: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue From: Linus Torvalds To: Borislav Petkov Cc: Andy Lutomirski , Andy Lutomirski , X86 ML , "H. Peter Anvin" , Denys Vlasenko , Brian Gerst , Denys Vlasenko , Ingo Molnar , Steven Rostedt , Oleg Nesterov , Frederic Weisbecker , Alexei Starovoitov , Will Drewry , Kees Cook , Linux Kernel Mailing List Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1351 Lines: 33 On Mon, Apr 27, 2015 at 4:35 AM, Borislav Petkov wrote: > > /* > * Change top 16 bits to be the sign-extension of 47th bit, if this > * changed %rcx, it was not canonical. > */ > ALTERNATIVE "", \ > "shl $(64 - (47+1)), %rcx; \ > sar $(64 - (47+1)), %rcx; \ > cmpq %rcx, %r11; \ > jne opportunistic_sysret_failed", X86_BUG_SYSRET_CANON_RCX Guys, if we're looking at cycles for this, then don't do the "exact canonical test". and go back to just doing shr $__VIRTUAL_MASK_SHIFT, %rcx jnz opportunistic_sysret_failed which is much smaller. In fact, aim to make the conditional jump be a two-byte one (jump forward to another jump if required - it's a slow-path that doesn't matter at *all* for the taken case), and the end result is just six bytes. That way you can use alternative to replace it with one single noop on AMD. Because dammit, if we're playing these kinds of games, let's do it *right*. No half measures. Linus -- 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/