From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752348AbbDDJ1r (ORCPT ); Sat, 4 Apr 2015 05:27:47 -0400 Received: from mail.skyhub.de ([78.46.96.112]:47880 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752186AbbDDJ1m (ORCPT ); Sat, 4 Apr 2015 05:27:42 -0400 Date: Sat, 4 Apr 2015 11:25:36 +0200 From: Borislav Petkov To: Quentin Casasnovas Cc: X86 ML , LKML , "H. Peter Anvin" , Ingo Molnar , Thomas Gleixner , Oleg Nesterov , Andy Lutomirski Subject: Re: [PATCH] x86/xsave: Robustify and merge macros Message-ID: <20150404092536.GB21152@pd.tnic> References: <20150403140630.GD14902@chrystal.uk.oracle.com> <20150403141426.GE14902@chrystal.uk.oracle.com> <20150403152324.GG3418@pd.tnic> <20150403154055.GF14902@chrystal.uk.oracle.com> <20150403170625.GJ3418@pd.tnic> <20150403173306.GG14902@chrystal.uk.oracle.com> <20150403174824.GL3418@pd.tnic> <20150403204217.GH14902@chrystal.uk.oracle.com> <20150404073454.GA21152@pd.tnic> <20150404083611.GA5922@chrystal.uk.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20150404083611.GA5922@chrystal.uk.oracle.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Apr 04, 2015 at 10:36:11AM +0200, Quentin Casasnovas wrote: > Since all of these are compile time constants, could we not use the safe > variant on that same page? Not that I'm too worried about the signed right > shift but heh that would be portable and should not impact performance > anyway, so no added value in using the optimized version is there? Seems to work with the experimental diff below. I need to do -(-(x < y)) with the last term though as we're working with s32s. --- diff --git a/arch/x86/include/asm/alternative-asm.h b/arch/x86/include/asm/alternative-asm.h index 44a1fc5439d3..2cb6da2716bf 100644 --- a/arch/x86/include/asm/alternative-asm.h +++ b/arch/x86/include/asm/alternative-asm.h @@ -53,14 +53,14 @@ * Shamelessly stolen and adapted from: * http://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax */ -#define alt_max_short(a,b) (((a) - (((a) - (b)) & (((a) - (b)) >> 15))) & 0xffff) +#define alt_max_short(a, b) ((a) ^ (((a) ^ (b)) & -(-((a) < (b))))) .macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2 140: \oldinstr 141: - .skip -((alt_max_short(new_len1, new_len2) - old_len) > 0) * \ - (alt_max_short(new_len1, new_len2) - old_len),0x90 + .skip -((alt_max_short(new_len1, new_len2) - (old_len)) > 0) * \ + (alt_max_short(new_len1, new_len2) - (old_len)),0x90 142: .pushsection .altinstructions,"a" diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S index 93118fb23976..453b6a05a07e 100644 --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S @@ -29,6 +29,14 @@ ENTRY(__memset) ALTERNATIVE_2 "jmp memset_orig", "", X86_FEATURE_REP_GOOD, \ "jmp memset_erms", X86_FEATURE_ERMS + ALTERNATIVE_2 \ + ".byte 0xc3, 0xc3, 0xc3", \ + ".byte 0x66, 0x66, 0x66, 0x90", \ + X86_FEATURE_ALWAYS, \ + ".byte 0x66, 0x66, 0x66, 0x66, 0xcc", \ + X86_FEATURE_ALWAYS + + movq %rdi,%r9 movq %rdx,%rcx andl $7,%edx > On the bonus side, you're getting rid of the double 'alt_end_marker' label > in case of an alternative_2()! > > Looks good to me and I find it much easier to understand here :) Cool. Please give it more critical staring as we're under time pressure here. Thanks! -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. --