Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5995072rdb; Thu, 14 Dec 2023 05:49:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IE1Gy/Ll9mvhBho/TAGszWO+V1EK9d9cEQQspAdDgi61KsHyJKnzYoEoRpKpGIfymcCG71T X-Received: by 2002:a17:903:245:b0:1c5:d063:b70e with SMTP id j5-20020a170903024500b001c5d063b70emr5286549plh.53.1702561777876; Thu, 14 Dec 2023 05:49:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702561777; cv=none; d=google.com; s=arc-20160816; b=GKqbTdJVlng5Z/LEwj3l+OM0JLxOuTTL9W2JRkTFa8wbmmnRwpozmPN9V3SDvmP+PC gShie0uKBI8P32ym62/w95Y0sNu7RGejNLxhzg66Pya45XMWjx4lAWEkYf5nMXidi5H/ Tq4em1WxYugtxc+aVF4RWRjD9a4T2I+/NcK0PU3EVjtjDmNzlS0JD+rCg2R6EURKSb9n +J40MaENjMlnWFo9YnEdSlRXmluDpKHzkhAKHy1Ystoc/ElWxs5e9pUb+o09XverOemT 3nImK/L/A/v3wCB25h+/BMB6jb8uPKE6I2m1R255pMU1rQ4vIYnMWCOXXe0Exc9ff/Gf 5CxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=xpRISzACQRiAqvChlhLxIZf6BgH8fCwsbs70dGiAPmI=; fh=/JcezKHPmMI7muQqdnW9GdyXkhCWVvd1NRf0XPIDYgo=; b=EbRD0CIL43LS5IUQAP/cj1OCCvrmeMpIa5c2rt+nbZZPo8g74qBQ/b57VR+wusi2UW IlI7YX9TEkJdnUVi5oG2ODXsXVtS18eMlxWyStACYg9S1BuSPruEZBmlkMej8VmqVsEH pEL9OetTijw7h/C/5worhV08KUX3bTj1Uogd4Wzxp/truvc2jq/UG2a9vx6oKE+yx+5r QdvkKvia/demFtAild9yXpQE0YQg1ktOobtbVX10gqgdcdy4LEUFc0/WPaTdpnJncV+m OhtOWpRf57E1zRoTEhxi+IUJ+FPpXy+QPzOUlSKxpBJ6v+JhB0Hye/U0G77Con69NpYb ra4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=HuXKCk6+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id j4-20020a170902da8400b001cfbd3f38c6si11301740plx.302.2023.12.14.05.49.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Dec 2023 05:49:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=HuXKCk6+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 86D9D8093790; Thu, 14 Dec 2023 05:49:34 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1573256AbjLNNtM (ORCPT + 99 others); Thu, 14 Dec 2023 08:49:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1573229AbjLNNtL (ORCPT ); Thu, 14 Dec 2023 08:49:11 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A98B78E for ; Thu, 14 Dec 2023 05:49:17 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA13DC433C7; Thu, 14 Dec 2023 13:49:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702561757; bh=+YaP//k66yYn7P7wEQDb5TW+zpn9I0lJ4Asbfy7dees=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=HuXKCk6+Sjijr2Oaj9DQy7ryY55jHeUtaosd+PrOvL2Gkbp55JwXqanRLNcfzzIyU 6097ZavOI0gNXTXj1+iF0pqakOnJ0n+y3jsT5BilJQzl1y0Q2oINBHGs0gQ6OgYZR4 3p6YeAHBLeuu+A8BqXKnlZzvXONBwj5H8WvvrArVKxi9b06uWC383CHPeTLP6L62xV JFCUhuW0Q0xh7FoPN92Eh0GqoOA+PmXJ9mlkmf2idbnIV2oQWzBZ5w+PybKy4pAmlp CsurFIBYSBRooKI5wGbiEM0ajGTU5wLMmpfwTnmQ7PvjO26Hi2v06NEnDcLi/p9xTC uKakxdxaQvRGw== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 23C82403EF; Thu, 14 Dec 2023 10:49:14 -0300 (-03) Date: Thu, 14 Dec 2023 10:49:14 -0300 From: Arnaldo Carvalho de Melo To: Adrian Hunter Cc: Ian Rogers , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Suzuki K Poulose , Mike Leach , James Clark , Leo Yan , John Garry , Will Deacon , Thomas Gleixner , Darren Hart , Davidlohr Bueso , =?iso-8859-1?Q?Andr=E9?= Almeida , Kan Liang , K Prateek Nayak , Sean Christopherson , Paolo Bonzini , Kajol Jain , Athira Rajeev , Andrew Jones , Alexandre Ghiti , Atish Patra , "Steinar H. Gunderson" , Yang Jihong , Yang Li , Changbin Du , Sandipan Das , Ravi Bangoria , Paran Lee , Nick Desaulniers , Huacai Chen , Yanteng Si , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, bpf@vger.kernel.org Subject: Re: [PATCH v1 00/14] Clean up libperf cpumap's empty function Message-ID: References: <20231129060211.1890454-1-irogers@google.com> <84755553-3a79-4693-9396-084e9ae41235@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <84755553-3a79-4693-9396-084e9ae41235@intel.com> X-Url: http://acmel.wordpress.com X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Thu, 14 Dec 2023 05:49:34 -0800 (PST) Em Wed, Dec 13, 2023 at 02:48:15PM +0200, Adrian Hunter escreveu: > On 12/12/23 19:59, Arnaldo Carvalho de Melo wrote: > > Em Tue, Nov 28, 2023 at 10:01:57PM -0800, Ian Rogers escreveu: > >> Rename and clean up the use of libperf CPU map functions particularly > >> focussing on perf_cpu_map__empty that may return true for maps > >> containing CPUs but also with an "any CPU"/dummy value. > >> > >> perf_cpu_map__nr is also troubling in that iterating an empty CPU map > >> will yield the "any CPU"/dummy value. Reduce the appearance of some > >> calls to this by using the perf_cpu_map__for_each_cpu macro. > >> > >> Ian Rogers (14): > >> libperf cpumap: Rename perf_cpu_map__dummy_new > >> libperf cpumap: Rename and prefer sysfs for perf_cpu_map__default_new > >> libperf cpumap: Rename perf_cpu_map__empty > >> libperf cpumap: Replace usage of perf_cpu_map__new(NULL) > >> libperf cpumap: Add for_each_cpu that skips the "any CPU" case > > > > Applied 1-6, with James Reviewed-by tags, would be good to have Adrian > > check the PT and BTS parts, testing the end result if he things its all > > ok. Ian, 1-6 is in perf-tools-next now, can you please consider Adrian's suggestion to reduce patch size and rebase the remaining patches? - Arnaldo > Changing the same lines of code twice in the same patch set is not > really kernel style. > > Some of the churn could be reduced by applying and rebasing on the > patch below. > > Ideally the patches should be reordered so that the lines only > change once i.e. > > perf_cpu_map__empty -> > > instead of > > perf_cpu_map__empty -> -> > > If that is too much trouble, please accept my ack instead: > > Acked-by: Adrian Hunter > > From: Adrian Hunter > > Factor out perf_cpu_map__empty() use to reduce the occurrences and make > the code more readable. > > Signed-off-by: Adrian Hunter > --- > tools/perf/arch/x86/util/intel-bts.c | 11 ++++++++--- > tools/perf/arch/x86/util/intel-pt.c | 21 ++++++++++++--------- > 2 files changed, 20 insertions(+), 12 deletions(-) > > diff --git a/tools/perf/arch/x86/util/intel-bts.c b/tools/perf/arch/x86/util/intel-bts.c > index d2c8cac11470..cebe994eb9db 100644 > --- a/tools/perf/arch/x86/util/intel-bts.c > +++ b/tools/perf/arch/x86/util/intel-bts.c > @@ -59,6 +59,11 @@ intel_bts_info_priv_size(struct auxtrace_record *itr __maybe_unused, > return INTEL_BTS_AUXTRACE_PRIV_SIZE; > } > > +static bool intel_bts_per_cpu(struct evlist *evlist) > +{ > + return !perf_cpu_map__empty(evlist->core.user_requested_cpus); > +} > + > static int intel_bts_info_fill(struct auxtrace_record *itr, > struct perf_session *session, > struct perf_record_auxtrace_info *auxtrace_info, > @@ -109,8 +114,8 @@ static int intel_bts_recording_options(struct auxtrace_record *itr, > struct intel_bts_recording *btsr = > container_of(itr, struct intel_bts_recording, itr); > struct perf_pmu *intel_bts_pmu = btsr->intel_bts_pmu; > + bool per_cpu_mmaps = intel_bts_per_cpu(evlist); > struct evsel *evsel, *intel_bts_evsel = NULL; > - const struct perf_cpu_map *cpus = evlist->core.user_requested_cpus; > bool privileged = perf_event_paranoid_check(-1); > > if (opts->auxtrace_sample_mode) { > @@ -143,7 +148,7 @@ static int intel_bts_recording_options(struct auxtrace_record *itr, > if (!opts->full_auxtrace) > return 0; > > - if (opts->full_auxtrace && !perf_cpu_map__empty(cpus)) { > + if (opts->full_auxtrace && per_cpu_mmaps) { > pr_err(INTEL_BTS_PMU_NAME " does not support per-cpu recording\n"); > return -EINVAL; > } > @@ -224,7 +229,7 @@ static int intel_bts_recording_options(struct auxtrace_record *itr, > * In the case of per-cpu mmaps, we need the CPU on the > * AUX event. > */ > - if (!perf_cpu_map__empty(cpus)) > + if (per_cpu_mmaps) > evsel__set_sample_bit(intel_bts_evsel, CPU); > } > > diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c > index fa0c718b9e72..0ff9147c75da 100644 > --- a/tools/perf/arch/x86/util/intel-pt.c > +++ b/tools/perf/arch/x86/util/intel-pt.c > @@ -312,6 +312,11 @@ static void intel_pt_tsc_ctc_ratio(u32 *n, u32 *d) > *d = eax; > } > > +static bool intel_pt_per_cpu(struct evlist *evlist) > +{ > + return !perf_cpu_map__empty(evlist->core.user_requested_cpus); > +} > + > static int intel_pt_info_fill(struct auxtrace_record *itr, > struct perf_session *session, > struct perf_record_auxtrace_info *auxtrace_info, > @@ -322,7 +327,8 @@ static int intel_pt_info_fill(struct auxtrace_record *itr, > struct perf_pmu *intel_pt_pmu = ptr->intel_pt_pmu; > struct perf_event_mmap_page *pc; > struct perf_tsc_conversion tc = { .time_mult = 0, }; > - bool cap_user_time_zero = false, per_cpu_mmaps; > + bool per_cpu_mmaps = intel_pt_per_cpu(session->evlist); > + bool cap_user_time_zero = false; > u64 tsc_bit, mtc_bit, mtc_freq_bits, cyc_bit, noretcomp_bit; > u32 tsc_ctc_ratio_n, tsc_ctc_ratio_d; > unsigned long max_non_turbo_ratio; > @@ -369,8 +375,6 @@ static int intel_pt_info_fill(struct auxtrace_record *itr, > ui__warning("Intel Processor Trace: TSC not available\n"); > } > > - per_cpu_mmaps = !perf_cpu_map__empty(session->evlist->core.user_requested_cpus); > - > auxtrace_info->type = PERF_AUXTRACE_INTEL_PT; > auxtrace_info->priv[INTEL_PT_PMU_TYPE] = intel_pt_pmu->type; > auxtrace_info->priv[INTEL_PT_TIME_SHIFT] = tc.time_shift; > @@ -604,8 +608,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > struct perf_pmu *intel_pt_pmu = ptr->intel_pt_pmu; > bool have_timing_info, need_immediate = false; > struct evsel *evsel, *intel_pt_evsel = NULL; > - const struct perf_cpu_map *cpus = evlist->core.user_requested_cpus; > bool privileged = perf_event_paranoid_check(-1); > + bool per_cpu_mmaps = intel_pt_per_cpu(evlist); > u64 tsc_bit; > int err; > > @@ -774,8 +778,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > * Per-cpu recording needs sched_switch events to distinguish different > * threads. > */ > - if (have_timing_info && !perf_cpu_map__empty(cpus) && > - !record_opts__no_switch_events(opts)) { > + if (have_timing_info && per_cpu_mmaps && !record_opts__no_switch_events(opts)) { > if (perf_can_record_switch_events()) { > bool cpu_wide = !target__none(&opts->target) && > !target__has_task(&opts->target); > @@ -832,7 +835,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > * In the case of per-cpu mmaps, we need the CPU on the > * AUX event. > */ > - if (!perf_cpu_map__empty(cpus)) > + if (per_cpu_mmaps) > evsel__set_sample_bit(intel_pt_evsel, CPU); > } > > @@ -858,7 +861,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > tracking_evsel->immediate = true; > > /* In per-cpu case, always need the time of mmap events etc */ > - if (!perf_cpu_map__empty(cpus)) { > + if (per_cpu_mmaps) { > evsel__set_sample_bit(tracking_evsel, TIME); > /* And the CPU for switch events */ > evsel__set_sample_bit(tracking_evsel, CPU); > @@ -870,7 +873,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > * Warn the user when we do not have enough information to decode i.e. > * per-cpu with no sched_switch (except workload-only). > */ > - if (!ptr->have_sched_switch && !perf_cpu_map__empty(cpus) && > + if (!ptr->have_sched_switch && per_cpu_mmaps && > !target__none(&opts->target) && > !intel_pt_evsel->core.attr.exclude_user) > ui__warning("Intel Processor Trace decoding will not be possible except for kernel tracing!\n"); > -- > 2.34.1 > > > -- - Arnaldo