Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp3034965rwr; Fri, 28 Apr 2023 22:39:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6N2qz+BWs0eY3Ljb0mpiiw1eqd47EcMYHAHltEDDplSmyRU5dWF/EIRANAYD0RIUfuZwtc X-Received: by 2002:a17:902:ec81:b0:1a6:6edd:d143 with SMTP id x1-20020a170902ec8100b001a66eddd143mr5824229plg.6.1682746748972; Fri, 28 Apr 2023 22:39:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682746748; cv=none; d=google.com; s=arc-20160816; b=pMlrfXRQ459o7cfKiFvC1HnmIQSY+jJfe7KSTo9B9ArUnqAf/aUFZX//CCXZBms6pH RTBoi7+BsGLLk0iWroHvScKmZGsLPUwkBleD5h+VXPBGuasuptP0wCGI0MPDx8I9ann/ VAqt/+Gxcg33+vqH1NDKLXlMxwYZ1fCy0zSAsljNBu8Ajr1Lbxlgt80rvXJPKU1IQcPf APitnYLUoClt6cGfL1jyiMXOlf3GoEAGb8kPTPL2DBBMrgY/n04OpiEvF98iX0bcugz+ XAhGrRCQH4D+ZeNSLtYptUP0PbJ8pR+IlRFJz92CEU/aweDou+Ik8kKoKGs9Id2SYS+d SFYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=BX+wo12NQqjkG8fkdhxrtw5rHRURfV8DWGPIMVVXPZo=; b=s0H2ZOdMwAWESWm5SqZgVhqSDV7WWbJIQuR+iRIVoiJZWBtJ1X9CfqzEqCt+ytBip4 0rz9tcatkyy8TzyqR8vU4A2p/MZMoNJApKSlzFnIQ8xleSQKmZoMEhgaDeKz5MLS8EvH hbrbkp6BPVPfhpxCUbrPnAd/gxToJriHj224IwUMHw4yrlGmt1DkBF6+jvCCqsQNXuH3 nrD296BOeBHrN+JaVjmVi3MxCwItd50R29bW1GclBlqwK//tiB6x4tSe9fgAA135aYf9 ea/dm3udzEAahLV+0uJ65jBfBM6tib7CWm1W0fZuaxbNCRV5rf41Xj5v3a0mtcd4CBW1 BMkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="md1LucO/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f5-20020a170902860500b001a6d08dc849si1614496plo.31.2023.04.28.22.38.55; Fri, 28 Apr 2023 22:39:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="md1LucO/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347281AbjD2FiP (ORCPT + 99 others); Sat, 29 Apr 2023 01:38:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347301AbjD2FiB (ORCPT ); Sat, 29 Apr 2023 01:38:01 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A99B44496 for ; Fri, 28 Apr 2023 22:37:31 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-556f0e26a1fso6894697b3.0 for ; Fri, 28 Apr 2023 22:37:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1682746648; x=1685338648; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=BX+wo12NQqjkG8fkdhxrtw5rHRURfV8DWGPIMVVXPZo=; b=md1LucO/SEIhVglINnfPzS0ejKNdGvAo7trxq8wmAFHBQO095nj4TOmKEO5gqqg6Ep xDyE6DSmE3wGeSUEJMFW40B4VdsOETGirozK57jOwPQ0GyKWx7zVuY2ABdT4luMFejFi oCcDfFDQy85VlIqpGoc1xDag4fyPZ/bBbN3fkOjnhjF9Lh0jwGhFs/P1qdUlKTKD2RQ7 uGiuLpSarZktJwMCaTskVGUOeJ86WIV4yc90rfFBFkZ8PQsRY0GzqDaRAtcAz3alCP2e rMRXOmHwZhPKY/rPjQqJmgQ4jZzssoJkEH+5ftamtDnAquGLawRJnr/pZMAtU0zdWG2z tVeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682746648; x=1685338648; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BX+wo12NQqjkG8fkdhxrtw5rHRURfV8DWGPIMVVXPZo=; b=UyZkl63KlF8icKWBg0TWTBjPgx9011FyIAsxQmtfory7H9qarn7WIw9B/udBALmJ2C ZwHha0lbc14BH/dTwLC0YyM2BEwK70KnvHYewxjbFcUjnic/V6YDIwofL6I3dpIMca6x 0uWsZq6xXPCzpESZK7WtsIB3H+9xjixMYmxoGZP6RFT+YLlnALKYVqzfDqYwid07VcoP nmzukiSYIpWJ3SLuBcAOs1Ixhve9Z4osR7xdWhhoWA7G930EzodYgbahOk+ziq1q2t3Z rF0Jx3fGTYfwgCrN8xIvFspogzOq2kzvG0o+JlsfcbNPB6ndXH1SmlhM0wOOrVNlAd+G EXkg== X-Gm-Message-State: AC+VfDxufp/EIYtnOmPptj32mqB6icccpR0EwUOgDUKiQxFhpfPQlWFI th/JHjQ8o1zQOrhV/eGTTvHkr9JUFpNX X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:c563:7e28:fb7c:bce3]) (user=irogers job=sendgmr) by 2002:a05:6902:1891:b0:b99:4c9d:3b5a with SMTP id cj17-20020a056902189100b00b994c9d3b5amr4638146ybb.7.1682746648505; Fri, 28 Apr 2023 22:37:28 -0700 (PDT) Date: Fri, 28 Apr 2023 22:34:36 -0700 In-Reply-To: <20230429053506.1962559-1-irogers@google.com> Message-Id: <20230429053506.1962559-17-irogers@google.com> Mime-Version: 1.0 References: <20230429053506.1962559-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Subject: [PATCH v3 16/46] perf test: Roundtrip name, don't assume 1 event per name From: Ian Rogers To: Arnaldo Carvalho de Melo , Kan Liang , Ahmad Yasin , Peter Zijlstra , Ingo Molnar , Stephane Eranian , Andi Kleen , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Florian Fischer , Rob Herring , Zhengjun Xing , John Garry , Kajol Jain , Sumanth Korikkar , Thomas Richter , Tiezhu Yang , Ravi Bangoria , Leo Yan , Yang Jihong , James Clark , Suzuki Poulouse , Kang Minchul , Athira Rajeev , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Ian Rogers Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Opening hardware names and a legacy cache event on a hybrid PMU opens it on each PMU. Parsing and checking indexes fails, as the parsed index is double the expected. Avoid checking the index by just comparing the names immediately after the parse. This change removes hard coded hybrid logic and removes assumptions about the expansion of an event. On hybrid the PMUs may or may not support an event and so using a distance isn't a consistent solution. Reviewed-by: Kan Liang Signed-off-by: Ian Rogers --- tools/perf/tests/evsel-roundtrip-name.c | 119 ++++++++++-------------- 1 file changed, 49 insertions(+), 70 deletions(-) diff --git a/tools/perf/tests/evsel-roundtrip-name.c b/tools/perf/tests/evsel-roundtrip-name.c index e94fed901992..15ff86f9da0b 100644 --- a/tools/perf/tests/evsel-roundtrip-name.c +++ b/tools/perf/tests/evsel-roundtrip-name.c @@ -4,114 +4,93 @@ #include "parse-events.h" #include "tests.h" #include "debug.h" -#include "pmu.h" -#include "pmu-hybrid.h" -#include #include static int perf_evsel__roundtrip_cache_name_test(void) { - char name[128]; - int type, op, err = 0, ret = 0, i, idx; - struct evsel *evsel; - struct evlist *evlist = evlist__new(); + int ret = TEST_OK; - if (evlist == NULL) - return -ENOMEM; - - for (type = 0; type < PERF_COUNT_HW_CACHE_MAX; type++) { - for (op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) { + for (int type = 0; type < PERF_COUNT_HW_CACHE_MAX; type++) { + for (int op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) { /* skip invalid cache type */ if (!evsel__is_cache_op_valid(type, op)) continue; - for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) { - __evsel__hw_cache_type_op_res_name(type, op, i, name, sizeof(name)); - err = parse_event(evlist, name); - if (err) - ret = err; - } - } - } - - idx = 0; - evsel = evlist__first(evlist); + for (int res = 0; res < PERF_COUNT_HW_CACHE_RESULT_MAX; res++) { + char name[128]; + struct evlist *evlist = evlist__new(); + struct evsel *evsel; + int err; - for (type = 0; type < PERF_COUNT_HW_CACHE_MAX; type++) { - for (op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) { - /* skip invalid cache type */ - if (!evsel__is_cache_op_valid(type, op)) - continue; + if (evlist == NULL) { + pr_debug("Failed to alloc evlist"); + return TEST_FAIL; + } + __evsel__hw_cache_type_op_res_name(type, op, res, + name, sizeof(name)); - for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) { - __evsel__hw_cache_type_op_res_name(type, op, i, name, sizeof(name)); - if (evsel->core.idx != idx) + err = parse_event(evlist, name); + if (err) { + pr_debug("Failure to parse cache event '%s' possibly as PMUs don't support it", + name); + evlist__delete(evlist); continue; - - ++idx; - - if (strcmp(evsel__name(evsel), name)) { - pr_debug("%s != %s\n", evsel__name(evsel), name); - ret = -1; } - - evsel = evsel__next(evsel); + evlist__for_each_entry(evlist, evsel) { + if (strcmp(evsel__name(evsel), name)) { + pr_debug("%s != %s\n", evsel__name(evsel), name); + ret = TEST_FAIL; + } + } + evlist__delete(evlist); } } } - - evlist__delete(evlist); return ret; } -static int __perf_evsel__name_array_test(const char *const names[], int nr_names, - int distance) +static int perf_evsel__name_array_test(const char *const names[], int nr_names) { - int i, err; - struct evsel *evsel; - struct evlist *evlist = evlist__new(); + int ret = TEST_OK; - if (evlist == NULL) - return -ENOMEM; + for (int i = 0; i < nr_names; ++i) { + struct evlist *evlist = evlist__new(); + struct evsel *evsel; + int err; - for (i = 0; i < nr_names; ++i) { + if (evlist == NULL) { + pr_debug("Failed to alloc evlist"); + return TEST_FAIL; + } err = parse_event(evlist, names[i]); if (err) { pr_debug("failed to parse event '%s', err %d\n", names[i], err); - goto out_delete_evlist; + evlist__delete(evlist); + ret = TEST_FAIL; + continue; } - } - - err = 0; - evlist__for_each_entry(evlist, evsel) { - if (strcmp(evsel__name(evsel), names[evsel->core.idx / distance])) { - --err; - pr_debug("%s != %s\n", evsel__name(evsel), names[evsel->core.idx / distance]); + evlist__for_each_entry(evlist, evsel) { + if (strcmp(evsel__name(evsel), names[i])) { + pr_debug("%s != %s\n", evsel__name(evsel), names[i]); + ret = TEST_FAIL; + } } + evlist__delete(evlist); } - -out_delete_evlist: - evlist__delete(evlist); - return err; + return ret; } -#define perf_evsel__name_array_test(names, distance) \ - __perf_evsel__name_array_test(names, ARRAY_SIZE(names), distance) - static int test__perf_evsel__roundtrip_name_test(struct test_suite *test __maybe_unused, int subtest __maybe_unused) { - int err = 0, ret = 0; - - if (perf_pmu__has_hybrid() && perf_pmu__hybrid_mounted("cpu_atom")) - return perf_evsel__name_array_test(evsel__hw_names, 2); + int err = 0, ret = TEST_OK; - err = perf_evsel__name_array_test(evsel__hw_names, 1); + err = perf_evsel__name_array_test(evsel__hw_names, PERF_COUNT_HW_MAX); if (err) ret = err; - err = __perf_evsel__name_array_test(evsel__sw_names, PERF_COUNT_SW_DUMMY + 1, 1); + err = perf_evsel__name_array_test(evsel__sw_names, PERF_COUNT_SW_DUMMY + 1); if (err) ret = err; -- 2.40.1.495.gc816e09b53d-goog