All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Suzuki K Poulose <Suzuki.Poulose@arm.com>
Cc: linux-kernel@vger.kernel.org, acme@kernel.org,
	adrian.hunter@intel.com, alexander.shishkin@linux.intel.com,
	hekuang@huawei.com, jolsa@kernel.org, kan.liang@intel.com,
	mingo@redhat.com, peterz@infradead.org, wangnan0@huawei.com
Subject: Re: [RFCv2 4/4] perf: util: support sysfs supported_cpumask file
Date: Mon, 18 Jul 2016 18:13:03 +0100	[thread overview]
Message-ID: <20160718171303.GI10069@leverpostej> (raw)
In-Reply-To: <c6eff854-c415-4024-5134-1d8af7006d98@arm.com>

On Mon, Jul 18, 2016 at 05:38:16PM +0100, Suzuki K Poulose wrote:
> On 15/07/16 11:08, Mark Rutland wrote:
> >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++) {
> 
> The check could be "path_template[i]" to avoid an iteration with NULL
> template.

True. I'd reworked this loop a few times to try to avoid duplicated
checks, but evidently I'd messed that up. I'll clean this up.

> 
> >+		snprintf(path, PATH_MAX, *path_template, sysfs, name);
> 
> Btw, did you mean to use path_template[i] here instead of *path_template ?
> 
> >+		if (stat(path, &st) == 0)
> >+			break;
> >+	}
> >
> >-	if (stat(path, &st) < 0)
> >+	if (!*path_template)
> 
> Same here ?

Yes. On both counts I meant to use the current iteration's entry.

Thanks for spotting that. I'll fix that up.

Thanks,
Mark.

      reply	other threads:[~2016-07-18 17:13 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 ` [RFCv2 4/4] perf: util: support sysfs supported_cpumask file Mark Rutland
2016-07-18 14:30   ` 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 [this message]

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=20160718171303.GI10069@leverpostej \
    --to=mark.rutland@arm.com \
    --cc=Suzuki.Poulose@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.