From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751999AbdBULFD (ORCPT ); Tue, 21 Feb 2017 06:05:03 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58004 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751266AbdBULEz (ORCPT ); Tue, 21 Feb 2017 06:04:55 -0500 Date: Tue, 21 Feb 2017 12:04:51 +0100 From: Jiri Olsa To: Borislav Petkov Cc: Arnaldo Carvalho de Melo , Jiri Olsa , David Ahern , Namhyung Kim , Peter Zijlstra , lkml , Ingo Molnar Subject: Re: [PATCHv2 4/5] perf stat: Add -a as a default target Message-ID: <20170221110451.GA16152@krava> References: <20170217144128.GF4109@kernel.org> <20170217170034.GB15389@krava> <20170218175225.5cylpqti7oluqehv@pd.tnic> <20170220071300.GA12002@krava> <20170220134433.GI4109@kernel.org> <20170220203149.yxietgdzi5lxdk5n@pd.tnic> <20170220212254.GC4071@kernel.org> <20170220224716.q6r3awztsf6t3k5a@pd.tnic> <20170221075437.GB7384@krava> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170221075437.GB7384@krava> User-Agent: Mutt/1.7.1 (2016-10-04) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 21 Feb 2017 11:04:56 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 21, 2017 at 08:54:37AM +0100, Jiri Olsa wrote: > On Mon, Feb 20, 2017 at 11:47:16PM +0100, Borislav Petkov wrote: > > On Mon, Feb 20, 2017 at 06:22:54PM -0300, Arnaldo Carvalho de Melo wrote: > > > Well, this one should be read (and written in the tool output as): > > > > > > > > > > Do you want to change that CNTR_NOT_SUPPORTED string unconditionally to > > something like above? > > > > Because perf_evsel.supported seems like it means that counter is not > > supported but not necessarily only because of the missing -a for an > > uncore event, AFAICT. I could be wrong. > > > > > Right, the ENOTSUPP in this case needs to be properly expanded into > > > something meaningful, as suggested above. > > > > I dumped errno in __run_perf_stat(): > > > > ./perf stat -v -e amd_nb/event=0xe0,umask=0x1f/ sleep 1 > > Using CPUID AuthenticAMD-21-2 > > Warning: > > amd_nb/event=0xe0,umask=0x1f/ event is not supported by the kernel: 22. > > > > It is -EINVAL and the syscall returns -EINVAL in bunch of places so I'm > > guessing this might not be a good way to match the retval to the proper > > error message. > > > > Peterz said something about scanning all events supplied by -e and if > > all are uncore, to set -a automatically. Can we do that? > > right, so that's different from what we actually did.. ;-) > > I'll check on this one.. might not be as straight forward, > because some uncore events might have already cpumask limit could you please test this change? thanks, jirka --- diff --git a/tools/perf/arch/x86/util/pmu.c b/tools/perf/arch/x86/util/pmu.c index 79fe07158d00..424055bf32c9 100644 --- a/tools/perf/arch/x86/util/pmu.c +++ b/tools/perf/arch/x86/util/pmu.c @@ -14,5 +14,6 @@ struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu __mayb if (!strcmp(pmu->name, INTEL_BTS_PMU_NAME)) pmu->selectable = true; #endif + pmu->system_wide = strcmp(pmu->name, "cpu"); return NULL; } diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 13b54999ad79..e924d56f3232 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -2339,6 +2339,27 @@ static int __cmd_report(int argc, const char **argv) return 0; } +static void setup_system_wide(int argc) +{ + /* + * Make system wide (-a) the default target + * or change the target to system_wide if + * all the counters are system_ wide. + */ + if (!argc && target__none(&target)) + target.system_wide = true; + else { + struct perf_evsel *counter; + + evlist__for_each_entry(evsel_list, counter) { + if (!counter->system_wide) + return; + } + + target.system_wide = true; + } +} + int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) { const char * const stat_usage[] = { @@ -2445,9 +2466,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) } else if (big_num_opt == 0) /* User passed --no-big-num */ big_num = false; - /* Make system wide (-a) the default target. */ - if (!argc && target__none(&target)) - target.system_wide = true; + setup_system_wide(argc); if (run_count < 0) { pr_err("Run count must be a positive number\n"); diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 67a8aebc67ab..8b06b21f1bbc 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1254,6 +1254,7 @@ int parse_events_add_pmu(struct parse_events_evlist *data, evsel->scale = info.scale; evsel->per_pkg = info.per_pkg; evsel->snapshot = info.snapshot; + evsel->system_wide = pmu->system_wide; } return evsel ? 0 : -ENOMEM; diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 00852ddc7741..0ce3ffacbf92 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -21,6 +21,7 @@ struct perf_pmu { char *name; __u32 type; bool selectable; + bool system_wide; struct perf_event_attr *default_config; struct cpu_map *cpus; struct list_head format; /* HEAD struct perf_pmu_format -> list */