All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com,
	alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, ak@linux.intel.com,
	kan.liang@intel.com, yao.jin@intel.com, rickyman7@gmail.com,
	john.garry@huawei.com
Subject: Re: [PATCH v7 2/2] perf tests: Test for PMU alias
Date: Fri, 3 Sep 2021 08:40:25 -0300	[thread overview]
Message-ID: <YTIJqRzIMznK2inr@kernel.org> (raw)
In-Reply-To: <20210902065955.1299-3-yao.jin@linux.intel.com>

Em Thu, Sep 02, 2021 at 02:59:55PM +0800, Jin Yao escreveu:
> A perf uncore PMU may have two PMU names, a real name and an alias
> name. Add one test case to verify the real name and alias name having
> the same effect.
> 
> Iterate the sysfs to get one event which has an alias and create
> evlist by adding two evsels. Evsel1 is created by event and evsel2
> is created by alias.
> 
> Test asserts:
> evsel1->core.attr.type == evsel2->core.attr.type
> evsel1->core.attr.config == evsel2->core.attr.config

Thanks, applied.

- Arnaldo

 
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> Reviewed-by: Andi Kleen <ak@linux.intel.com>
> ---
> v7:
>  - No change.
> 
> v6:
>  - No change.
> 
> v5:
>  - No change.
> 
> v4:
>  - Rebase to perf/core.
> 
> v3:
>  - Use fgets to read alias string from sysfs.
>  - Resource cleanup.
> 
> v2:
>  - New in v2.
> 
>  tools/perf/tests/parse-events.c | 92 +++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
> index 8d4866739255..fd3556cc9ad4 100644
> --- a/tools/perf/tests/parse-events.c
> +++ b/tools/perf/tests/parse-events.c
> @@ -9,6 +9,7 @@
>  #include "pmu-hybrid.h"
>  #include <dirent.h>
>  #include <errno.h>
> +#include "fncache.h"
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  #include <unistd.h>
> @@ -2194,9 +2195,91 @@ static int test_pmu_events(void)
>  	return ret;
>  }
>  
> +static bool test_alias(char **event, char **alias)
> +{
> +	char path[PATH_MAX];
> +	DIR *dir;
> +	struct dirent *dent;
> +	const char *sysfs = sysfs__mountpoint();
> +	char buf[128];
> +	FILE *file;
> +
> +	if (!sysfs)
> +		return false;
> +
> +	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
> +	dir = opendir(path);
> +	if (!dir)
> +		return false;
> +
> +	while ((dent = readdir(dir))) {
> +		if (!strcmp(dent->d_name, ".") ||
> +		    !strcmp(dent->d_name, ".."))
> +			continue;
> +
> +		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
> +			 sysfs, dent->d_name);
> +
> +		if (!file_available(path))
> +			continue;
> +
> +		file = fopen(path, "r");
> +		if (!file)
> +			continue;
> +
> +		if (!fgets(buf, sizeof(buf), file)) {
> +			fclose(file);
> +			continue;
> +		}
> +
> +		/* Remove the last '\n' */
> +		buf[strlen(buf) - 1] = 0;
> +
> +		fclose(file);
> +		*event = strdup(dent->d_name);
> +		*alias = strdup(buf);
> +		closedir(dir);
> +
> +		if (*event == NULL || *alias == NULL) {
> +			free(*event);
> +			free(*alias);
> +			return false;
> +		}
> +
> +		return true;
> +	}
> +
> +	closedir(dir);
> +	return false;
> +}
> +
> +static int test__checkevent_pmu_events_alias(struct evlist *evlist)
> +{
> +	struct evsel *evsel1 = evlist__first(evlist);
> +	struct evsel *evsel2 = evlist__last(evlist);
> +
> +	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
> +	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
> +	return 0;
> +}
> +
> +static int test_pmu_events_alias(char *event, char *alias)
> +{
> +	struct evlist_test e = { .id = 0, };
> +	char name[2 * NAME_MAX + 20];
> +
> +	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
> +		 event, alias);
> +
> +	e.name  = name;
> +	e.check = test__checkevent_pmu_events_alias;
> +	return test_event(&e);
> +}
> +
>  int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
>  {
>  	int ret1, ret2 = 0;
> +	char *event, *alias;
>  
>  #define TEST_EVENTS(tests)				\
>  do {							\
> @@ -2221,6 +2304,15 @@ do {							\
>  			return ret;
>  	}
>  
> +	if (test_alias(&event, &alias)) {
> +		int ret = test_pmu_events_alias(event, alias);
> +
> +		free(event);
> +		free(alias);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
>  	if (!ret2)
>  		ret2 = ret1;
> -- 
> 2.17.1

-- 

- Arnaldo

      reply	other threads:[~2021-09-03 11:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-02  6:59 [PATCH v7 0/2] perf tools: Add PMU alias support Jin Yao
2021-09-02  6:59 ` [PATCH v7 1/2] perf pmu: " Jin Yao
2021-09-03 11:38   ` Arnaldo Carvalho de Melo
2021-09-03 11:52     ` Arnaldo Carvalho de Melo
2021-09-05  9:36       ` Jin, Yao
2021-09-05  9:10     ` Jin, Yao
2021-09-02  6:59 ` [PATCH v7 2/2] perf tests: Test for PMU alias Jin Yao
2021-09-03 11:40   ` Arnaldo Carvalho de Melo [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=YTIJqRzIMznK2inr@kernel.org \
    --to=acme@kernel.org \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=john.garry@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rickyman7@gmail.com \
    --cc=yao.jin@intel.com \
    --cc=yao.jin@linux.intel.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.