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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DE4F6C7EE23 for ; Fri, 26 May 2023 18:14:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229923AbjEZSON (ORCPT ); Fri, 26 May 2023 14:14:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229704AbjEZSOM (ORCPT ); Fri, 26 May 2023 14:14:12 -0400 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AA9CFB; Fri, 26 May 2023 11:14:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685124847; x=1716660847; h=message-id:date:mime-version:subject:to:references:from: in-reply-to:content-transfer-encoding; bh=K2ENXNgMbOAexBjvSimJoEftL7uQ3dH9YuP4uGasPRY=; b=iuYLJy/v8RTlnX3anSbA/8lz+Fb4szJst/ohY3skuYwPSEDPt5cZN1o7 RPtvvDE0iJ82q0rXrv3lT5RUZQqSIyoXygfBPB4Ke4qeU1p3OAI6rC4Ok 72ljX3EwH233WbPhkGKFQcnv/Enma7LMDd95kWvuqxb6X3AHDZiCNLVNp BJyrOdW9cyIWx+4iDQuKl1vGKRAORWclloBK9itWaMue8RGt/dBOpAFQJ vQ8wrQ3UxTsT5vfbS8Rjrga+wLuTCMtmIAZrAOtlzR6IVfcZ1bOSkQFiu ugHvUeMfMHI4DZXRl577faEcNRAS7MyAWwlH764HOaCPBK1MSEqmZXJzQ g==; X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="353111777" X-IronPort-AV: E=Sophos;i="6.00,194,1681196400"; d="scan'208";a="353111777" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2023 11:14:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="1035448877" X-IronPort-AV: E=Sophos;i="6.00,194,1681196400"; d="scan'208";a="1035448877" Received: from linux.intel.com ([10.54.29.200]) by fmsmga005.fm.intel.com with ESMTP; 26 May 2023 11:14:04 -0700 Received: from [10.209.100.85] (kliang2-mobl1.ccr.corp.intel.com [10.209.100.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 8F368580D72; Fri, 26 May 2023 11:14:00 -0700 (PDT) Message-ID: <3d943607-645e-be8d-3a68-90e62e402c3d@linux.intel.com> Date: Fri, 26 May 2023 14:13:59 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.1 Subject: Re: [PATCH v3 16/35] perf pmu: Remove perf_pmu__hybrid_mounted Content-Language: en-US To: Ian Rogers , Suzuki K Poulose , Mike Leach , Leo Yan , John Garry , Will Deacon , James Clark , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Kajol Jain , Jing Zhang , Ravi Bangoria , Madhavan Srinivasan , Athira Rajeev , Ming Wang , Huacai Chen , Sandipan Das , Dmitrii Dolgov <9erthalion6@gmail.com>, Sean Christopherson , Ali Saidi , Rob Herring , Thomas Richter , Kang Minchul , linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org References: <20230524221831.1741381-1-irogers@google.com> <20230524221831.1741381-17-irogers@google.com> From: "Liang, Kan" In-Reply-To: <20230524221831.1741381-17-irogers@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org On 2023-05-24 6:18 p.m., Ian Rogers wrote: > perf_pmu__hybrid_mounted is used to detect whether cpu_core or > cpu_atom is mounted with a non-empty cpus file by > pmu_lookup. pmu_lookup will attempt to read the cpus file too and so > the check can be folded into this. > > Checking hybrid_mounted in pmu_is_uncore is redundant as the next > cpumask read will fail returning false. > > Reduce the scope of perf_pmu__find_hybrid_pmu by making it static. > > Signed-off-by: Ian Rogers > --- > tools/perf/util/pmu-hybrid.c | 15 +-------------- > tools/perf/util/pmu-hybrid.h | 3 --- > tools/perf/util/pmu.c | 26 ++++++++++++++------------ > 3 files changed, 15 insertions(+), 29 deletions(-) > > diff --git a/tools/perf/util/pmu-hybrid.c b/tools/perf/util/pmu-hybrid.c > index bc4cb0738c35..7fe943dd3217 100644 > --- a/tools/perf/util/pmu-hybrid.c > +++ b/tools/perf/util/pmu-hybrid.c > @@ -18,20 +18,7 @@ > > LIST_HEAD(perf_pmu__hybrid_pmus); > > -bool perf_pmu__hybrid_mounted(const char *name) > -{ > - int cpu; > - char pmu_name[PATH_MAX]; > - struct perf_pmu pmu = {.name = pmu_name}; > - > - if (strncmp(name, "cpu_", 4)) > - return false; > - > - strlcpy(pmu_name, name, sizeof(pmu_name)); > - return perf_pmu__scan_file(&pmu, "cpus", "%u", &cpu) > 0; > -} > - > -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name) > +static struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name) > { > struct perf_pmu *pmu; > > diff --git a/tools/perf/util/pmu-hybrid.h b/tools/perf/util/pmu-hybrid.h > index 206b94931531..8dbcae935020 100644 > --- a/tools/perf/util/pmu-hybrid.h > +++ b/tools/perf/util/pmu-hybrid.h > @@ -13,9 +13,6 @@ extern struct list_head perf_pmu__hybrid_pmus; > #define perf_pmu__for_each_hybrid_pmu(pmu) \ > list_for_each_entry(pmu, &perf_pmu__hybrid_pmus, hybrid_list) > > -bool perf_pmu__hybrid_mounted(const char *name); > - > -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name); > bool perf_pmu__is_hybrid(const char *name); > > static inline int perf_pmu__hybrid_pmu_num(void) > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > index cd94abe7a87a..e9f3e6a777c0 100644 > --- a/tools/perf/util/pmu.c > +++ b/tools/perf/util/pmu.c > @@ -617,9 +617,6 @@ static bool pmu_is_uncore(int dirfd, const char *name) > { > int fd; > > - if (perf_pmu__hybrid_mounted(name)) > - return false; > - > fd = perf_pmu__pathname_fd(dirfd, name, "cpumask", O_PATH); > if (fd < 0) > return false; > @@ -900,6 +897,16 @@ static int pmu_max_precise(int dirfd, struct perf_pmu *pmu) > return max_precise; > } > > +/** > + * perf_pmu__skip_empty_cpus() - should pmu_lookup skip the named PMU if the > + * cpus or cpumask file isn't present? > + * @name: Name of PMU. > + */ > +static bool perf_pmu__skip_empty_cpus(const char *name) > +{ > + return !strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom"); Can we use the below to replace? return !strncmp(name, "cpu_", 4); Otherwise, anytime a new core PMU name is introduced, I have to patch the function. Thanks, Kan > +} > + > static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) > { > struct perf_pmu *pmu; > @@ -907,15 +914,8 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) > LIST_HEAD(aliases); > __u32 type; > char *name = pmu_find_real_name(lookup_name); > - bool is_hybrid = perf_pmu__hybrid_mounted(name); > char *alias_name; > > - /* > - * Check pmu name for hybrid and the pmu may be invalid in sysfs > - */ > - if (!strncmp(name, "cpu_", 4) && !is_hybrid) > - return NULL; > - > /* > * The pmu data we store & need consists of the pmu > * type value and format definitions. Load both right > @@ -935,8 +935,10 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) > return NULL; > > pmu->cpus = pmu_cpumask(dirfd, name); > - pmu->name = strdup(name); > + if (!pmu->cpus && perf_pmu__skip_empty_cpus(name)) > + goto err; > > + pmu->name = strdup(name); > if (!pmu->name) > goto err; > > @@ -967,7 +969,7 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) > list_splice(&aliases, &pmu->aliases); > list_add_tail(&pmu->list, &pmus); > > - if (is_hybrid) > + if (!strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom")) > list_add_tail(&pmu->hybrid_list, &perf_pmu__hybrid_pmus); > else > INIT_LIST_HEAD(&pmu->hybrid_list);