From nobody Wed Dec 17 23:29:23 2025 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F5EE1C0DF9 for ; Thu, 2 May 2024 21:35:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714685723; cv=none; b=BTBRGIsUJCxRU7da6dCN6yK5Jc8wkzll/0Dfs/Cu4hFq5iBykm/POsj+YKuuHYbBAAN3d1PEfPmno4mkYKDMWyy/zvLtt6YZ2TqoBU1/NfGsiE6LVa6bgqjsDkVmj+Ys2pe4/GdOACco57NFTWDE1+gTB+lx2obuxnBhCOCKqR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714685723; c=relaxed/simple; bh=LzaODOpcY1x8MkLGsXtF6i/yozt96RkuIzwffZUTjTI=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Cc:Content-Type; b=mFAivuwPcAPcI4W1Y0260TQv4uQXG8wL5fWT5MP7KSh8FQJqLT83apCJxdMm/lRASibFuoKlLGClPrKgkQ9ApWh+n1Nj3dpPOkXDhuXJxt0tf71+6hzt9QLrBQkqOzrX9oHy349cc8rvs/X+grNq1mf5W1RXLT6y5EEJ7ru9Vtc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=xl8Wz12R; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="xl8Wz12R" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-61e0c1f7169so17497687b3.0 for ; Thu, 02 May 2024 14:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714685721; x=1715290521; darn=vger.kernel.org; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=T7T7WZEjBuFkXStQU5evNsW0vwkcSQvyjHQCUzxlSFc=; b=xl8Wz12Rcp13Q/R9K3ZKDgHeMG3daNhNNtmMFlP4T3x3Fl0JoynsVvlrzL/Ng2vT02 Fq05Ipow1LywJHw1lqChpQsD+gnu/PQVLdNS8iM0kMVebrXmsjVdj9xVD4crQkbnyJzm 42OQGvom/Tlc82ZEJMn7mGtlF3HINOYzsEmwjq86micgsAZPV7VQTr1fKQazwInatBHE L17NS99R8M2+Yu1Zxwqkuc3keA9JwAMZCA36SvJCuiOQ7s78sly/wrYDrvFN8oeEEQDL g3JGgteJ190moI1a5vdfC8N8tO2QHZpxKAWmkyx8itBpz/zWD6Fa78d9H3S6rxfxtAWX 4umg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714685721; x=1715290521; 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=T7T7WZEjBuFkXStQU5evNsW0vwkcSQvyjHQCUzxlSFc=; b=aNMyv/R3FUN5gcUzH/wFqCnoARxiY904IccEUIHq/Q6yGyhuyIfzjvIa8+RA7mNOao OTKBaHveGts3WTNMYEZG6KktCrNZ11oOd8KkfTek3XuP97FsheGC52oK4yZbUv1PU+Sn 9wXmryP9jV5MZWGj18vm7qhXDXwSvkpqrPix7c/ctz972UGzYlvfJ7le9NGdk2bQThCM dQ8CeH3Lf8KdYPuNQLXk1/uJYVbq6LDubDZ3kNFBiUHO5ZHn+ARXeQyhvAlYgjyeJZpm vj6/GL0Ye01wOcyywPlx3YXnqa86yDU39Ff4r7A+s2pOEaWx/ejDhTCT6K7R0ZuFOoY3 VPNQ== X-Forwarded-Encrypted: i=1; AJvYcCUuLxdYkpD69uh+ghefCKZ3I5BRmdf8CjJlKlq/zjIrdUbtIWni/gUTJWoaH+DeFGKEvPoojI6bHCzBvlIN8mKJTPQn01/CdpA8OTIe X-Gm-Message-State: AOJu0YyVpwUKWEGZbaEbAGJ+Y0lLXX+kOwC5x+JiCpDmmyZEn7SXsj8K jFH0Efg6YMMDOVjDZS63ELmU/lqK3uuJlrqUD+XEFtpG7wBdj1Bv3QLQSFh7uKPaEbr0sozJxst 1FQ6udA== X-Google-Smtp-Source: AGHT+IE96253la+W5w82RGrU9iiMHjmCN4kCK9hxJ4G+nZztuN23VK1xyUEq3B6SHLIS30WBMQYFp2AOkzVP X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:deba:378d:2d3a:2641]) (user=irogers job=sendgmr) by 2002:a05:6902:1505:b0:de5:9ecc:46b6 with SMTP id q5-20020a056902150500b00de59ecc46b6mr318413ybu.6.1714685721504; Thu, 02 May 2024 14:35:21 -0700 (PDT) Date: Thu, 2 May 2024 14:35:06 -0700 In-Reply-To: <20240502213507.2339733-1-irogers@google.com> Message-Id: <20240502213507.2339733-6-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240502213507.2339733-1-irogers@google.com> X-Mailer: git-send-email 2.45.0.rc1.225.g2a3ae87e7f-goog Subject: [PATCH v5 5/6] perf test pmu: Test all sysfs PMU event names are the same case From: Ian Rogers To: Kan Liang , Thomas Richter , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Bjorn Helgaas , Jonathan Corbet , Randy Dunlap , Jing Zhang , James Clark , Ravi Bangoria , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: Ian Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Being either lower or upper case means event name probes can avoid scanning the directory doing case insensitive comparisons, just the lower or upper case version of the name can be checked for existence. For the majority of PMUs event names are all lower case, upper case names are present on S390. Signed-off-by: Ian Rogers Reviewed-by: Kan Liang --- tools/perf/tests/pmu.c | 90 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c index 071cfc51b52c..06cc0e46cb28 100644 --- a/tools/perf/tests/pmu.c +++ b/tools/perf/tests/pmu.c @@ -5,12 +5,17 @@ #include "pmu.h" #include "tests.h" #include "debug.h" +#include "fncache.h" +#include +#include +#include #include #include #include #include #include #include +#include =20 /* Fake PMUs created in temp directory. */ static LIST_HEAD(test_pmus); @@ -251,9 +256,94 @@ static int test__pmu_events(struct test_suite *test __= maybe_unused, int subtest return ret; } =20 +static bool permitted_event_name(const char *name) +{ + bool has_lower =3D false, has_upper =3D false; + + for (size_t i =3D 0; i < strlen(name); i++) { + char c =3D name[i]; + + if (islower(c)) { + if (has_upper) + return false; + has_lower =3D true; + continue; + } + if (isupper(c)) { + if (has_lower) + return false; + has_upper =3D true; + continue; + } + if (!isdigit(c) && c !=3D '.' && c !=3D '_' && c !=3D '-') + return false; + } + return true; +} + +static int test__pmu_event_names(struct test_suite *test __maybe_unused, + int subtest __maybe_unused) +{ + char path[PATH_MAX]; + DIR *pmu_dir, *event_dir; + struct dirent *pmu_dent, *event_dent; + const char *sysfs =3D sysfs__mountpoint(); + int ret =3D TEST_OK; + + if (!sysfs) { + pr_err("Sysfs not mounted\n"); + return TEST_FAIL; + } + + snprintf(path, sizeof(path), "%s/bus/event_source/devices/", sysfs); + pmu_dir =3D opendir(path); + if (!pmu_dir) { + pr_err("Error opening \"%s\"\n", path); + return TEST_FAIL; + } + while ((pmu_dent =3D readdir(pmu_dir))) { + if (!strcmp(pmu_dent->d_name, ".") || + !strcmp(pmu_dent->d_name, "..")) + continue; + + snprintf(path, sizeof(path), "%s/bus/event_source/devices/%s/type", + sysfs, pmu_dent->d_name); + + /* Does it look like a PMU? */ + if (!file_available(path)) + continue; + + /* Process events. */ + snprintf(path, sizeof(path), "%s/bus/event_source/devices/%s/events", + sysfs, pmu_dent->d_name); + + event_dir =3D opendir(path); + if (!event_dir) { + pr_debug("Skipping as no event directory \"%s\"\n", path); + continue; + } + while ((event_dent =3D readdir(event_dir))) { + const char *event_name =3D event_dent->d_name; + + if (!strcmp(event_name, ".") || !strcmp(event_name, "..")) + continue; + + if (!permitted_event_name(event_name)) { + pr_err("Invalid sysfs event name: %s/%s\n", + pmu_dent->d_name, event_name); + ret =3D TEST_FAIL; + } + } + closedir(event_dir); + } + closedir(pmu_dir); + return ret; +} + static struct test_case tests__pmu[] =3D { TEST_CASE("Parsing with PMU format directory", pmu_format), TEST_CASE("Parsing with PMU event", pmu_events), + TEST_CASE("PMU event names", pmu_event_names), { .name =3D NULL, } }; =20 --=20 2.45.0.rc1.225.g2a3ae87e7f-goog