From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4226AC48BDF for ; Tue, 22 Jun 2021 09:25:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 294506044F for ; Tue, 22 Jun 2021 09:25:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229674AbhFVJ15 (ORCPT ); Tue, 22 Jun 2021 05:27:57 -0400 Received: from mail.kernel.org ([198.145.29.99]:55128 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229490AbhFVJ15 (ORCPT ); Tue, 22 Jun 2021 05:27:57 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id E7FB76128E; Tue, 22 Jun 2021 09:25:36 +0000 (UTC) Date: Tue, 22 Jun 2021 10:25:34 +0100 From: Catalin Marinas To: Nick Desaulniers Cc: Bill Wendling , Masahiro Yamada , Will Deacon , Mark Rutland , Ard Biesheuvel , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Peter Oberparleiter , Kees Cook , Peter Zijlstra , Bill Wendling , Sami Tolvanen , Miguel Ojeda , Nathan Chancellor , Luc Van Oostenryck , Arnd Bergmann , Andrew Morton , Rasmus Villemoes , LKML , clang-built-linux , "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" , Borislav Petkov , Martin Liska , Jonathan Corbet , Fangrui Song , Linux Doc Mailing List , Linux Kbuild mailing list , Dmitry Vyukov , Johannes Berg , linux-toolchains@vger.kernel.org, Marco Elver , Linux ARM , linux-s390 Subject: Re: [PATCH 2/2] Kconfig: CC_HAS_NO_PROFILE_FN_ATTR, depend on for GCOV and PGO Message-ID: <20210622092533.GB3555@arm.com> References: <20210618233023.1360185-1-ndesaulniers@google.com> <20210618233023.1360185-3-ndesaulniers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Mon, Jun 21, 2021 at 01:43:54PM -0700, Nick Desaulniers wrote: > On Mon, Jun 21, 2021 at 11:50 AM Bill Wendling wrote: > > On Mon, Jun 21, 2021 at 11:22 AM Nick Desaulniers > > wrote: > > > On Fri, Jun 18, 2021 at 11:23 PM Marco Elver wrote: > > > > On Sat, 19 Jun 2021 at 01:30, Nick Desaulniers wrote: > > > > > We don't want compiler instrumentation to touch noinstr functions, which > > > > > are annotated with the no_profile function attribute. Add a Kconfig test > > > > > for this and make PGO and GCOV depend on it. > > > > > > > > > > Cc: Masahiro Yamada > > > > > Cc: Peter Oberparleiter > > > > > Link: https://lore.kernel.org/lkml/YMTn9yjuemKFLbws@hirez.programming.kicks-ass.net/ > > > > > Link: https://lore.kernel.org/lkml/YMcssV%2Fn5IBGv4f0@hirez.programming.kicks-ass.net/ > > > > > Suggested-by: Peter Zijlstra > > > > > Signed-off-by: Nick Desaulniers > > > > > --- > > > > > init/Kconfig | 3 +++ > > > > > kernel/gcov/Kconfig | 1 + > > > > > kernel/pgo/Kconfig | 3 ++- > > > > > 3 files changed, 6 insertions(+), 1 deletion(-) > > > > > > > > > > diff --git a/init/Kconfig b/init/Kconfig > > > > > index 1ea12c64e4c9..540f862b40c6 100644 > > > > > --- a/init/Kconfig > > > > > +++ b/init/Kconfig > > > > > @@ -83,6 +83,9 @@ config TOOLS_SUPPORT_RELR > > > > > config CC_HAS_ASM_INLINE > > > > > def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null) > > > > > > > > > > +config CC_HAS_NO_PROFILE_FN_ATTR > > > > > + def_bool $(success,echo '__attribute__((no_profile)) int x();' | $(CC) -x c - -c -o /dev/null -Werror) > > > > > + > > > > > config CONSTRUCTORS > > > > > bool > > > > > > > > > > diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig > > > > > index 58f87a3092f3..19facd4289cd 100644 > > > > > --- a/kernel/gcov/Kconfig > > > > > +++ b/kernel/gcov/Kconfig > > > > > @@ -5,6 +5,7 @@ config GCOV_KERNEL > > > > > bool "Enable gcov-based kernel profiling" > > > > > depends on DEBUG_FS > > > > > depends on !CC_IS_CLANG || CLANG_VERSION >= 110000 > > > > > + depends on !X86 || (X86 && CC_HAS_NO_PROFILE_FN_ATTR) > > > > > > > > [+Cc Mark] > > > > > > > > arm64 is also starting to rely on noinstr working properly. > > > > > > Sure, > > > Will, Catalin, other arm64 folks: > > > Any thoughts on requiring GCC 7.1+/Clang 13.0+ for GCOV support? That > > > way we can better guarantee that GCOV (and eventually, PGO) don't > > > touch noinstr functions? > > > > > > If that's ok, I'll add modify the above like: > > > > > > + depends on !ARM64 || (ARM64 && CC_HAS_NO_PROFILE_FN_ATTR) > > > > Wouldn't "!ARM64 || CC_HAS_NO_PROFILE_FN_ATTR" be more succinct? > > We need to be able to express via Kconfig "GCOV should not be enabled > for architectures that use noinstr when the toolchain does not support > __attribute__((no_profile_instrument_function))." > > Where "architectures that use noinstr" are currently arm64, s390, and > x86. So I guess we could do: > > + depends on !ARM64 || !S390 || !X86 || CC_HAS_NO_PROFILE_FN_ATTR I think you want: depends on !(ARM64 || S390 || X86) || CC_HAS_NO_PROFILE_FN_ATTR > (We could add a Kconfig for ARCH_WANTS_NO_INSTR, which might be more > informative than listed out architectures which might be non-obvious > to passers-by). That would probably look better. -- Catalin From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0609C2B9F4 for ; Tue, 22 Jun 2021 09:27:21 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BEA2C61351 for ; Tue, 22 Jun 2021 09:27:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BEA2C61351 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0Cyw8Zw43f5UmCpeFWRlhtS4TTYHhpFvcceITVSNVQ8=; b=GzhexCImtH2LTn CwJWVeMmP8+WDphsy86pgVeUXgrQcXDzyFikg5iZ8FvxzpiEjKg4rBcP/C2vOlWG7CM+0ZpFcOhcF YDya7zIfL9YPRS/btYylQkmMKVntkJl9HrcuSU66myERzT+4SaHLV+E+t8DAdxLx74oYK3qpV9C9A YI60+2sZTgvqXqu4HDM+2OoHDbC2mGrwUeH6RXVA8F6tpRCSyMMSsXGKZBjWrGaEFxkPX/vDZSldQ JATGQp5OZEu65Bb+6PC0ePuGfHGsOSOjdh+xtaV7FOZrvhJRuIiHNAmHoJwp6QmN7tz4dVSQAJn2l eszbwby4sZLS4o2obniQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvcfD-006OON-M9; Tue, 22 Jun 2021 09:25:47 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvcf8-006OMj-Vz for linux-arm-kernel@lists.infradead.org; Tue, 22 Jun 2021 09:25:44 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id E7FB76128E; Tue, 22 Jun 2021 09:25:36 +0000 (UTC) Date: Tue, 22 Jun 2021 10:25:34 +0100 From: Catalin Marinas To: Nick Desaulniers Cc: Bill Wendling , Masahiro Yamada , Will Deacon , Mark Rutland , Ard Biesheuvel , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Peter Oberparleiter , Kees Cook , Peter Zijlstra , Bill Wendling , Sami Tolvanen , Miguel Ojeda , Nathan Chancellor , Luc Van Oostenryck , Arnd Bergmann , Andrew Morton , Rasmus Villemoes , LKML , clang-built-linux , "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" , Borislav Petkov , Martin Liska , Jonathan Corbet , Fangrui Song , Linux Doc Mailing List , Linux Kbuild mailing list , Dmitry Vyukov , Johannes Berg , linux-toolchains@vger.kernel.org, Marco Elver , Linux ARM , linux-s390 Subject: Re: [PATCH 2/2] Kconfig: CC_HAS_NO_PROFILE_FN_ATTR, depend on for GCOV and PGO Message-ID: <20210622092533.GB3555@arm.com> References: <20210618233023.1360185-1-ndesaulniers@google.com> <20210618233023.1360185-3-ndesaulniers@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210622_022543_120808_302AD5A4 X-CRM114-Status: GOOD ( 30.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, Jun 21, 2021 at 01:43:54PM -0700, Nick Desaulniers wrote: > On Mon, Jun 21, 2021 at 11:50 AM Bill Wendling wrote: > > On Mon, Jun 21, 2021 at 11:22 AM Nick Desaulniers > > wrote: > > > On Fri, Jun 18, 2021 at 11:23 PM Marco Elver wrote: > > > > On Sat, 19 Jun 2021 at 01:30, Nick Desaulniers wrote: > > > > > We don't want compiler instrumentation to touch noinstr functions, which > > > > > are annotated with the no_profile function attribute. Add a Kconfig test > > > > > for this and make PGO and GCOV depend on it. > > > > > > > > > > Cc: Masahiro Yamada > > > > > Cc: Peter Oberparleiter > > > > > Link: https://lore.kernel.org/lkml/YMTn9yjuemKFLbws@hirez.programming.kicks-ass.net/ > > > > > Link: https://lore.kernel.org/lkml/YMcssV%2Fn5IBGv4f0@hirez.programming.kicks-ass.net/ > > > > > Suggested-by: Peter Zijlstra > > > > > Signed-off-by: Nick Desaulniers > > > > > --- > > > > > init/Kconfig | 3 +++ > > > > > kernel/gcov/Kconfig | 1 + > > > > > kernel/pgo/Kconfig | 3 ++- > > > > > 3 files changed, 6 insertions(+), 1 deletion(-) > > > > > > > > > > diff --git a/init/Kconfig b/init/Kconfig > > > > > index 1ea12c64e4c9..540f862b40c6 100644 > > > > > --- a/init/Kconfig > > > > > +++ b/init/Kconfig > > > > > @@ -83,6 +83,9 @@ config TOOLS_SUPPORT_RELR > > > > > config CC_HAS_ASM_INLINE > > > > > def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null) > > > > > > > > > > +config CC_HAS_NO_PROFILE_FN_ATTR > > > > > + def_bool $(success,echo '__attribute__((no_profile)) int x();' | $(CC) -x c - -c -o /dev/null -Werror) > > > > > + > > > > > config CONSTRUCTORS > > > > > bool > > > > > > > > > > diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig > > > > > index 58f87a3092f3..19facd4289cd 100644 > > > > > --- a/kernel/gcov/Kconfig > > > > > +++ b/kernel/gcov/Kconfig > > > > > @@ -5,6 +5,7 @@ config GCOV_KERNEL > > > > > bool "Enable gcov-based kernel profiling" > > > > > depends on DEBUG_FS > > > > > depends on !CC_IS_CLANG || CLANG_VERSION >= 110000 > > > > > + depends on !X86 || (X86 && CC_HAS_NO_PROFILE_FN_ATTR) > > > > > > > > [+Cc Mark] > > > > > > > > arm64 is also starting to rely on noinstr working properly. > > > > > > Sure, > > > Will, Catalin, other arm64 folks: > > > Any thoughts on requiring GCC 7.1+/Clang 13.0+ for GCOV support? That > > > way we can better guarantee that GCOV (and eventually, PGO) don't > > > touch noinstr functions? > > > > > > If that's ok, I'll add modify the above like: > > > > > > + depends on !ARM64 || (ARM64 && CC_HAS_NO_PROFILE_FN_ATTR) > > > > Wouldn't "!ARM64 || CC_HAS_NO_PROFILE_FN_ATTR" be more succinct? > > We need to be able to express via Kconfig "GCOV should not be enabled > for architectures that use noinstr when the toolchain does not support > __attribute__((no_profile_instrument_function))." > > Where "architectures that use noinstr" are currently arm64, s390, and > x86. So I guess we could do: > > + depends on !ARM64 || !S390 || !X86 || CC_HAS_NO_PROFILE_FN_ATTR I think you want: depends on !(ARM64 || S390 || X86) || CC_HAS_NO_PROFILE_FN_ATTR > (We could add a Kconfig for ARCH_WANTS_NO_INSTR, which might be more > informative than listed out architectures which might be non-obvious > to passers-by). That would probably look better. -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel