Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp4085580pxt; Tue, 10 Aug 2021 19:52:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw/s7CIg/bbJ72jOggXVGWLx254qa0SsY6SK8taCMaNfBhcY9efzs8/l8mSl0xya39fQ5So X-Received: by 2002:a17:907:98b2:: with SMTP id ju18mr877624ejc.15.1628650367818; Tue, 10 Aug 2021 19:52:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628650367; cv=none; d=google.com; s=arc-20160816; b=pd1YErVxpG+gX839BSO8I7y3RDIbRb4AlTwQeQIsr4itUaVXOMkdf5D0Qftl81k1fk uafR21t8rhHmjn836eopvHV5AziyPqbAIwF7AGE8dDeLx+nsSjd1nSC87LPnO2DXsvUP +BYD/PBC/fMqiwAkWBfAVBcZT6LGKG0cR4Zewl2rzYXdXT+9OitT63tcciuV7lznXiF3 FH3iwwmUiaU8VgddW6ZQ1H2035UmqvTrv/SLg+TQT9JkOr6KdQfHMyq6zByY4bhkU/i9 mYapmRBLKM7x3yXb25fw+SRsyAGayg3GQrfoP8Hf7RhbfAPUyf806XmNbJbKp2IburiF 9UNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=opeBWz7oEEsygXh05wW5CsmznL2ypgb4tUK5RsEwboY=; b=cn7L3Yfqxe11ZR1SBiNqpWudfpYFoAo1A6F4wiXL+ubxHwGiC1977shDHCUNbHk+aN U8vdsudoTzPvm+8DbRJ1oU6hHjTljq//qtLd0NOF2GKlTfINIdAcQn3AEe6ttaYfcnlz AvfKv9gEbDD6wu8fbpTken+2qJ21wBb214opIb3QGzC4kEwH502DJcHsjj6TYHLIENDA dvCVipLInK7mvSv0N8p2JyBqz4uy3mvvfxbrXzkriEKSoKyHLaEj4B5/X4W/nrCvpf0m UTOnRhedOApV4lRkqzO718YB/UiEBcdmBhwQutoQ0hBmb/ZEIP6NTn3r9ppSYdpm1Icu F3bg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h15si21699715eja.338.2021.08.10.19.52.18; Tue, 10 Aug 2021 19:52:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232655AbhHKCun (ORCPT + 99 others); Tue, 10 Aug 2021 22:50:43 -0400 Received: from mga05.intel.com ([192.55.52.43]:49103 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232384AbhHKCuh (ORCPT ); Tue, 10 Aug 2021 22:50:37 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10072"; a="300628201" X-IronPort-AV: E=Sophos;i="5.84,311,1620716400"; d="scan'208";a="300628201" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2021 19:50:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,311,1620716400"; d="scan'208";a="445651183" Received: from kbl-ppc.sh.intel.com ([10.239.159.163]) by fmsmga007.fm.intel.com with ESMTP; 10 Aug 2021 19:50:11 -0700 From: Jin Yao To: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com Cc: 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, Jin Yao Subject: [PATCH v4 2/2] perf tests: Test for PMU alias Date: Wed, 11 Aug 2021 10:48:27 +0800 Message-Id: <20210811024827.9483-3-yao.jin@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210811024827.9483-1-yao.jin@linux.intel.com> References: <20210811024827.9483-1-yao.jin@linux.intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Signed-off-by: Jin Yao --- 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 #include +#include "fncache.h" #include #include #include @@ -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