All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: "Peter Zijlstra" <peterz@infradead.org>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Arnaldo Carvalho de Melo" <acme@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
	"Jiri Olsa" <jolsa@kernel.org>,
	"Adrian Hunter" <adrian.hunter@intel.com>,
	"Kan Liang" <kan.liang@linux.intel.com>,
	"John Garry" <john.g.garry@oracle.com>,
	"Will Deacon" <will@kernel.org>,
	"James Clark" <james.clark@linaro.org>,
	"Mike Leach" <mike.leach@linaro.org>,
	"Leo Yan" <leo.yan@linux.dev>,
	"Ravi Bangoria" <ravi.bangoria@amd.com>,
	"Weilin Wang" <weilin.wang@intel.com>,
	"Jing Zhang" <renyu.zj@linux.alibaba.com>,
	"Xu Yang" <xu.yang_2@nxp.com>,
	"Sandipan Das" <sandipan.das@amd.com>,
	"Benjamin Gray" <bgray@linux.ibm.com>,
	"Athira Jajeev" <atrajeev@linux.vnet.ibm.com>,
	"Howard Chu" <howardchu95@gmail.com>,
	"Dominique Martinet" <asmadeus@codewreck.org>,
	"Yang Jihong" <yangjihong@bytedance.com>,
	"Colin Ian King" <colin.i.king@gmail.com>,
	"Veronika Molnarova" <vmolnaro@redhat.com>,
	"Dr. David Alan Gilbert" <linux@treblig.org>,
	"Oliver Upton" <oliver.upton@linux.dev>,
	"Changbin Du" <changbin.du@huawei.com>,
	"Ze Gao" <zegao2021@gmail.com>, "Andi Kleen" <ak@linux.intel.com>,
	"Clément Le Goffic" <clement.legoffic@foss.st.com>,
	"Sun Haiyong" <sunhaiyong@loongson.cn>,
	"Junhao He" <hejunhao3@huawei.com>,
	"Tiezhu Yang" <yangtiezhu@loongson.cn>,
	"Yicong Yang" <yangyicong@hisilicon.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v1 13/15] perf tests: Add tool PMU test
Date: Mon, 9 Sep 2024 22:50:50 -0700	[thread overview]
Message-ID: <Zt_eOhg7I81oGeo2@google.com> (raw)
In-Reply-To: <20240907050830.6752-14-irogers@google.com>

