Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp947659imm; Wed, 13 Jun 2018 10:46:44 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLrjE2MQBSEbonSWbiRctjUrF/Fb4l4phl8z3RGVpPtltWeLM7TsDHn1TdWSajPoXN/+JCp X-Received: by 2002:a63:951c:: with SMTP id p28-v6mr4906663pgd.318.1528912004059; Wed, 13 Jun 2018 10:46:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528912004; cv=none; d=google.com; s=arc-20160816; b=LAvm+y8JmwU9wh5NlB9o2LPhF2rWEW9VGyDp6R2Rgb5BoJJ55X89eJDiK9kEroenWS toppzWt8+6GXkiE+Jn3tKi7INnU3l2kJXvnH6rJHGHuz0CaDL5YKYcx4f/as144CfNEM 5wdhUoiny2Rgfyd+hrkVqLLxYfqM8YQ/7wzk1qOBqaRj3XDlXf79RFjNHYi6bSmNIVQL nKd9eDXOT+Nqp4KNiksbxKu1LQ6MsBwFz7wJtKceVZEt1KWOeknz6UaN5A4alvaMvcpj 98xljs9/6nYeXUzROCGfsKu1YEpN8XvdUahhCjTrvabB8/DDx8TlJt6HgpsMgE9XjZLd dVtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature:dkim-filter :arc-authentication-results; bh=AVC5X2edo5duxBhJuj8rb2v8jXoQkhMb8a+4ILgR3sg=; b=cPMmBXubTF1NPo5WymwcHSCp7OJcRMuPAO3pkettM2CySZAEgNgwaVxNRH8Cp3tfuu DT8E6C1HMYBsJvFOeGfnAs2lrV8f75c+AwVDKdrz37L2uCffcTC8axItS4njdplQDkLJ ldHHUzSD3FHhYKaN9qkhKjKBhXVEhgIkCaCvf/G9CSV84AEIcuYP2V0urowVrlYtVYS5 dXuwAjGeGXvJiyPKvSmlxNgh4IjUfTh+3RKsw/dShmlNPH02uz45fKOXL+zqie8hfqXu uxHw306gcWWL9WTxXf1CFfeRrc8CQg+l/JJxpRQnB2qHeACTnZ8QdAXvDJc6HItMoSn/ U2Pg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b="r2+/MO+o"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e62-v6si2803229pgc.37.2018.06.13.10.46.29; Wed, 13 Jun 2018 10:46:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b="r2+/MO+o"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935447AbeFMRov (ORCPT + 99 others); Wed, 13 Jun 2018 13:44:51 -0400 Received: from conssluserg-01.nifty.com ([210.131.2.80]:55877 "EHLO conssluserg-01.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754493AbeFMRot (ORCPT ); Wed, 13 Jun 2018 13:44:49 -0400 Received: from mail-vk0-f54.google.com (mail-vk0-f54.google.com [209.85.213.54]) (authenticated) by conssluserg-01.nifty.com with ESMTP id w5DHibVv005168; Thu, 14 Jun 2018 02:44:38 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com w5DHibVv005168 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1528911878; bh=AVC5X2edo5duxBhJuj8rb2v8jXoQkhMb8a+4ILgR3sg=; h=In-Reply-To:References:From:Date:Subject:To:Cc:From; b=r2+/MO+oixz9IMHOk1CxnOmKI10Jk+uAKJb6l36kRJJw8FCer9pDnEDPmRxYRJgbD SFBnH3djV0LZ85zqJozUKtHt9xKlhFJANmzUY6JsAWlKQrLWTyt7oJqKUls60/+IgS gmcFf2dxAec3FE3q8a2tGRQlhyguHLmDBP+9Mtvg5RJlV/n8lTriFIvZzH69kN3W3S x9D5w3j13/lmntZIHM/EdiuiTorJBBJQoQixd/yViIP5Kpwv5KgCX96tX1F2OZMjlt SKgJ+QbP2ZNjzn+nTSyH/z+5ECfOVL15YG9AQRd6F2QdgqeCeIH3jafEFP/7mMbcFo tP5uH7p5g8NnA== X-Nifty-SrcIP: [209.85.213.54] Received: by mail-vk0-f54.google.com with SMTP id w8-v6so2040399vkh.4; Wed, 13 Jun 2018 10:44:37 -0700 (PDT) X-Gm-Message-State: APt69E0G0LrVQy4oi2pFbsnO+HiI3apBPdmcFEKRC5mLhe9tCYmOedPn s73ofQOZlnjE7AHviDqtGOSrEYtryzX69tDM+8Y= X-Received: by 2002:a1f:1941:: with SMTP id 62-v6mr3673075vkz.34.1528911876617; Wed, 13 Jun 2018 10:44:36 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ab0:20ab:0:0:0:0:0 with HTTP; Wed, 13 Jun 2018 10:43:56 -0700 (PDT) In-Reply-To: <20180612115050.185112-2-namit@vmware.com> References: <20180612115050.185112-1-namit@vmware.com> <20180612115050.185112-2-namit@vmware.com> From: Masahiro Yamada Date: Thu, 14 Jun 2018 02:43:56 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 1/9] Makefile: Prepare for using macros for inline asm To: Nadav Amit Cc: Linux Kernel Mailing List , X86 ML , Michal Marek , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Linux Kbuild mailing list Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi. 2018-06-12 20:50 GMT+09:00 Nadav Amit : > Using macros for inline assembly improves both readability and > compilation decisions that are distorted by big assembly blocks that use > alternative sections. Compile macros.S and use it to assemble all C > files. Currently, only x86 will use it. > > Cc: Masahiro Yamada > Cc: Michal Marek > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: "H. Peter Anvin" > Cc: x86@kernel.org > Cc: linux-kbuild@vger.kernel.org > > Signed-off-by: Nadav Amit I have not fully understood this series yet. I do not have enough skill in x86 architecture, but just some comments from the build system point of view. I guess this will probably break the parallel building. Kbuild can build 'prepare' and 'scripts' simultaneously. I locally modified the following line: diff --git a/Makefile b/Makefile index 2dea909440..6ad484a 100644 --- a/Makefile +++ b/Makefile @@ -1030,7 +1030,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; # Error messages still appears in the original language PHONY += $(vmlinux-dirs) -$(vmlinux-dirs): prepare scripts +$(vmlinux-dirs): scripts prepare $(Q)$(MAKE) $(build)=$@ need-builtin=1 define filechk_kernel.release masahiro@grover:~/workspace/linux-kbuild$ make defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'x86_64_defconfig' # # configuration written to .config # masahiro@grover:~/workspace/linux-kbuild$ make all scripts/kconfig/conf --syncconfig Kconfig WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/x86/include/generated/uapi/asm/poll.h WRAP arch/x86/include/generated/asm/dma-contiguous.h WRAP arch/x86/include/generated/asm/early_ioremap.h WRAP arch/x86/include/generated/asm/mcs_spinlock.h WRAP arch/x86/include/generated/asm/mm-arch-hooks.h CC scripts/mod/empty.o Assembler messages: Error: can't open arch/x86/kernel/macros.s for reading: No such file or directory make[2]: *** [scripts/Makefile.build:318: scripts/mod/empty.o] Error 1 make[1]: *** [scripts/Makefile.build:558: scripts/mod] Error 2 make: *** [Makefile:1050: scripts] Error 2 > --- > Makefile | 9 +++++++-- > arch/x86/Makefile | 11 +++++++++-- > arch/x86/kernel/Makefile | 6 ++++++ > arch/x86/kernel/macros.S | 7 +++++++ > scripts/Kbuild.include | 4 +++- > 5 files changed, 32 insertions(+), 5 deletions(-) > create mode 100644 arch/x86/kernel/macros.S > > diff --git a/Makefile b/Makefile > index 554dcaddbce4..026586db2f26 100644 > --- a/Makefile > +++ b/Makefile > @@ -1085,7 +1085,7 @@ scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \ > # version.h and scripts_basic is processed / created. > > # Listed in dependency order > -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 > +PHONY += prepare archprepare macroprepare prepare0 prepare1 prepare2 prepare3 > > # prepare3 is used to check if we are building in a separate output directory, > # and if so do: > @@ -1109,7 +1109,9 @@ prepare1: prepare2 $(version_h) $(autoksyms_h) include/generated/utsrelease.h \ > include/config/auto.conf > $(cmd_crmodverdir) > > -archprepare: archheaders archscripts prepare1 scripts_basic > +macroprepare: prepare1 archmacros > + > +archprepare: archheaders archscripts macroprepare scripts_basic Are you planning to support for all architectures, or x86-specific? Currently, there are some hooks to do arch-specific things such as 'archprepare', 'archscripts'. > prepare0: archprepare gcc-plugins > $(Q)$(MAKE) $(build)=. > @@ -1214,6 +1216,9 @@ archheaders: > PHONY += archscripts > archscripts: > > +PHONY += archmacros > +archmacros: > + > PHONY += __headers > __headers: $(version_h) scripts_basic uapi-asm-generic archheaders archscripts > $(Q)$(MAKE) $(build)=scripts build_unifdef > diff --git a/arch/x86/Makefile b/arch/x86/Makefile > index 60135cbd905c..6b82314776fd 100644 > --- a/arch/x86/Makefile > +++ b/arch/x86/Makefile > @@ -235,8 +235,8 @@ ifdef CONFIG_X86_64 > LDFLAGS += $(call ld-option, -z max-page-size=0x200000) > endif > > -# Speed up the build > -KBUILD_CFLAGS += -pipe > +# We cannot use -pipe flag since we give an additional .s file to the compiler > +#KBUILD_CFLAGS += -pipe > # Workaround for a gcc prelease that unfortunately was shipped in a suse release > KBUILD_CFLAGS += -Wno-sign-compare > # > @@ -258,11 +258,18 @@ archscripts: scripts_basic > archheaders: > $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all > > +archmacros: > + $(Q)$(MAKE) $(build)=arch/x86/kernel macros > + > archprepare: > ifeq ($(CONFIG_KEXEC_FILE),y) > $(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c > endif > > +ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s > +export ASM_MACRO_FLAGS > +KBUILD_CFLAGS += $(ASM_MACRO_FLAGS) > + > ### > # Kernel objects > > diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile > index 02d6f5cf4e70..fdb6c5b2a922 100644 > --- a/arch/x86/kernel/Makefile > +++ b/arch/x86/kernel/Makefile > @@ -9,6 +9,12 @@ extra-y += ebda.o > extra-y += platform-quirks.o > extra-y += vmlinux.lds > > +$(obj)/macros.s: $(obj)/macros.S FORCE > + $(call if_changed_dep,cpp_s_S) This is unnecessary. Kbuild will find the correct pattern rule in scripts/Makefile.build > +macros: $(obj)/macros.s > + @: If you add a phony target, it should be added to 'PHONY'. Like this: PHONY += macros macros: $(obj)/macros.s @: > CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE) > > ifdef CONFIG_FUNCTION_TRACER > diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S > new file mode 100644 > index 000000000000..cfc1c7d1a6eb > --- /dev/null > +++ b/arch/x86/kernel/macros.S > @@ -0,0 +1,7 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > + > +/* > + * This file includes headers whose assembly part includes macros which are > + * commonly used. The macros are precompiled into assmebly file which is later > + * assembled together with each compiled file. > + */ > diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include > index 50cee534fd64..ad2c02062aa4 100644 > --- a/scripts/Kbuild.include > +++ b/scripts/Kbuild.include > @@ -189,7 +189,9 @@ __cc-option = $(call try-run-cached,\ > > # Do not attempt to build with gcc plugins during cc-option tests. > # (And this uses delayed resolution so the flags will be up to date.) > -CC_OPTION_CFLAGS = $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS)) > +# In addition, do not include the asm macros which are built later. > +CC_OPTION_FILTERED = $(GCC_PLUGINS_CFLAGS) $(ASM_MACRO_FLAGS) > +CC_OPTION_CFLAGS = $(filter-out $(CC_OPTION_FILTERED),$(KBUILD_CFLAGS)) > > # cc-option > # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) > -- > 2.17.0 > -- Best Regards Masahiro Yamada