Received: by 2002:ab2:4a89:0:b0:1f4:a8b6:6e69 with SMTP id w9csp49990lqj; Wed, 10 Apr 2024 03:47:21 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCV2jh/Y9EQrLfZLFsneOdqBLjjS1H8ZB84xCp74jqqC7QEx5Ci4aDHm+ozqD9ZKGrIvpXSML6npsDiHPhWS9j0ErRXVQOBQkyA0V2Q66g== X-Google-Smtp-Source: AGHT+IEXa9iLha9lMGl6XfxneHdb6wLVWxR3qTL9ZTpkoXC1VA7x+9LZT8CDcaLpMNGvkDx943x0 X-Received: by 2002:a17:90b:1e42:b0:2a5:34a7:3430 with SMTP id pi2-20020a17090b1e4200b002a534a73430mr2459396pjb.11.1712746040938; Wed, 10 Apr 2024 03:47:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712746040; cv=pass; d=google.com; s=arc-20160816; b=qE7t9feV8a+CY/wQ9uZDnR3nn5jxUEuCiZR4NywsgRwECQ2rRHSDeaPg6X3qDUeuVp bqstjtwMtM6xnuQtXM8lL9B6S9jkMCYMSZT/wp1Rz67Yi2q+moA8PsSvn5rIUXH7zGm2 Q3Ais003Jh7oa9pQqQ11qRRF2QJDsjzFcylujg02mXCTr8VjwnYVowwYQljvlLSwTQxH sVQFTAifK+QotbubfA9FngXe+5orqK9Vx2CA0jUMiuYOdHS6IltLNU0gdcTnijsdrLhs 5WtOrtZDs8K9S+TcDIzW46ysDd1U06rlhaX01656V+PE4xYxAWFfGPo2Or6wdTV2unZ7 LzUg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:organization:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:message-id:date :subject:cc:to:from:dkim-signature; bh=GBLU0US1LhNw4txFh4cSezAcETl/ZDccMmNshvgLZ7E=; fh=7ueK1huCq2Lf3LMjc8i3Ob70zhQl+8ZRdqYzG6swRYY=; b=zC0rL/exNQGflhSP+VO58KPIhUEVBP8vsoMb5XAO3r7hfJqxth9FIF4nfMNPpKFmfY J5rIT8gr/a0tUdBZ8Nkmt/AZ/VwHiJR/Evg3zZ4sYIJO7c4wE2VnV8EsmUAchdUVf+vL u2PIueg+23RttD+Ad2GZRIzgRjx7m8VujMTLdvBQvdGNViJKuzorbNiVpM27S/N5YXEn jqn4J2Kh7t0+R82FDVtxx6y2HwzYndGPoOgrOXr2sl/C0Cat3RqZ72cdyPSxD1Q9pfwa 4OLGh1pSPg+0hHMXQYqrcNtbgrR7ssCtQmPKhYN3zMkn4puGkBCaO5SjfKHXAsLM0WpN 7ZvA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BuAg7V5Q; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-138362-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138362-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id o4-20020a17090ad24400b002a2bd4cd117si1308856pjw.132.2024.04.10.03.47.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 03:47:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-138362-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BuAg7V5Q; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-138362-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138362-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1109428591E for ; Wed, 10 Apr 2024 10:45:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C00315956E; Wed, 10 Apr 2024 10:45:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BuAg7V5Q" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B813159566; Wed, 10 Apr 2024 10:45:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712745908; cv=none; b=doARYOYi5CR8SDvb4YMpFP3MnMgqEpcepsiWw07+Tb4/72maC9Bj4YQCTg/9jBjILT9EEAijx2keTXn4ZTjSoA8yKlMcVzZQrsSAus0hj6pFVI2cWhKqv8sYhdLTapUz/FGTsYS0yEW/wlcI5fvMfX7pSGvvkn/ejDZTITtt+wA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712745908; c=relaxed/simple; bh=55Kx0QNqq2kdn87S5raCQY6gLhXmnYKjaQ+u8JeTHKs=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=RM9yZb3EPSjh7I49tl/WeJ+NbrFGMzKxJuCm8RX0nOPqa11sHAyDDU2kPM3lljnJfCQPTVqMB13glW2sm//lpzP7FZ1If7hiBsqt6JbToY8L7oWq5u8dnZ0uPSWD0IDN+glv9LkURRKekUABdz7oy5fu54Kq1RHHYsinu7JbWHM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BuAg7V5Q; arc=none smtp.client-ip=192.198.163.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1712745906; x=1744281906; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=55Kx0QNqq2kdn87S5raCQY6gLhXmnYKjaQ+u8JeTHKs=; b=BuAg7V5QpnvAn8p9j53ML3micqYREJHhiYZqyVxciwmzyuGd6Q+3MeUk SozWjw+yLlvLyD6Ju2jGedi0p+Rcghy+cqsVwFunTOjF7DAYsn2qjLiez 3GjkJtTP6ZIEGJmCeLpz4bl95UIoSa8/CCU7qLsx8qRiGmqp5DJ/KaL1G n0z4RYK9ycKqJZ03G66WfSM3qACcQ0Mnz1PqiCLfju5BrHtDThVtqkFch kEbH9m1JYSBVfCefUZMJxEiuuTJvFdfaCi0I8KIkRGUp8JYvuZZJz82qy J52fa0+ldDFXp8BF71bzGSnnbiqLTp4bz3uFoKBJF7w3x3CH0VexMDcOf Q==; X-CSE-ConnectionGUID: w0lmgqqOSMaIMYsXTwE5rw== X-CSE-MsgGUID: Cazz14NcS0Ozf0m9o14DTg== X-IronPort-AV: E=McAfee;i="6600,9927,11039"; a="19489167" X-IronPort-AV: E=Sophos;i="6.07,190,1708416000"; d="scan'208";a="19489167" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2024 03:45:05 -0700 X-CSE-ConnectionGUID: RGTYuv+xQqe3eE+In6IcJw== X-CSE-MsgGUID: ZZiWQ51/RiiN64ExWAMmnw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,190,1708416000"; d="scan'208";a="25293793" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO ahunter-VirtualBox.home\044ger.corp.intel.com) ([10.251.214.234]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2024 03:45:04 -0700 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Namhyung Kim , Ian Rogers , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH] perf tools: Simplify is_event_supported() Date: Wed, 10 Apr 2024 13:44:50 +0300 Message-Id: <20240410104450.15602-1-adrian.hunter@intel.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: 8bit Simplify is_event_supported by using sys_perf_event_open() directly like other perf API probe functions and move it into perf_api_probe.c where other perf API probe functions reside. A side effect is that the probed events do not appear when debug prints are enabled, which is beneficial because otherwise they can be confused with selected events. This also affects "Test per-thread recording" in "Miscellaneous Intel PT testing" which expects the debug prints of only selected events to appear between the debug prints: "perf record opening and mmapping events" and "perf record done opening and mmapping events" Signed-off-by: Adrian Hunter --- tools/perf/util/perf_api_probe.c | 40 +++++++++++++++++++++++++ tools/perf/util/perf_api_probe.h | 2 ++ tools/perf/util/pmus.c | 1 + tools/perf/util/print-events.c | 50 +------------------------------- tools/perf/util/print-events.h | 1 - 5 files changed, 44 insertions(+), 50 deletions(-) diff --git a/tools/perf/util/perf_api_probe.c b/tools/perf/util/perf_api_probe.c index 1de3b69cdf4a..13acb34a4e1c 100644 --- a/tools/perf/util/perf_api_probe.c +++ b/tools/perf/util/perf_api_probe.c @@ -195,3 +195,43 @@ bool perf_can_record_cgroup(void) { return perf_probe_api(perf_probe_cgroup); } + +bool is_event_supported(u8 type, u64 config) +{ + struct perf_event_attr attr = { + .type = type, + .config = config, + .disabled = 1, + }; + int fd = sys_perf_event_open(&attr, 0, -1, -1, 0); + + if (fd < 0) { + /* + * The event may fail to open if the paranoid value + * /proc/sys/kernel/perf_event_paranoid is set to 2 + * Re-run with exclude_kernel set; we don't do that by + * default as some ARM machines do not support it. + */ + attr.exclude_kernel = 1; + fd = sys_perf_event_open(&attr, 0, -1, -1, 0); + } + + if (fd < 0) { + /* + * The event may fail to open if the PMU requires + * exclude_guest to be set (e.g. as the Apple M1 PMU + * requires). + * Re-run with exclude_guest set; we don't do that by + * default as it's equally legitimate for another PMU + * driver to require that exclude_guest is clear. + */ + attr.exclude_guest = 1; + fd = sys_perf_event_open(&attr, 0, -1, -1, 0); + } + + if (fd < 0) + return false; + + close(fd); + return true; +} diff --git a/tools/perf/util/perf_api_probe.h b/tools/perf/util/perf_api_probe.h index b104168efb15..820f6a03221a 100644 --- a/tools/perf/util/perf_api_probe.h +++ b/tools/perf/util/perf_api_probe.h @@ -4,6 +4,7 @@ #define __PERF_API_PROBE_H #include +#include bool perf_can_aux_sample(void); bool perf_can_comm_exec(void); @@ -13,5 +14,6 @@ bool perf_can_record_text_poke_events(void); bool perf_can_sample_identifier(void); bool perf_can_record_build_id(void); bool perf_can_record_cgroup(void); +bool is_event_supported(u8 type, u64 config); #endif // __PERF_API_PROBE_H diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index 2fd369e45832..5442442e0508 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -13,6 +13,7 @@ #include "cpumap.h" #include "debug.h" #include "evsel.h" +#include "perf_api_probe.h" #include "pmus.h" #include "pmu.h" #include "print-events.h" diff --git a/tools/perf/util/print-events.c b/tools/perf/util/print-events.c index 3f38c27f0157..a25be2b2c774 100644 --- a/tools/perf/util/print-events.c +++ b/tools/perf/util/print-events.c @@ -20,6 +20,7 @@ #include "evsel.h" #include "metricgroup.h" #include "parse-events.h" +#include "perf_api_probe.h" #include "pmu.h" #include "pmus.h" #include "print-events.h" @@ -239,55 +240,6 @@ void print_sdt_events(const struct print_callbacks *print_cb, void *print_state) strlist__delete(sdtlist); } -bool is_event_supported(u8 type, u64 config) -{ - bool ret = true; - struct evsel *evsel; - struct perf_event_attr attr = { - .type = type, - .config = config, - .disabled = 1, - }; - struct perf_thread_map *tmap = thread_map__new_by_tid(0); - - if (tmap == NULL) - return false; - - evsel = evsel__new(&attr); - if (evsel) { - ret = evsel__open(evsel, NULL, tmap) >= 0; - - if (!ret) { - /* - * The event may fail to open if the paranoid value - * /proc/sys/kernel/perf_event_paranoid is set to 2 - * Re-run with exclude_kernel set; we don't do that by - * default as some ARM machines do not support it. - */ - evsel->core.attr.exclude_kernel = 1; - ret = evsel__open(evsel, NULL, tmap) >= 0; - } - - if (!ret) { - /* - * The event may fail to open if the PMU requires - * exclude_guest to be set (e.g. as the Apple M1 PMU - * requires). - * Re-run with exclude_guest set; we don't do that by - * default as it's equally legitimate for another PMU - * driver to require that exclude_guest is clear. - */ - evsel->core.attr.exclude_guest = 1; - ret = evsel__open(evsel, NULL, tmap) >= 0; - } - - evsel__delete(evsel); - } - - perf_thread_map__put(tmap); - return ret; -} - int print_hwcache_events(const struct print_callbacks *print_cb, void *print_state) { struct perf_pmu *pmu = NULL; diff --git a/tools/perf/util/print-events.h b/tools/perf/util/print-events.h index bf4290bef0cd..5d241b33b5a3 100644 --- a/tools/perf/util/print-events.h +++ b/tools/perf/util/print-events.h @@ -38,6 +38,5 @@ void print_symbol_events(const struct print_callbacks *print_cb, void *print_sta unsigned int max); void print_tool_events(const struct print_callbacks *print_cb, void *print_state); void print_tracepoint_events(const struct print_callbacks *print_cb, void *print_state); -bool is_event_supported(u8 type, u64 config); #endif /* __PERF_PRINT_EVENTS_H */ -- 2.34.1