On Fri, Sep 06, 2024 at 10:08:28PM -0700, Ian Rogers wrote:
> Ensure parsing with and without PMU creates events with the expected
> config values. This ensures the tool.json doesn't get out of sync with
> tool_pmu_event enum.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/tests/Build          |   1 +
>  tools/perf/tests/builtin-test.c |   1 +
>  tools/perf/tests/tests.h        |   1 +
>  tools/perf/tests/tool_pmu.c     | 111 ++++++++++++++++++++++++++++++++
>  4 files changed, 114 insertions(+)
>  create mode 100644 tools/perf/tests/tool_pmu.c
> 
> diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
> index 5671ee530019..a771e4928247 100644
> --- a/tools/perf/tests/Build
> +++ b/tools/perf/tests/Build
> @@ -67,6 +67,7 @@ perf-test-y += sigtrap.o
>  perf-test-y += event_groups.o
>  perf-test-y += symbols.o
>  perf-test-y += util.o
> +perf-test-y += tool_pmu.o
>  
>  ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc))
>  perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
> diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
> index 470a9709427d..3b30f258c395 100644
> --- a/tools/perf/tests/builtin-test.c
> +++ b/tools/perf/tests/builtin-test.c
> @@ -73,6 +73,7 @@ static struct test_suite *generic_tests[] = {
>  	&suite__PERF_RECORD,
>  	&suite__pmu,
>  	&suite__pmu_events,
> +	&suite__tool_pmu,
>  	&suite__dso_data,
>  	&suite__perf_evsel__roundtrip_name_test,
>  #ifdef HAVE_LIBTRACEEVENT
> diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
> index 6ea2be86b7bf..1ed76d4156b6 100644
> --- a/tools/perf/tests/tests.h
> +++ b/tools/perf/tests/tests.h
> @@ -83,6 +83,7 @@ DECLARE_SUITE(perf_evsel__tp_sched_test);
>  DECLARE_SUITE(syscall_openat_tp_fields);
>  DECLARE_SUITE(pmu);
>  DECLARE_SUITE(pmu_events);
> +DECLARE_SUITE(tool_pmu);
>  DECLARE_SUITE(attr);
>  DECLARE_SUITE(dso_data);
>  DECLARE_SUITE(dso_data_cache);
> diff --git a/tools/perf/tests/tool_pmu.c b/tools/perf/tests/tool_pmu.c
> new file mode 100644
> index 000000000000..94d0dd8fd3cb
> --- /dev/null
> +++ b/tools/perf/tests/tool_pmu.c
> @@ -0,0 +1,111 @@
> +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
> +#include "debug.h"
> +#include "evlist.h"
> +#include "parse-events.h"
> +#include "tests.h"
> +#include "tool_pmu.h"
> +
> +static int do_test(enum tool_pmu_event ev, bool with_pmu)
> +{
> +	struct evlist *evlist = evlist__new();
> +	struct evsel *evsel;
> +	struct parse_events_error err;
> +	int ret;
> +	char str[128];
> +	bool found = false;
> +
> +	if (!evlist) {
> +		pr_err("evlist allocation failed\n");
> +		return TEST_FAIL;
> +	}
> +
> +	if (with_pmu)
> +		snprintf(str, sizeof(str), "tool/%s/", tool_pmu__event_to_str(ev));
> +	else
> +		strncpy(str, tool_pmu__event_to_str(ev), sizeof(str));
> +
> +	parse_events_error__init(&err);
> +	ret = parse_events(evlist, str, &err);
> +	if (ret) {
> +		evlist__delete(evlist);
> +		if (tool_pmu__skip_event(tool_pmu__event_to_str(ev))) {
> +			ret = TEST_OK;
> +			goto out;
> +		}
> +
> +		pr_debug("FAILED %s:%d failed to parse event '%s', err %d\n",
> +			 __FILE__, __LINE__, str, ret);
> +		parse_events_error__print(&err, str);
> +		ret = TEST_FAIL;
> +		goto out;
> +	}
> +
> +	ret = TEST_OK;
> +	if (with_pmu ? (evlist->core.nr_entries != 1) : (evlist->core.nr_entries < 1)) {
> +		pr_debug("FAILED %s:%d Unexpected number of events for '%s' of %d\n",
> +			 __FILE__, __LINE__, str, evlist->core.nr_entries);
> +		ret = TEST_FAIL;
> +		goto out;
> +	}
> +
> +	evlist__for_each_entry(evlist, evsel) {
> +		if (perf_pmu__is_tool(evsel->pmu)) {
> +			if (evsel->core.attr.config != ev) {
> +				pr_debug("FAILED %s:%d Unexpected config for '%s', %lld != %d\n",
> +					__FILE__, __LINE__, str, evsel->core.attr.config, ev);
> +				ret = TEST_FAIL;
> +				goto out;
> +			}
> +			found = true;
> +		}
> +	}
> +
> +	if (!found && !tool_pmu__skip_event(tool_pmu__event_to_str(ev))) {
> +		pr_debug("FAILED %s:%d Didn't find tool event '%s' in parsed evsels\n",
> +			 __FILE__, __LINE__, str);
> +		ret = TEST_FAIL;
> +	}
> +
> +out:
> +	evlist__delete(evlist);
> +	return ret;
> +}
> +
> +static int test__tool_pmu_without_pmu(struct test_suite *test __maybe_unused,
> +				      int subtest __maybe_unused)
> +{
> +	int i;
> +
> +	tool_pmu__for_each_event(i) {
> +		int ret = do_test(i, /*with_pmu=*/false);
> +
> +		if (ret != TEST_OK)
> +			return ret;
> +	}
> +	return TEST_OK;
> +}
> +
> +static int test__tool_pmu_with_pmu(struct test_suite *test __maybe_unused,
> +				   int subtest __maybe_unused)
> +{
> +	int i;
> +
> +	tool_pmu__for_each_event(i) {
> +		int ret = do_test(i, /*with_pmu=*/true);
> +
> +		if (ret != TEST_OK)
> +			return ret;
> +	}
> +	return TEST_OK;
> +}
> +
> +static struct test_case tests__tool_pmu[] = {
> +	TEST_CASE("Parsing without PMU name", tool_pmu_without_pmu),
> +	TEST_CASE("Parsing with PMU name", tool_pmu_with_pmu),
> +	{	.name = NULL, }

An unusual indentation.

Thanks,
Namhyung


> +};
> +
> +struct test_suite suite__tool_pmu = {
> +	.desc = "Tool PMU",
> +	.test_cases = tests__tool_pmu,
> +};
> -- 
> 2.46.0.469.g59c65b2a67-goog
> 

  reply	other threads:[~2024-09-10  5:50 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-07  5:08 [PATCH v1 00/15] Tool and hwmon PMUs Ian Rogers
2024-09-07  5:08 ` [PATCH v1 01/15] perf list: Avoid potential out of bounds memory read Ian Rogers
2024-09-11 14:26   ` Arnaldo Carvalho de Melo
2024-09-07  5:08 ` [PATCH v1 02/15] perf pmus: Fake PMU clean up Ian Rogers
2024-09-11 14:28   ` Arnaldo Carvalho de Melo
2024-09-07  5:08 ` [PATCH v1 03/15] perf evsel: Add accessor for tool_event Ian Rogers
2024-09-11 14:28   ` Arnaldo Carvalho de Melo
2024-09-07  5:08 ` [PATCH v1 04/15] perf pmu: To info add event_type_desc Ian Rogers
2024-09-07  5:08 ` [PATCH v1 05/15] perf pmu: Allow hardcoded terms to be applied to attributes Ian Rogers
2024-09-11 14:31   ` Arnaldo Carvalho de Melo
2024-09-07  5:08 ` [PATCH v1 06/15] perf parse-events: Expose/rename config_term_name Ian Rogers
2024-09-07  5:08 ` [PATCH v1 07/15] perf tool_pmu: Factor tool events into their own PMU Ian Rogers
2024-09-07  5:08 ` [PATCH v1 08/15] perf tool_pmu: Rename enum perf_tool_event to tool_pmu_event Ian Rogers
2024-09-07  5:08 ` [PATCH v1 09/15] perf tool_pmu: Rename perf_tool_event__* to tool_pmu__* Ian Rogers
2024-09-07  5:08 ` [PATCH v1 10/15] perf tool_pmu: Move expr literals to tool_pmu Ian Rogers
2024-09-07  5:08 ` [PATCH v1 11/15] perf jevents: Add tool event json under a common architecture Ian Rogers
2024-09-07  5:08 ` [PATCH v1 12/15] perf tool_pmu: Switch to standard pmu functions and json descriptions Ian Rogers
2024-09-10  5:47   ` Namhyung Kim
2024-09-07  5:08 ` [PATCH v1 13/15] perf tests: Add tool PMU test Ian Rogers
2024-09-10  5:50   ` Namhyung Kim [this message]
2024-09-10 15:59     ` Ian Rogers
2024-09-07  5:08 ` [PATCH v1 14/15] perf hwmon_pmu: Add a tool PMU exposing events from hwmon in sysfs Ian Rogers
2024-09-10  6:56   ` Namhyung Kim
2024-09-10 17:32     ` Ian Rogers
2024-09-07  5:08 ` [PATCH v1 15/15] perf docs: Document tool and hwmon events Ian Rogers
2024-09-10  2:21 ` [PATCH v1 00/15] Tool and hwmon PMUs Ian Rogers
2024-09-10  3:36   ` Guenter Roeck

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=Zt_eOhg7I81oGeo2@google.com \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=asmadeus@codewreck.org \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=bgray@linux.ibm.com \
    --cc=changbin.du@huawei.com \
    --cc=clement.legoffic@foss.st.com \
    --cc=colin.i.king@gmail.com \
    --cc=hejunhao3@huawei.com \
    --cc=howardchu95@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=john.g.garry@oracle.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=leo.yan@linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux@treblig.org \
    --cc=mark.rutland@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=mingo@redhat.com \
    --cc=oliver.upton@linux.dev \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=renyu.zj@linux.alibaba.com \
    --cc=sandipan.das@amd.com \
    --cc=sunhaiyong@loongson.cn \
    --cc=vmolnaro@redhat.com \
    --cc=weilin.wang@intel.com \
    --cc=will@kernel.org \
    --cc=xu.yang_2@nxp.com \
    --cc=yangjihong@bytedance.com \
    --cc=yangtiezhu@loongson.cn \
    --cc=yangyicong@hisilicon.com \
    --cc=zegao2021@gmail.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.