From: Mark Rutland <mark.rutland@arm.com>
To: linux-kernel@vger.kernel.org
Cc: acme@kernel.org, adrian.hunter@intel.com,
alexander.shishkin@linux.intel.com, hekuang@huawei.com,
jolsa@kernel.org, kan.liang@intel.com, mark.rutland@arm.com,
mingo@redhat.com, peterz@infradead.org, wangnan0@huawei.com
Subject: [RFCv2 4/4] perf: util: support sysfs supported_cpumask file
Date: Fri, 15 Jul 2016 11:08:13 +0100 [thread overview]
Message-ID: <1468577293-19667-5-git-send-email-mark.rutland@arm.com> (raw)
In-Reply-To: <1468577293-19667-1-git-send-email-mark.rutland@arm.com>
For system PMUs, the perf tools have long expected a cpumask file under
sysfs, describing the single CPU which they support events being
opened/handled on. Prior patches in this series have reworked this
support to support multiple CPUs in a mask, as is required to handle
heterogeneous CPU PMUs.
Unfortunately, adding a cpumask file to CPU PMUs would break existing
userspace. Prior to this series, perf record will refuse to open events,
and perf stat may unexpectedly block at exit time. In the absence of a
cpumask, perf stat is functional.
To address this, this patch adds support for a new file,
supported_cpumask, which can be used to describe heterogeneous CPUs,
without the risk of breaking existing userspace binaries.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
---
tools/perf/util/pmu.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index ddb0261..06c985c 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -445,14 +445,23 @@ static struct cpu_map *pmu_cpumask(const char *name)
FILE *file;
struct cpu_map *cpus;
const char *sysfs = sysfs__mountpoint();
+ const char *path_template[] = {
+ "%s/bus/event_source/devices/%s/cpumask",
+ "%s/bus/event_source/devices/%s/supported_cpumask",
+ NULL
+ };
+ unsigned int i;
if (!sysfs)
return NULL;
- snprintf(path, PATH_MAX,
- "%s/bus/event_source/devices/%s/cpumask", sysfs, name);
+ for (i = 0; i < ARRAY_SIZE(path_template); i++) {
+ snprintf(path, PATH_MAX, *path_template, sysfs, name);
+ if (stat(path, &st) == 0)
+ break;
+ }
- if (stat(path, &st) < 0)
+ if (!*path_template)
return NULL;
file = fopen(path, "r");
--
1.9.1
next prev parent reply other threads:[~2016-07-15 10:08 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-15 10:08 [RFCv2 0/4] perf tools: play nicely with CPU PMU cpumasks Mark Rutland
2016-07-15 10:08 ` [RFCv2 1/4] perf stat: balance opening and reading events Mark Rutland
2016-07-18 14:32 ` Jiri Olsa
2016-07-19 6:53 ` [tip:perf/core] perf stat: Balance " tip-bot for Mark Rutland
2016-07-15 10:08 ` [RFCv2 2/4] perf: util: Add more cpu_map helpers Mark Rutland
2016-07-18 14:32 ` Jiri Olsa
2016-07-19 6:53 ` [tip:perf/core] perf cpu_map: Add more helpers tip-bot for Mark Rutland
2016-07-15 10:08 ` [RFCv2 3/4] perf: util: only open events on CPUs an evsel permits Mark Rutland
2016-07-18 14:32 ` Jiri Olsa
2016-07-18 22:46 ` Arnaldo Carvalho de Melo
2016-07-19 6:20 ` Jiri Olsa
2016-07-15 10:08 ` Mark Rutland [this message]
2016-07-18 14:30 ` [RFCv2 4/4] perf: util: support sysfs supported_cpumask file Jiri Olsa
2016-07-18 15:00 ` Mark Rutland
2016-07-21 8:10 ` Jiri Olsa
2016-07-21 9:49 ` Mark Rutland
2016-07-18 16:38 ` Suzuki K Poulose
2016-07-18 17:13 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1468577293-19667-5-git-send-email-mark.rutland@arm.com \
--to=mark.rutland@arm.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=hekuang@huawei.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=wangnan0@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).