Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4011938pxj; Mon, 21 Jun 2021 11:24:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyWm1PwJJGAXUH8ohMQZ6cZJk+tc6Dsav8Fzk4ykSfRxbJWx9uwQoLCookHFrrSL+lYg/FP X-Received: by 2002:a17:906:dbd5:: with SMTP id yc21mr95933ejb.233.1624299864280; Mon, 21 Jun 2021 11:24:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624299864; cv=none; d=google.com; s=arc-20160816; b=BD9rbEd4u34A+RGCTEuPIeE0ha9zi+Ye1yW/avbZKFyD+5CQauysC6ms+rVLJe9nDZ KuRt8K1diGIQ7fK8XPoerZ3E4P1CHdEbVWFTHkGS6s+KsQxuyA81P40tX5/xwN+BfIco ZMewmy77FayUcqutpG8qXj2b+EQKSECtnoNub5lVX6+bx9THxwrCpl2bVHlfQNA+NOFU yCQA6vnCvDsXeft9J4+UjN0TIw6ASmM9WhGLCrVWjBaDOsT0+bgHt+du4dmGrdpiPDuS H15OrL9JSjy0fH0eC7t3dX57nVEpRq2KfkfPcx35e3H6G6rej63V0vizB1rIN9U6Anhz GB+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=IajW38MHwcZeFZ73RMsHWpIwYjHEkpzka+be7I9DYGw=; b=SWhFLlC/9SHHCH3CXng95ST2FSjEoJFeWJi3WtfCbMJGMTppLfFSXC1mwkIF+r7m8W LlnELGFyz6qiZEN3j2kgpqrO6g0p5Nkca+Z/LeMpv2qdgIoxEnFqFsmTHNhb+jmV6lGf 6tr7olKP3GBG16wZ24dOxwX8ltXHGnalaVktO+NVJgF58s1/MJ5GlHXppHqH1cQDljsz VaQrCmqu8Lqoa9xPJHakhVYNVJIkVRikTG673iumh7y0f5B5cFbgKV3SaYQnRnkp5oxk 6eFJ3fqd76VNbdCSpUSl6PpgKvqWY0KwuuMabMeQ3ESysTBlHgG4x3HItm2TZXuhw0ZM O1mQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=NETQKlp2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id kf3si13142709ejc.206.2021.06.21.11.24.02; Mon, 21 Jun 2021 11:24:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=NETQKlp2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231740AbhFUSY6 (ORCPT + 99 others); Mon, 21 Jun 2021 14:24:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232208AbhFUSYv (ORCPT ); Mon, 21 Jun 2021 14:24:51 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43414C0617A8 for ; Mon, 21 Jun 2021 11:22:18 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id u13so12425952lfk.2 for ; Mon, 21 Jun 2021 11:22:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=IajW38MHwcZeFZ73RMsHWpIwYjHEkpzka+be7I9DYGw=; b=NETQKlp2p/nx7Y4sEEKvaKEH1uY4lK4td2BanaBafpbIXQIoGCzZOVksCtCyBi0VP3 qRBlFwn+/Gx64DwKfV6NuuTCgy11IKhJtBRHJHw+NoWp0PJjx8aDjqdJFAwf9hft86AO tM+eFryc9hg5P7s+JFPGb7KXNkWf2tAxPxGRd/m7XfVYQieeWwYduJvFlHV+Nw7tYrSK TR7ASMVIAhHu/b18LiZkQowPpkyKElDbsSPdJWQAbQAz8k6TgY6ow6aUYfklevRk480m IgM7lrbwBJYVeinVQVxmiqJNSdgdYBCq164ARz658xez/ZLzpWtYGOtahVCWU0BR2cPi xw+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=IajW38MHwcZeFZ73RMsHWpIwYjHEkpzka+be7I9DYGw=; b=nsL6k7wViEHaVPUCGYIcr/jKVhH+25eUc2YpM+4DUllVmdAnOMU9Z3KFDo1CUz4RjV KJXEi0C5UrH4liWxbWXHChQBJHhK8d2zjr03KjnBXsgtvhFKS1/zaJpTiIrwTmPx72qt k3qvcsjHh40IhjBfueCd/ErjlvploMMbw4Yc6jvpUgq+4vikdQH4LhZxqVQDaeelgIlw lX1qLkhX9GSzOMXXd+5QUvx5eUQPiAzwdBM/n658HNsQyDEAEMNMUmcbYRv0SVF2GxmR OBS+K/0rrSlg97lCXMA3hz01HfkbNtH5hzc15/eZYe3JJPGzLlqrNMQZbUQylZk0AYNZ f4nw== X-Gm-Message-State: AOAM530lhcP7jwkRsBzRurDRDv5XHm8CwVXjcN0xrSSOmPIp1FUPpyun C3GA+m2sWcypkxOfPAheIkUf4GkToejkYLNVHoY5HA== X-Received: by 2002:ac2:4438:: with SMTP id w24mr3339709lfl.73.1624299736217; Mon, 21 Jun 2021 11:22:16 -0700 (PDT) MIME-Version: 1.0 References: <20210618233023.1360185-1-ndesaulniers@google.com> <20210618233023.1360185-3-ndesaulniers@google.com> In-Reply-To: From: Nick Desaulniers Date: Mon, 21 Jun 2021 11:22:05 -0700 Message-ID: Subject: Re: [PATCH 2/2] Kconfig: CC_HAS_NO_PROFILE_FN_ATTR, depend on for GCOV and PGO To: Will Deacon , Catalin Marinas , Mark Rutland , Ard Biesheuvel , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Peter Oberparleiter Cc: Kees Cook , Peter Zijlstra , Bill Wendling , Sami Tolvanen , Masahiro Yamada , 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 Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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) to the above hunk in v2. Oh, looks like arch/s390 also uses noinstr. Same question applies then: + depends on !S390 || (S390 && CC_HAS_NO_PROFILE_FN_ATTR) Or, we could just do + depends on CC_HAS_NO_PROFILE_FN_ATTR Though that will penalize architectures not using noinstr, that still would like to use GCOV with versions of GCC older than 7.1. Perhaps there are no such such users, or they should consider upgrading their tools to we can stick with the simpler Kconfig? Thoughts? > > This should probably be a 'select ARCH_HAS_GCOV_PROFILE_ALL if > CC_HAS_NO_PROFILE_FN_ATTR' in the relevant arch/../Kconfig. > > Alternatively, using: > https://lkml.kernel.org/r/YMcssV/n5IBGv4f0@hirez.programming.kicks-ass.net > > But I'd probably not overcomplicate things at this point and just use > ARCH_HAS_GCOV_PROFILE_ALL, because GCOV seems to be a) rarely used, > and b) if someone decides to selectively instrument stuff like entry > code, we can just say it's user error. > > > > select CONSTRUCTORS > > default n > > help > > diff --git a/kernel/pgo/Kconfig b/kernel/pgo/Kconfig > > index d2053df1111c..26f75ac4c6c1 100644 > > --- a/kernel/pgo/Kconfig > > +++ b/kernel/pgo/Kconfig > > @@ -8,7 +8,8 @@ config PGO_CLANG > > bool "Enable clang's PGO-based kernel profiling" > > depends on DEBUG_FS > > depends on ARCH_SUPPORTS_PGO_CLANG > > - depends on CC_IS_CLANG && CLANG_VERSION >= 120000 > > + depends on CC_IS_CLANG > > + depends on CC_HAS_NO_PROFILE_FN_ATTR > > help > > This option enables clang's PGO (Profile Guided Optimization) based > > code profiling to better optimize the kernel. > > -- > > 2.32.0.288.g62a8d224e6-goog > > -- Thanks, ~Nick Desaulniers