Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752474AbdCEAXi convert rfc822-to-8bit (ORCPT ); Sat, 4 Mar 2017 19:23:38 -0500 Received: from terminus.zytor.com ([65.50.211.136]:60270 "EHLO mail.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751758AbdCEAXh (ORCPT ); Sat, 4 Mar 2017 19:23:37 -0500 Date: Sat, 04 Mar 2017 16:23:17 -0800 User-Agent: K-9 Mail for Android In-Reply-To: <20170305001447.kcxignj3nsq35vci@pd.tnic> References: <20170304224341.zfp4fl37ypt57amg@pd.tnic> <5CCEF10D-5647-4503-A398-0681DF2C8847@zytor.com> <20170305001447.kcxignj3nsq35vci@pd.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Subject: Re: Question Regarding ERMS memcpy To: Borislav Petkov CC: Logan Gunthorpe , Thomas Gleixner , Ingo Molnar , Tony Luck , Al Viro , the arch/x86 maintainers , Linux Kernel Mailing List From: hpa@zytor.com Message-ID: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1554 Lines: 41 On March 4, 2017 4:14:47 PM PST, Borislav Petkov wrote: >On Sat, Mar 04, 2017 at 03:55:27PM -0800, hpa@zytor.com wrote: >> For newer processors, as determined by -mtune=, it is actually the >> best option for an arbitrary copy. > >So his doesn't have ERMS - it is a SNB - so if for SNB REP_GOOD is >the best option for memcpy, then we should probably build with >-fno-builtin-memcpy unconditionally. Otherwise gcc apparently inserts >its own memcpy variant. > >And this is probably wrong because we do the detection at boot time and >not at build time. > >For example here it generates REP; MOVSL for the call in >drivers/firmware/dmi_scan.c::dmi_scan_machine() which looks wrong to >me. >Length is 32 so it could just as well do REP; MOVSQ. > >IOW, we could do something like this: > >--- >diff --git a/arch/x86/Makefile b/arch/x86/Makefile >index 2d449337a360..c1b68d147b8d 100644 >--- a/arch/x86/Makefile >+++ b/arch/x86/Makefile >@@ -142,10 +142,7 @@ ifdef CONFIG_X86_X32 > endif > export CONFIG_X86_X32_ABI > >-# Don't unroll struct assignments with kmemcheck enabled >-ifeq ($(CONFIG_KMEMCHECK),y) >- KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy) >-endif >+KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy) > > # Stackpointer is addressed different for 32 bit and 64 bit x86 > sp-$(CONFIG_X86_32) := esp What are the compilation flags? It may be that gcc still does TRT depending on this call site. I'd check what gcc6 or 7 generates, though. -- Sent from my Android device with K-9 Mail. Please excuse my brevity.