From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 B1779231A55 for ; Mon, 8 Dec 2025 14:23:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203802; cv=none; b=jCr40ANs5aoAAdXoIK5h3o9ytpzjMeMRKLi8ad8uLcFQtK+RXXQRTgaZ2tGHkpSo/z/hU3AOdXB4uyZz4ug869b41JjHBdFiEABrppWkLdr4nkLGSIyMIG29bhruZVVao51U0u05PrhGjFZDCVsMHlx0+q+KL7ZEtuQoDp55p34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203802; c=relaxed/simple; bh=J1wksdIJurkXz2WYT6fWQWG7Ja/E0T/Th8nKVIM+YO4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e42zkTTPlX0RiqaAxE2YFHp89qY9vE8RDGwzx0dmjObqr5GPysWMqR83Gl5fJ5WrEqr8MboRzfxUEC9x1e3n5LKj8Gl45jX9Mr6TRlv8+8tPFMWItGBYbATMy8PvZ2pYPsx2Md+7WhxQrEkHlS6bKr7+kcEztw7rSloKohdE5ww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=W3Nqm329; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="W3Nqm329" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-477563e28a3so32441555e9.1 for ; Mon, 08 Dec 2025 06:23:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203799; x=1765808599; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2sW5CVG6fTovVK5pm5F0b9TUqJDd0mR5nCkkwbSDkjc=; b=W3Nqm329pQpcHDahFhKI0Yz7Yh0x9xCAK0rCkSaMceiZR6ACIJmGWRJA88bdxYi04E mA17WwI0nfYyw7bLb3d99eFPprcIB19ZEUzAkxPG2yZdZJ0za6ywG90Zg1VgjTeDQR8K JeO4xyq9Kc7akUixTy1hVIDGDpGLJBijf4jzTpc6ySv1eiphZIsGSvGBEHUAFNc3yNa5 MiUMN74Lj0nKOhPw33g/rBj2W/VmrnVAjrvwV7eTyCfh+2Ula7E++PbJ5mZTPpYjB2XU ZwU1Himq2bErlRd9cSY+T6EpbsK8WR2ZqQ62A9Lxh2oJuQXhBbkZLZgOnD8h6Q2pYgPI hXbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203799; x=1765808599; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2sW5CVG6fTovVK5pm5F0b9TUqJDd0mR5nCkkwbSDkjc=; b=SPossSaQxJ65HquxRy8X4/6UpTvQaoDnbUjcS5gVF6mcKAqZsCVYUxWHlFxZpJIHOu eY1iGggPCuxiYcb5kQPTE9otbAfyYUf0JZFZGZso+JdVNiHKkKUNhkbgFzKEDGSVRGl/ k497tI6UiO8j75SFUXb72l/2P+y1qxwbnen6Vls3lPx/KwE0aRx2u6zcjzcBw9LHX5Q+ XH1c5F9cXXnoiteLneTSgQj1CY5zlvrP5tIE4TP+MhVNvReoqijrEdBHqwRiz7iWe6wQ 2+Eb1kMhmNJ7/H9pcNFNcbX0vce/aYvNuVggyEGcVmisXAFv1rCDPbmutTF1BcOyHQZ+ X92w== X-Forwarded-Encrypted: i=1; AJvYcCVIROkxQB3gU3DKuPKLeMKsHRD3GB2Nw7LJS1Dz6mHoGJ2UgFtTwIsoZ6TH5QncwsDk+XyQrKEMpALe9X4=@vger.kernel.org X-Gm-Message-State: AOJu0Yz48pbY7n2ELkn7kWx5F5Lh5l3U5sDwZc0hBIh1Yj3aUU6OmU+z vcPyvGOpQaGKxQpFJseJlrcPlZ/5no+1/nRF4R0qGLBZbGQUudU+uE5Nw/guBugmGI8= X-Gm-Gg: ASbGnctbh9/lXg3UYqBurlDZz6/cgscdPg7P8A5JKHmbaWY4li7BcvJ7Edy1gfbjN54 VcCBz9QKKi/DqdaCx1VAk7ANS1w90j5DimI0uWKsNPUIQz/STqkwBfdS5dNJeKtFWoHaDw7CUGU c7TPzSsRYX8uPuZlSAofRyw7l6VC1hbT9wkddLYIDrDlE0clclo9hQ6RnGs7irtuvJegeRiTndW OtG78tIDHviEj9CE6tOR99lcCM4/FT5sDxE0bRR6/0i4VgAyPtKoevWir2XdQx5W3AG5jey2XJC n0W78qp1TYZN8wY6C/M9RpJVv+xP2xbXw6K9cQLmV0wFULsDpOhEXA0yex5cUrdNNaY3vm7hrLs VfbEkBLVfRNocq+WOdC39x8Vp6x2DAaw/0LrsX+6d1HYds2ywA0dn2izBdK5PgEPLFsVgt/ZXuc 2VLApz/Uxgq8yOvsZW0fUGKGsRuS6FHwKjCZwzRIO/qw== X-Google-Smtp-Source: AGHT+IGYLrvxfRv8u0L6Kyp8fUW21hbwdhdUTTfYsrMxGFHJNMXLnvGBImr+N7bTR/70pUVKkNbYZQ== X-Received: by 2002:a05:600c:4f11:b0:46e:2815:8568 with SMTP id 5b1f17b1804b1-47939e2371fmr79357865e9.10.1765203798705; Mon, 08 Dec 2025 06:23:18 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:18 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:04 +0000 Subject: [PATCH v2 01/12] perf parse-events: Refactor get_config_terms() to remove macros Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-1-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 The ADD_CONFIG_TERM() macros build the __type argument out of a partial EVSEL__CONFIG_TERM_x enum name. This means that they can't be called from a function where __type is a variable and it's also impossible to grep the codebase to find usages of these enums as they're never typed in full. Fix this by removing the macros and replacing them with an add_config_term() function. It seems the main reason these existed in the first place was to avoid type punning and to write to a specific field in the union, but the same thing can be achieved with a single write to a u64 'val' field. Signed-off-by: James Clark --- tools/perf/util/evsel_config.h | 1 + tools/perf/util/parse-events.c | 146 ++++++++++++++++++++++++-------------= ---- 2 files changed, 86 insertions(+), 61 deletions(-) diff --git a/tools/perf/util/evsel_config.h b/tools/perf/util/evsel_config.h index bcd3a978f0c4..685fd8d5c4a8 100644 --- a/tools/perf/util/evsel_config.h +++ b/tools/perf/util/evsel_config.h @@ -50,6 +50,7 @@ struct evsel_config_term { u64 cfg_chg; char *str; int cpu; + u64 val; } val; bool weak; }; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 17c1c36a7bf9..d5b009b4ebab 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1116,105 +1116,107 @@ static int config_attr(struct perf_event_attr *at= tr, return 0; } =20 -static int get_config_terms(const struct parse_events_terms *head_config, - struct list_head *head_terms) +static struct evsel_config_term *add_config_term(enum evsel_term_type type, + struct list_head *head_terms, + bool weak) { -#define ADD_CONFIG_TERM(__type, __weak) \ - struct evsel_config_term *__t; \ - \ - __t =3D zalloc(sizeof(*__t)); \ - if (!__t) \ - return -ENOMEM; \ - \ - INIT_LIST_HEAD(&__t->list); \ - __t->type =3D EVSEL__CONFIG_TERM_ ## __type; \ - __t->weak =3D __weak; \ - list_add_tail(&__t->list, head_terms) - -#define ADD_CONFIG_TERM_VAL(__type, __name, __val, __weak) \ -do { \ - ADD_CONFIG_TERM(__type, __weak); \ - __t->val.__name =3D __val; \ -} while (0) + struct evsel_config_term *t; =20 -#define ADD_CONFIG_TERM_STR(__type, __val, __weak) \ -do { \ - ADD_CONFIG_TERM(__type, __weak); \ - __t->val.str =3D strdup(__val); \ - if (!__t->val.str) { \ - zfree(&__t); \ - return -ENOMEM; \ - } \ - __t->free_str =3D true; \ -} while (0) + t =3D zalloc(sizeof(*t)); + if (!t) + return NULL; + + INIT_LIST_HEAD(&t->list); + t->type =3D type; + t->weak =3D weak; + list_add_tail(&t->list, head_terms); =20 + return t; +} + +static int get_config_terms(const struct parse_events_terms *head_config, + struct list_head *head_terms) +{ struct parse_events_term *term; =20 list_for_each_entry(term, &head_config->terms, list) { + struct evsel_config_term *new_term; + enum evsel_term_type new_type; + char *str =3D NULL; + u64 val; + switch (term->type_term) { case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: - ADD_CONFIG_TERM_VAL(PERIOD, period, term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_PERIOD; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ: - ADD_CONFIG_TERM_VAL(FREQ, freq, term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_FREQ; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_TIME: - ADD_CONFIG_TERM_VAL(TIME, time, term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_TIME; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_CALLGRAPH: - ADD_CONFIG_TERM_STR(CALLGRAPH, term->val.str, term->weak); + new_type =3D EVSEL__CONFIG_TERM_CALLGRAPH; + str =3D term->val.str; break; case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: - ADD_CONFIG_TERM_STR(BRANCH, term->val.str, term->weak); + new_type =3D EVSEL__CONFIG_TERM_BRANCH; + str =3D term->val.str; break; case PARSE_EVENTS__TERM_TYPE_STACKSIZE: - ADD_CONFIG_TERM_VAL(STACK_USER, stack_user, - term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_STACK_USER; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_INHERIT: - ADD_CONFIG_TERM_VAL(INHERIT, inherit, - term->val.num ? 1 : 0, term->weak); + new_type =3D EVSEL__CONFIG_TERM_INHERIT; + val =3D term->val.num ? 1 : 0; break; case PARSE_EVENTS__TERM_TYPE_NOINHERIT: - ADD_CONFIG_TERM_VAL(INHERIT, inherit, - term->val.num ? 0 : 1, term->weak); + new_type =3D EVSEL__CONFIG_TERM_INHERIT; + val =3D term->val.num ? 0 : 1; break; case PARSE_EVENTS__TERM_TYPE_MAX_STACK: - ADD_CONFIG_TERM_VAL(MAX_STACK, max_stack, - term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_MAX_STACK; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS: - ADD_CONFIG_TERM_VAL(MAX_EVENTS, max_events, - term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_MAX_EVENTS; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_OVERWRITE: - ADD_CONFIG_TERM_VAL(OVERWRITE, overwrite, - term->val.num ? 1 : 0, term->weak); + new_type =3D EVSEL__CONFIG_TERM_OVERWRITE; + val =3D term->val.num ? 1 : 0; break; case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE: - ADD_CONFIG_TERM_VAL(OVERWRITE, overwrite, - term->val.num ? 0 : 1, term->weak); + new_type =3D EVSEL__CONFIG_TERM_OVERWRITE; + val =3D term->val.num ? 0 : 1; break; case PARSE_EVENTS__TERM_TYPE_DRV_CFG: - ADD_CONFIG_TERM_STR(DRV_CFG, term->val.str, term->weak); + new_type =3D EVSEL__CONFIG_TERM_DRV_CFG; + str =3D term->val.str; break; case PARSE_EVENTS__TERM_TYPE_PERCORE: - ADD_CONFIG_TERM_VAL(PERCORE, percore, - term->val.num ? true : false, term->weak); + new_type =3D EVSEL__CONFIG_TERM_PERCORE; + val =3D term->val.num ? true : false; break; case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT: - ADD_CONFIG_TERM_VAL(AUX_OUTPUT, aux_output, - term->val.num ? 1 : 0, term->weak); + new_type =3D EVSEL__CONFIG_TERM_AUX_OUTPUT; + val =3D term->val.num ? 1 : 0; break; case PARSE_EVENTS__TERM_TYPE_AUX_ACTION: - ADD_CONFIG_TERM_STR(AUX_ACTION, term->val.str, term->weak); + new_type =3D EVSEL__CONFIG_TERM_AUX_ACTION; + str =3D term->val.str; break; case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE: - ADD_CONFIG_TERM_VAL(AUX_SAMPLE_SIZE, aux_sample_size, - term->val.num, term->weak); + new_type =3D EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE; + val =3D term->val.num; break; case PARSE_EVENTS__TERM_TYPE_RATIO_TO_PREV: - ADD_CONFIG_TERM_STR(RATIO_TO_PREV, term->val.str, term->weak); + new_type =3D EVSEL__CONFIG_TERM_RATIO_TO_PREV; + str =3D term->val.str; break; case PARSE_EVENTS__TERM_TYPE_USER: case PARSE_EVENTS__TERM_TYPE_CONFIG: @@ -1229,7 +1231,23 @@ do { \ case PARSE_EVENTS__TERM_TYPE_RAW: case PARSE_EVENTS__TERM_TYPE_CPU: default: - break; + /* Don't add a new term for these ones */ + continue; + } + + new_term =3D add_config_term(new_type, head_terms, term->weak); + if (!new_term) + return -ENOMEM; + + if (str) { + new_term->val.str =3D strdup(str); + if (!new_term->val.str) { + zfree(&new_term); + return -ENOMEM; + } + new_term->free_str =3D true; + } else { + new_term->val.val =3D val; } } return 0; @@ -1290,10 +1308,16 @@ static int get_config_chgs(struct perf_pmu *pmu, st= ruct parse_events_terms *head } } =20 - if (bits) - ADD_CONFIG_TERM_VAL(CFG_CHG, cfg_chg, bits, false); + if (bits) { + struct evsel_config_term *new_term; + + new_term =3D add_config_term(EVSEL__CONFIG_TERM_CFG_CHG, + head_terms, false); + if (!new_term) + return -ENOMEM; + new_term->val.cfg_chg =3D bits; + } =20 -#undef ADD_CONFIG_TERM return 0; } =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 BCDCE2E9757 for ; Mon, 8 Dec 2025 14:23:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203804; cv=none; b=EGHL0flD8Ru3haU/am4sbykMuUzMXgkNKTjN/BYOxxdFYsOFApkZYqh5wYK2YaZsd66RxJ25NiOBS6s32TtEEZiFhPvPRBpFDa6wpDIfjCR3/S9bfXMSBwIhQeBouieQyO60+JKJR+vq0vLvYi+cIwQpbpek+DqH8jXAkcD7dlg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203804; c=relaxed/simple; bh=5NCEYmFOMSn1NnqH2r6SLNGkyrF/aEzQcgPmbeVVcCk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CSLzoHVUCZa9MCUkshqUVTxB/jViESTJfODvL7PiT/P+QJ5JVYheNGGmbDawhgpIIl7aZrcPf+htPTgzbvsfYNYMzHXCbvoZQZRXWW9oIf0wcWAAClASBqnxFALA63aYIj1iWdRDXxufVWzjbGKA07Ta8TvKxx5SKttg1bu4YzU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ZdtBGmU8; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ZdtBGmU8" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-477770019e4so48364485e9.3 for ; Mon, 08 Dec 2025 06:23:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203800; x=1765808600; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Fo3Ukb8C7ZJ/8SCaXAl1O3xmDhdyoGsW4g7zVBrDJgU=; b=ZdtBGmU8Z8qYRXdAnrkBscTAaXJ1FUvw/xBOi8Rwlp2t5+RCPKP67e16WsYiPK7J8K 5/yqU+CrwNiwkaC6fc6rfJwRICt5hvzjfvEpVdK0D1rI278YdN/JXOlKhQZUcvEHW1pi Skl2Hwx25ln97E3ZL38pkrOMUwcBdscrxKimxa1soYEuz95z1k8C0j/TctnmxoBbpq1c oyxuNQsesByoodEm/TvXMA+BWlQjG60ZxoabHU24LKsvNG7/aI0dL3NZkbKsa7e903Xr j+BJtLWrQTsgqCl6RElU0VrHpbrsEEYzkOKQVR1D7D6TZLuNdGBeJPHLsmLj7Rz2Kpsg gj5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203800; x=1765808600; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Fo3Ukb8C7ZJ/8SCaXAl1O3xmDhdyoGsW4g7zVBrDJgU=; b=N+uRGc3f8W9y6xbinZXkUlU2/5Z3mUFrv+9Q9gWXu69V9JZlRUkXC6WHAX6Ftrt//B FHdyBaKWZp9Jf1y8BJsVh1sSrXNOTbp5z4iJqjoulaYyIxpMe6uF6mlyO5a6+G0kQYox 8CE+T/FzayY7gwZLJvVs/is7Clukzy06//snz4d5fvFWdeSWXErdozbeA3rYN1YT37CQ NvHSYM27dju5ZYxRKawfWmZClFfTRnLWLiMIiP6txfufe9XSnFnZ7UO1EHYKHnqbJnpO zUIspBFKHgXVMXqET/WU1KH80asqnjscXklnzkqqZSKd89efG8g40FwWmc8vPs5VGyVm 0Vgw== X-Forwarded-Encrypted: i=1; AJvYcCXZHAro+fISwPvxpGSnocp7IReltRX7L4RCOsRpMWuuDoBDBvWzxak1PbHHqeCB1im18SGn/OoZDrXpzII=@vger.kernel.org X-Gm-Message-State: AOJu0YyjiYx6qGYTxTDbUS7Yqg8wrrfknSI90Dvpk91mmcyqcZ8w29EO Ztgl95bb9x+xdV+ulDXBwQWiKmbJWDIZS6RH0XfKao/TJHlMLlb7wGXmF9+loXFTZLk= X-Gm-Gg: ASbGnctfWNMh6uL/VcIfvEm2xVBs6oYBTuSUSaBLJ1JpEZiHmc6FqOKzS1NmFfeWfr3 F2pu4EXdLWt7sINRdASbvPnwXNYInYPp+6zX/beoLcv8jn+egXRTz2IgTmXAIa82TBJ1UrcTfru O3JIDCqE6lWrex3gSY+JL5+K18MD8OVzNCoyc8nej4lMOO3bbl/hG/LYybBPslTrECisJLbu8Wb m1ty5zUjxEBmuAQSqCx+PJgqe6MfldvjRnAeN4zLVbYacG64GTHamFyA4zAqtV8+t8bSLfsQeQC YSMXg94cEyt9FxIx7mOsuWiBP+Wq8rPRyBpUFVRAEqRdeo541xWeJp6He+Nq19f/2JmJ9yR4nSd U60tR2Y90U0Kq2EnzN9At+kUrMPVlOSGfx6aHlAWZKP6s2dZwqss95YHSIrRFgIi1kINuvEpbFO zrcDl2GxkYcfzVQQnuhUGw X-Google-Smtp-Source: AGHT+IEWXXN+QPhKpdMYQbMuezg4ndaMdLlTrhbxsRoIEQiDGZKKfKzsw7aEJsV99BxsYe4l/srBZw== X-Received: by 2002:a05:600c:35c1:b0:477:9cdb:e32e with SMTP id 5b1f17b1804b1-47939dfa0f0mr92586695e9.9.1765203799977; Mon, 08 Dec 2025 06:23:19 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:19 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:05 +0000 Subject: [PATCH v2 02/12] perf evsel: Support sparse fields in evsel__set_config_if_unset() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-2-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Sparse config fields are technically supported although currently unused. field_prep() only works for contiguous bitfields so replace it with pmu_format_value(). Signed-off-by: James Clark --- tools/perf/util/pmu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 956ea273c2c7..2c26c8d76bed 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -144,6 +144,8 @@ struct perf_pmu_format { }; =20 static int pmu_aliases_parse(struct perf_pmu *pmu); +static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, + bool zero); =20 static struct perf_pmu_format *perf_pmu__new_format(struct list_head *list= , char *name) { @@ -1381,7 +1383,6 @@ bool evsel__is_aux_event(const struct evsel *evsel) * the bit pattern. It is shifted into position by this function, so to set * something to true, pass 1 for val rather than a pre shifted value. */ -#define field_prep(_mask, _val) (((_val) << (ffsll(_mask) - 1)) & (_mask)) void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, const char *config_name, u64 val) { @@ -1398,8 +1399,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - evsel->core.attr.config &=3D ~bits; - evsel->core.attr.config |=3D field_prep(bits, val); + pmu_format_value(&bits, val, &evsel->core.attr.config, /*zero=3D*/true); } =20 static struct perf_pmu_format * --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 53D113128D5 for ; Mon, 8 Dec 2025 14:23:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203806; cv=none; b=hoKs9BdIowjp4O8DNJ0ufWw4HQoKyLsDAdd/SvxsBOsgGAE78eqIbwikHbVr05lY5p3Zi7fuREUkxOz3IoarTxUKE8rpK9wlTfdjxiyyvML4sAaTb8c7Gms38iSdoaaNLKstC68923uGIG4RBrRlYTcl8gqIeuq/ccVtSI4JeH0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203806; c=relaxed/simple; bh=05Pbq0Jej4bAMFmDYk0LEbaSQ7hT79En5MlCfiT84iw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D2I1T9qBXP5PYrQTRkPWhq0Q+7pdDE/cZMNlb42zehaWepuHIGUei0gfpSmHKueOdIQE+iQowO+F2efljkOmPCzF3VkkbnIZipcI3LrSeT/LMaPYgA7Kg9nnSAFGx4FcK7Ad2Glr7uSELJy8jmhG85tn5r6CQPn9fv0qAOD2loU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=eO9TJ4cM; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="eO9TJ4cM" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4775e891b5eso22390615e9.2 for ; Mon, 08 Dec 2025 06:23:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203801; x=1765808601; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Zdr/CpHFQzsUBx8MJgOEiksl8pXlmmWZkFYmwO0fchY=; b=eO9TJ4cMdRYKxlxE06p4ZetHT5hSAAUOExKjYi2azbgqZzm8f551KKbYJo4fr25zrO jaip3GEkceFFAM4mvmmLbyEV282df2yJZk+zdpLFLQo/4GljQsYAIAj7sqU8oWge/Pfi 4z6kLuJOEApDISf+McxOOY1L3mvE+VWIgc5Yp4TalMqBn9vt03/IgDOTlpWrhGQc2UWN po+2G9RTDnvir9ofKL9AaUkuU0b31KyW14ejqW/2E7iqQHx5nLoZQE9u+oJRZPSySU+4 qXTn7O8Rh98/HKlivJoFwYJAkkxQeBZr8b6TGU2mCkGbXNiLo917vAilwQBnn11QTeL6 Q4Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203801; x=1765808601; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Zdr/CpHFQzsUBx8MJgOEiksl8pXlmmWZkFYmwO0fchY=; b=NUAqIl1p6VGRQIw5TAuVocsWdoQ4bD41dg10iNTMSLewGmnDgY32E+hLI8V6zB/N9G HDj2r44xTVhSZ4S3sq5mwyzPHcXgCn3Km2V6IVAIg/2Om6uztXFaovaVH9o+qY/SKG12 VM0cV2ZVB7lk+rZHjkYG4GPtejgCOV6j992MvJsl9Y0dj6YLVWfVMdVr9i3Y3/3Vng1+ xre3F6P/SQPlDz4qCz2jSiSZwbXdL8mUQvts3kLFBC3dUg0QOpqQJZYGuLTX9rgFi5gb 0oIAJdx/aXkN61scvk5mN1ReS4llS0cj1n0vaf1bpghIyyOWdfHXOQRUYlTCLeySKSCD nO1A== X-Forwarded-Encrypted: i=1; AJvYcCWZDH2Yed75Oc8rwB83nxBZzmhm+2ShyKpCgq9dw6ACL7POXh+gcUfMxC0ZNKRax6k4Bb4lkzO909W59Pc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9UFBIZVK2IEp1tG/74YY0hWK8ECOmuThH4nOxR7IBvO4KXc0F hs/cVjtpJ9yITIab0RerQJHm9RL1U3vXUGK2kvhrygydG4x/k5xZKLMVu5Z7eIqnqtM= X-Gm-Gg: ASbGncvBP7Gxhb/u9bNdEx2PJVY1m9lSsQz9Fe1Ht9axJLVLf1L1xxkBE7iVmNYipBB fPXhxtjPeTzu34HqyBUvIxMBvHZTRFnmEYMwzzzJbWccYh3Mz1LadvM2zMtCJ//NOtM6V1OMFrO rd58Bb1//v0ceevRe/3hzVDJ3ayqKFujT3t1xTYsfUc/7aws9zj9SgjFE9M+lTvi5bvUp3GKiBG LSrUuiZg26q5i30W6v0zVU5For7MWFlQ2N+si56xjAbfLtvuXMB1OCVj1YLFwDBURjRP7gLUPHc 0tcTGtiDzPujmDbb4My0BYsk4ku7DwyzsAgzuww8gEnr+1j0f58SaFO2wpCilwPcOyGzq1bSQCS gisaJkUue0yHV/96V+IQVRvGjfNPlbOD0GGr/B+TPUKbh5xFWuabPmDSWK0R0u9dp8KOzIpvOnK 2HSIEO7n/UTC6g2knD2FUF X-Google-Smtp-Source: AGHT+IEu1SotQqoNDjmrD/hhBGtqy2G67QaRn20FmBFDWomVLO0SM2avnkCOuR5GDvM7Zf5p/BZfuw== X-Received: by 2002:a05:600c:4743:b0:477:afc5:fb02 with SMTP id 5b1f17b1804b1-47939e246e0mr79322745e9.21.1765203801289; Mon, 08 Dec 2025 06:23:21 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:20 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:06 +0000 Subject: [PATCH v2 03/12] perf parse-events: Track all user changed config bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-3-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Currently we only track which bits were set by the user in attr->config. But all configN fields should be treated equally as they can all have default and user overridden values. Track them all by making get_config_chgs() generic and calling it once for each config value. Signed-off-by: James Clark --- tools/perf/util/evsel.c | 6 ++- tools/perf/util/evsel_config.h | 6 ++- tools/perf/util/parse-events.c | 98 +++++++++++++++++++++++---------------= ---- tools/perf/util/pmu.c | 2 +- 4 files changed, 65 insertions(+), 47 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 9cd706f62793..dcadf022405d 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1242,7 +1242,11 @@ static void evsel__apply_config_terms(struct evsel *= evsel, case EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE: /* Already applied by auxtrace */ break; - case EVSEL__CONFIG_TERM_CFG_CHG: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG1: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG2: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG3: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG4: break; case EVSEL__CONFIG_TERM_RATIO_TO_PREV: rtp_buf =3D term->val.str; diff --git a/tools/perf/util/evsel_config.h b/tools/perf/util/evsel_config.h index 685fd8d5c4a8..7b565d76c0bc 100644 --- a/tools/perf/util/evsel_config.h +++ b/tools/perf/util/evsel_config.h @@ -27,7 +27,11 @@ enum evsel_term_type { EVSEL__CONFIG_TERM_AUX_OUTPUT, EVSEL__CONFIG_TERM_AUX_ACTION, EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE, - EVSEL__CONFIG_TERM_CFG_CHG, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG1, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG2, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG3, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG4, EVSEL__CONFIG_TERM_RATIO_TO_PREV, }; =20 diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index d5b009b4ebab..7a3a90377896 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1253,66 +1253,32 @@ static int get_config_terms(const struct parse_even= ts_terms *head_config, return 0; } =20 -/* - * Add EVSEL__CONFIG_TERM_CFG_CHG where cfg_chg will have a bit set for - * each bit of attr->config that the user has changed. - */ -static int get_config_chgs(struct perf_pmu *pmu, struct parse_events_terms= *head_config, - struct list_head *head_terms) +static int add_cfg_chg(struct perf_pmu *pmu, + struct parse_events_terms *head_config, + struct list_head *head_terms, + int format_type, + enum parse_events__term_type term_type, + enum evsel_term_type new_term_type) { struct parse_events_term *term; u64 bits =3D 0; int type; =20 list_for_each_entry(term, &head_config->terms, list) { - switch (term->type_term) { - case PARSE_EVENTS__TERM_TYPE_USER: + if (term->type_term =3D=3D PARSE_EVENTS__TERM_TYPE_USER) { type =3D perf_pmu__format_type(pmu, term->config); - if (type !=3D PERF_PMU_FORMAT_VALUE_CONFIG) + if (type !=3D format_type) continue; bits |=3D perf_pmu__format_bits(pmu, term->config); - break; - case PARSE_EVENTS__TERM_TYPE_CONFIG: + } else if (term->type_term =3D=3D term_type) { bits =3D ~(u64)0; - break; - case PARSE_EVENTS__TERM_TYPE_CONFIG1: - case PARSE_EVENTS__TERM_TYPE_CONFIG2: - case PARSE_EVENTS__TERM_TYPE_CONFIG3: - case PARSE_EVENTS__TERM_TYPE_CONFIG4: - case PARSE_EVENTS__TERM_TYPE_LEGACY_HARDWARE_CONFIG: - case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE_CONFIG: - case PARSE_EVENTS__TERM_TYPE_NAME: - case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: - case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ: - case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: - case PARSE_EVENTS__TERM_TYPE_TIME: - case PARSE_EVENTS__TERM_TYPE_CALLGRAPH: - case PARSE_EVENTS__TERM_TYPE_STACKSIZE: - case PARSE_EVENTS__TERM_TYPE_NOINHERIT: - case PARSE_EVENTS__TERM_TYPE_INHERIT: - case PARSE_EVENTS__TERM_TYPE_MAX_STACK: - case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS: - case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE: - case PARSE_EVENTS__TERM_TYPE_OVERWRITE: - case PARSE_EVENTS__TERM_TYPE_DRV_CFG: - case PARSE_EVENTS__TERM_TYPE_PERCORE: - case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT: - case PARSE_EVENTS__TERM_TYPE_AUX_ACTION: - case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE: - case PARSE_EVENTS__TERM_TYPE_METRIC_ID: - case PARSE_EVENTS__TERM_TYPE_RAW: - case PARSE_EVENTS__TERM_TYPE_CPU: - case PARSE_EVENTS__TERM_TYPE_RATIO_TO_PREV: - default: - break; } } =20 if (bits) { struct evsel_config_term *new_term; =20 - new_term =3D add_config_term(EVSEL__CONFIG_TERM_CFG_CHG, - head_terms, false); + new_term =3D add_config_term(new_term_type, head_terms, false); if (!new_term) return -ENOMEM; new_term->val.cfg_chg =3D bits; @@ -1321,6 +1287,50 @@ static int get_config_chgs(struct perf_pmu *pmu, str= uct parse_events_terms *head return 0; } =20 +/* + * Add EVSEL__CONFIG_TERM_USR_CFG_CONFIGn where cfg_chg will have a bit se= t for + * each bit of attr->configN that the user has changed. + */ +static int get_config_chgs(struct perf_pmu *pmu, + struct parse_events_terms *head_config, + struct list_head *head_terms) +{ + int ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG, + PARSE_EVENTS__TERM_TYPE_CONFIG, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG1, + PARSE_EVENTS__TERM_TYPE_CONFIG1, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG1); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG2, + PARSE_EVENTS__TERM_TYPE_CONFIG2, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG2); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG3, + PARSE_EVENTS__TERM_TYPE_CONFIG3, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG3); + if (ret) + return ret; + + return add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG4, + PARSE_EVENTS__TERM_TYPE_CONFIG4, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG4); +} + int parse_events_add_tracepoint(struct parse_events_state *parse_state, struct list_head *list, const char *sys, const char *event, diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 2c26c8d76bed..e02f74d4020c 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1387,7 +1387,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, const char *config_name, u64 val) { u64 user_bits =3D 0, bits; - struct evsel_config_term *term =3D evsel__get_config_term(evsel, CFG_CHG); + struct evsel_config_term *term =3D evsel__get_config_term(evsel, USR_CHG_= CONFIG); =20 if (term) user_bits =3D term->val.cfg_chg; --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 72A18314D14 for ; Mon, 8 Dec 2025 14:23:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203806; cv=none; b=WXdtzT7hN3wLgdUsZ92Z0x0/B2FsjFakTxl+CPqAPaxQdYo08BcgEDbCQJEp2WQfb9L0Eh9sdcUTRRz2Yp18CnK1edvsUeNdobNSJfl4uflnXw6CSDCv5s1kLUPFaEHhU8PQzxxiHD3iyqg8fIpOnFvfZPta377OeIwl8O+rfUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203806; c=relaxed/simple; bh=G91PVNHfi0QYrYWGktdjTNJ/Okf/P/cyrGTlMeXq90I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s9P9veqkB3YyUIrDG9dLPZP/yEW8Gg7fchLMfP0fUUPPjnG7g9PALFQrzSvjuHe05r5OpKJ1WFppXobb8PuqRNh7Xl4e3GJNmHQ+Pr995QnaHDgBKnGCB8rLetAYCZYgzFN8slHv0lNNaUm5GyxVoI0/pU6gJCMQbLH8qUngcww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=eDq8/R/J; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="eDq8/R/J" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-47775fb6cb4so37917715e9.0 for ; Mon, 08 Dec 2025 06:23:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203803; x=1765808603; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ZRhf5LqtwI1BCs/MXxqcrvCOGauWve2lGZSZRvbtNrM=; b=eDq8/R/JfzeeH6y8BF+AWTwQINiTl38oUMd7dpbuLjNjbCzcOhPMX8Rp+877/Be1dR Qazyg3IO5gQuECgkSDh0E1EQhaw/kQN8at2kwBGSgJeCiiIreSNK7Gn0d4LydSeMqvQ+ Nvl/b8S+6ju+Aa7a9fLH8Ol46bGGq1WBixI/ocuAdPB7SmLFXrMiSFa8BzoFkLPUcyFm 7yRyn+0xgw9e+yUZcj+a3zBcDEE1iEHbr+3BdrsdCS2B8laDhgZ86AZER+nlxSpr4MZl /lUDaHIZNK1EWnLpVOfvawwcCm4CsEaDjWrOmBDpsFdA8bmUJyxBniidXka1B+ID2z9v WnFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203803; x=1765808603; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ZRhf5LqtwI1BCs/MXxqcrvCOGauWve2lGZSZRvbtNrM=; b=s3CG0sA1fo9ATDB6UNX2GhkWbRdfdD30zNUtBN+2iZmUAEFmuNWI/FwC8pNr507BlE yVNE8CkPWMsaHCp/Q6XP1EfzIOAuydetffgV/PbVPKLCx1hF/ZiAxgzdS4SOAOCi406C 6YCjgpNXGfkMHdVTkZXxUuh0ZhHz+OcIPbcFMpLs4xO4AmY2Ca+DTOwt+7oi3jDquAIT eVJHQlnSokCUGfSxg7mVtB3+yciY/s3e51iO7d2KEtaDvJ0iBMnlhATpYnf/xdpMljet Ku3ORL8BJ+eHjmOJMkDtxAig5uH9krDeG9D4XmFPRLbl7SUfQ78Z0oNmOsFMrbmWQoCk iEqA== X-Forwarded-Encrypted: i=1; AJvYcCX31yl01VTNtNTQ6SXCahLYwQUJVCAYeV+xZl2Exq4ddfDf4+W+55nL3/IEl1WJiE6gdFVbPRaody41MsI=@vger.kernel.org X-Gm-Message-State: AOJu0YySc/g7RquVxXEpZAwKaKPtzmxXfk0mp7+LcwHxNG1enz3ePBV4 ynu8UNn8M1C1k09TcqOJuMo1/nL8LRHz3XZKHG3akb5XzdUzK77jt8Vh6l5CsE1Srm5U2BB4XgD lV/ur X-Gm-Gg: ASbGnct2RrDplpzysggrmpKvTtNN+3smICJPf8c/lclqjVke4aDCGhNE4oAhpjkLe7g h8nklqpOGzT1fzCcc7ZBPsY18EKR9vqhhnOTO9S93UgzXaOaU6b6dIkkwQSG3RjYX1JUJJpvKvq dIjM2nUNIbE+mVgIEiCtBZ7igUsFOGdneVHfo+cKU23luVWjEMdeWWx5S4O0jqOSA0EMSh5Skzr tposkhMOo+gK9VaMe1SGmeTch+q21tY4+CoiKPmm/9CsRn28KfvyqNPp1GzhXBuso98FZlDDxcA 8e7m1/IkoZfLt2IDB9lAqSHT9MWtr9/UvkW4hVv9pCE1Ga0El01BREALlJ+EwmqvvYA4aOctzYH nhPVgEEbK4JCK7ijFcI9USCuc0tvtOrNPtqu23MQzOMCB5i8t8Xv6YAaiOnPs+WWP3DHhnV9YdG VAPUKrUHQptjBSk9bR+ysB X-Google-Smtp-Source: AGHT+IEhpoMN4+zTETFkcztiEWYM4FtF59nv9AEONwYh8tAIN/5BaZy8msPhg0ncsD8sYg+q3JZCMw== X-Received: by 2002:a05:600c:3514:b0:477:7768:8da4 with SMTP id 5b1f17b1804b1-47939deac5bmr91892805e9.7.1765203802717; Mon, 08 Dec 2025 06:23:22 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:22 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:07 +0000 Subject: [PATCH v2 04/12] perf evsel: apply evsel__set_config_if_unset() to all config fields Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-4-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Misleadingly, evsel__set_config_if_unset() only works with the config field and not config1, config2, etc. This is fine at the moment because all users of it happen to operate on bits that are in that config field. Fix it before there are any new users of the function which operate on bits in different config fields. In theory it's also possible for a driver to move an existing bit to another config field and this fixes that scenario too, although this hasn't happened yet either. Signed-off-by: James Clark --- tools/perf/util/pmu.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index e02f74d4020c..514cba91f5d9 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -146,6 +146,8 @@ struct perf_pmu_format { static int pmu_aliases_parse(struct perf_pmu *pmu); static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool zero); +static struct perf_pmu_format *pmu_find_format(const struct list_head *for= mats, + const char *name); =20 static struct perf_pmu_format *perf_pmu__new_format(struct list_head *list= , char *name) { @@ -1387,7 +1389,38 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu= , struct evsel *evsel, const char *config_name, u64 val) { u64 user_bits =3D 0, bits; - struct evsel_config_term *term =3D evsel__get_config_term(evsel, USR_CHG_= CONFIG); + struct evsel_config_term *term; + struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, config_n= ame); + __u64 *vp; + + if (!format) + return; + + switch (format->value) { + case PERF_PMU_FORMAT_VALUE_CONFIG: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG); + vp =3D &evsel->core.attr.config; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG1); + vp =3D &evsel->core.attr.config1; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG2); + vp =3D &evsel->core.attr.config2; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG3); + vp =3D &evsel->core.attr.config3; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG4); + vp =3D &evsel->core.attr.config4; + break; + default: + pr_err("Unknown format value: %d\n", format->value); + return; + } =20 if (term) user_bits =3D term->val.cfg_chg; @@ -1399,7 +1432,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - pmu_format_value(&bits, val, &evsel->core.attr.config, /*zero=3D*/true); + pmu_format_value(&bits, val, vp, /*zero=3D*/true); } =20 static struct perf_pmu_format * --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 CCE0931690E for ; Mon, 8 Dec 2025 14:23:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203808; cv=none; b=R8IsoyMUysNOu0rqrASSyZRDJIjSia+xFYkefr/biGMgJGE/1aOgTmLaNhzomEdcUC/IVHcQVokF5hRAkfNJ1oeluZPaySYbkubmIjLNd/zhpq3z3NgTmY4MZQm3Za/sxfYLxepbDc0QWjVK3UUkvAGksbLjF++tT3R+4I+BWpU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203808; c=relaxed/simple; bh=X/msMFwhX0wLMQ0DfyqjBDYpojeE6MPsUgOWEjzkTWw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k0Ghyvhqo02AaJYT/gVX2ry12qZO1On9weEpToDeuhSXcGfqm+iYn2xOTP0IdTmpkkeZKMSmYIdbOmLvKH/SbLyssTquM+5mBEjiric+8E6pPlLQkwMMuLSDpzJDEebiq2o33vtA2fBtX/a9KtRGzIfD1E5JFrXUM0QA2aKD8WI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=yj9g6pyu; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="yj9g6pyu" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4775ae77516so54133455e9.1 for ; Mon, 08 Dec 2025 06:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203804; x=1765808604; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Y0SkqXfoDch2Crrep+7q41phmdji29dr3SE6FUuXCaY=; b=yj9g6pyuHgm6dFWlxsDa8sRnheIwzqeeL9OKCy6h8eWQVWXmNHxgmXb8SvHq/G5sUg +VYWriOzUci0lby5Jjl5G77YO/LOTDxkne0Q9xtN9OG9y5LpjWRhl9ujkldVP3fX/mK0 9/XNVwxtN/yPQmhaCUonq3kYgroxMO2ihJuDeoDFPyKAvi5lInf7N6lyryJO++bUsGp+ tGR95XaST8WF5fYTzJxNj2oDhUDf0Ib/Cu2CaOVVjZ2BBcfDOsZ+mIy5eDetEaxP7iwf IL/Zm9BAMw0D6FMbvlFnugHEqKv7s/yL6kJEMZ+ljriL2A9DNm4zHm4AKXMbaBUusYrW Tspw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203804; x=1765808604; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Y0SkqXfoDch2Crrep+7q41phmdji29dr3SE6FUuXCaY=; b=a2u9eiBFCLQgAI2jP9QrJv+d+nHafWShQbfNI7LwaGhWRCRq+tc6g43AQFOfYoeHQT RDRSGfj37bCnsIFO5FULhrzGAWfF3iE+M+M5zWMyggfi3FD4h0GH+KJpCyVhRxlkHw4v cjgri8d4MmFpBBkBiSdeDsDH3MWbCI8SsH/SL9Ugr9CZAoynOnhe7FCa4XLY5JycxI4+ 557MBUndLxHDwSnIW66mj0g2yPs55ChT4QtIjnLeElr/vLfninDUh1DuGBbOxZQ5MLda bsavgFtMNyPnGE0/OgA1mRvcydTHDeiUUM83jsocUTQ07/xaIT6n5HqfC45wlDpgA9zV Nf1w== X-Forwarded-Encrypted: i=1; AJvYcCUEFg9U8pqNnQjUnfVmAL+oNFzxjXHuTluo9nDRzd6Wi/OGzqfCYhwxBe58E1eQDXBwcqr/LZ8AavEnx7Y=@vger.kernel.org X-Gm-Message-State: AOJu0YxezvhnP+zph3xjMV4Aq+pik0pFycPbk4MmXNWxxTHMPAQl1Iqn 9KD2y8vGZg3BUYM6noQ38MbVx+wrzgfd6Q9vq4wtajHQCpDjr5oAYiDNYr/WbI//IJw= X-Gm-Gg: ASbGncuGhoObMyTlvJdC/7hBuXVm39EteMAMhxN+/mh/QD3ZfKEv74bjlMGdfMHb818 WsTl6pyDZM8YmTC5et5MIp+7uXRRLCtQumXKiSouxUQrHBLZdaGoJEZkmyPLFE9YP7tkJaHJuHR AoLM1Wg3p28V5ZxoEfXIOTyrfkORT/MsqgUYnwF3h2xfAArRDPja9bTRky+u+xkXwfjlV39kgsM 4UAx3NtW2R21tfQrDjxmuM9SKLB5/mM0uFDCa/HC5s3GhfnEPEyo/u1pAcLoh1SYHicGFqbE2dU UTFnZp/7ysv6XU8L+qPM5XA/1w3rK4OOkbhjiIgkplmBndBwnT7fuU//bxc5Xn1YH/fVyaJHzaR W4G3Gl7HOAnerdSmlMyOoQ4g+R6zYiJa56yZaPrkiXwVD5h44cxapCLSDheOH2VHKwdY1Qdggng tF90OkGTNaVtQ6Cfg3mydU X-Google-Smtp-Source: AGHT+IHwhLKOnPQJeWTWX0qTh2VoeWymbnjL3OsZC8/GHM1ActCoWHWUVxRUFsk4tnHyrFVHMqEDIg== X-Received: by 2002:a05:600c:3e8c:b0:475:d8b3:a9d5 with SMTP id 5b1f17b1804b1-47939dfa460mr81661905e9.10.1765203804015; Mon, 08 Dec 2025 06:23:24 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:23 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:08 +0000 Subject: [PATCH v2 05/12] perf evsel: Add a helper to get the value of a config field Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-5-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 This will be used by aux PMUs to read an already written value for configuring their events and for also testing. Its helper pmu_format_unpack() does the opposite of the existing pmu_format_value() so rename that one to pmu_format_pack() so it's clear how they are related. Signed-off-by: James Clark --- tools/perf/util/evsel.h | 2 ++ tools/perf/util/pmu.c | 77 ++++++++++++++++++++++++++++++++++++++++++---= ---- 2 files changed, 68 insertions(+), 11 deletions(-) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index a08130ff2e47..092904a61ec7 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -575,6 +575,8 @@ void evsel__uniquify_counter(struct evsel *counter); ((((src) >> (pos)) & ((1ull << (size)) - 1)) << (63 - ((pos) + (size) - 1= ))) =20 u64 evsel__bitfield_swap_branch_flags(u64 value); +int evsel__get_config_val(struct perf_pmu *pmu, struct evsel *evsel, + const char *config_name, u64 *val); void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, const char *config_name, u64 val); =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 514cba91f5d9..ef7358ad1fb9 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -144,8 +144,8 @@ struct perf_pmu_format { }; =20 static int pmu_aliases_parse(struct perf_pmu *pmu); -static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, - bool zero); +static void pmu_format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero); static struct perf_pmu_format *pmu_find_format(const struct list_head *for= mats, const char *name); =20 @@ -1377,6 +1377,61 @@ bool evsel__is_aux_event(const struct evsel *evsel) return pmu && pmu->auxtrace; } =20 +/* + * Unpacks a raw config[n] value using the sparse bitfield that defines a + * format attr. For example "config1:1,6-7,44" defines a 4 bit value acros= s non + * contiguous bits and this function returns those 4 bits as a value. + */ +static u64 pmu_format_unpack(u64 format, u64 config_val) +{ + int val_bit =3D 0; + u64 res =3D 0; + int fmt_bit; + + for_each_set_bit(fmt_bit, &format, PERF_PMU_FORMAT_BITS) { + if (test_bit(fmt_bit, &config_val)) + res |=3D BIT_ULL(val_bit); + + val_bit++; + } + return res; +} + +int evsel__get_config_val(struct perf_pmu *pmu, struct evsel *evsel, + const char *config_name, u64 *val) +{ + struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, config_n= ame); + u64 bits =3D perf_pmu__format_bits(pmu, config_name); + + if (!format || !bits) { + pr_err("Unknown/empty format name: %s\n", config_name); + *val =3D 0; + return -EINVAL; + } + + switch (format->value) { + case PERF_PMU_FORMAT_VALUE_CONFIG: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config1); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config2); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config3); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config4); + return 0; + default: + pr_err("Unknown format value: %d\n", format->value); + *val =3D 0; + return -EINVAL; + } +} + /* * Set @config_name to @val as long as the user hasn't already set or clea= red it * by passing a config term on the command line. @@ -1432,7 +1487,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - pmu_format_value(&bits, val, vp, /*zero=3D*/true); + pmu_format_pack(&bits, val, vp, /*zero=3D*/true); } =20 static struct perf_pmu_format * @@ -1477,8 +1532,8 @@ int perf_pmu__format_type(struct perf_pmu *pmu, const= char *name) * Sets value based on the format definition (format parameter) * and unformatted value (value parameter). */ -static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, - bool zero) +static void pmu_format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero) { unsigned long fbit, vbit; =20 @@ -1595,23 +1650,23 @@ static int pmu_config_term(const struct perf_pmu *p= mu, switch (term->type_term) { case PARSE_EVENTS__TERM_TYPE_CONFIG: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config, zero); + pmu_format_pack(bits, term->val.num, &attr->config, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG1: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config1, zero); + pmu_format_pack(bits, term->val.num, &attr->config1, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG2: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config2, zero); + pmu_format_pack(bits, term->val.num, &attr->config2, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG3: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config3, zero); + pmu_format_pack(bits, term->val.num, &attr->config3, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG4: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config4, zero); + pmu_format_pack(bits, term->val.num, &attr->config4, zero); break; case PARSE_EVENTS__TERM_TYPE_LEGACY_HARDWARE_CONFIG: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); @@ -1749,7 +1804,7 @@ static int pmu_config_term(const struct perf_pmu *pmu, */ } =20 - pmu_format_value(format->bits, val, vp, zero); + pmu_format_pack(format->bits, val, vp, zero); return 0; } =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 BDEE13191C6 for ; Mon, 8 Dec 2025 14:23:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; cv=none; b=qdPRxkHJ0MDR9zrShYhRn/t5GYLl9FAp1jr4khojF56UHOtVbFI3KKbNnkzxPV+XEvyXMB/IwZY4w/ozf9YBI2sJeJ0E8Pu7AofeWC6UKx5nkMb7H4S7oH24MAVNhTwhgM8VycuYEedqKVa+RdQ6RBhOg7Il2iEDO04wMjrFVYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; c=relaxed/simple; bh=YtM+1aNng9k7tTt5Dwdj5usVkuCmgXWVCVWjkE7NZQY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ogq44lABTFWvNQAVCdSE8hKHLspChg+0/ql+W9divyFAEH3bd+wAW72KTs3M44xUechZYOm58iF+YzqKeUtXjUWAsjARysS6DecET/TeaUUYh9t8RNAemKysJm0eIPovDpK/9/KlbRzOTbnHrXLSpiRAEGggAiPSVJLibFjfUuQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=wVMUdblm; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="wVMUdblm" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4779a637712so33699885e9.1 for ; Mon, 08 Dec 2025 06:23:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203805; x=1765808605; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=1ls6iiYqzfm34lFVKKpOeVQLMElwj6qnMc/N2H8cTBM=; b=wVMUdblmfTfyNwKftKP/20M9vVjys0O8acQ0DBBX+tEuBOSCLEHqDwkFGVTHtZ187s F7xdfW70j2fYJaIoQq8xbxJOd/eCNZXqq26EUlThr/PJLuyW2HbDlBR432ucCzKEJagj raorov8jE4eFD/IFg/7D54kaHZ3ATlNcleJpRZ4BTYhQQEybEdOr07PYdpAxTVw0IEKe n21dZcGi8i2T8qYlQMtRsWMfdknZpJRWasFggVKzn5FlyirkndOS6FR2/hRlKOKVFj7/ RmwQp+yKHjGIV9srP8Zdvls7YpNIgSvJFTQ2awmtXmhYo0jqBPXVF+i+mtUlFiJNJt6z tnkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203805; x=1765808605; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=1ls6iiYqzfm34lFVKKpOeVQLMElwj6qnMc/N2H8cTBM=; b=rAoXY5RktmVx8a7lm2vlp1UVqmhBV42PU+UYsAXDHRW0YcHsO3wc67OUr/ROEdmR6W rRFdLoAS3HS6cyMN/TnyH+1eQFM6WBujvKmCRp5XKIB3YzXFDCHchPPm3SOUmUp+HyMX v6PiTigFzCE5yvRYCv7EVIg5f/uD+o5KgcFtn1rDNdUUlOU0CibxlUVQxllfh14ZOCUC 1gSptdLtCLeAyyeOr9qPb7tCFS+2OCYn2Y70PGJdl1cFrmPZg+HAN4cI0DApV36Vwi4G ifikkT8NDyhLIdN/VCy06UdNssmouyV9r0hgHAAMwvdSzj0zUokWUn8HyDjPvLF3atkx jMow== X-Forwarded-Encrypted: i=1; AJvYcCVHJwn5XtG43Dzn24Nhxg7Mm0HHECWWNC+SQu+yx6AspWxOpv4DC4qxrG2rJmj+IrAcqru5L87pH9/x90I=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/FjYsX1NgaCTeC+GuLtigTRw6tHGq0o5QtUeuzi9wSFY8qsJn bkkooQhakhXc8CuVV4GvNEiY5hwse4LU6MDRCHIpcHdm2QRpkzUSO0dJisKQm7CZbzk= X-Gm-Gg: ASbGncvCP+6X+MWBaRjd7DNOQENyzm3q2Vxnw4x8ozd+K9smgFTgCh0UIdItww0Q1qT LJ262ubFh0Y35vDYXwqU0AnCRhqA3J5gE048ux50aYQ69//exexDCuHKDQZGVDEeVMKYnd5b3xJ C4gazPFUOdKFDTzaejojlzp+TujIy7ss9bILN+nROM4evZ6Ay/pDNaPJL5AvGPtOWoEWKsxJ9lK SE3xUNKSUi64cWNA/8V9Q1v1XBavwp52jlszSzqUhgIjeHMbP57O9O9GQh+mQBq9ClyzIA0+FGx jeOQrtZxr5fPVmqsoADnWzBTNRMut9NOVRrQHOcWo96KuHGYZqxOqwjV1eGjufXk5WWWopAMenz 2OeVjexOpXN0ExSMC2ASEO6Xev+80oUSu5rQg1FcWfNq4EMvEa1h1NG7bXPuZCNswe/pZC2HN84 FR6JL9JtXucHDLQSCurlqb X-Google-Smtp-Source: AGHT+IGGTDdxCfCm0gM0xxGcrXYIAxTama8dQFiA46eg6cBGPBkKoqG9sjgcfOrOmOKxOesrQvK/gA== X-Received: by 2002:a05:600c:4743:b0:477:afc5:fb02 with SMTP id 5b1f17b1804b1-47939e246e0mr79324475e9.21.1765203805314; Mon, 08 Dec 2025 06:23:25 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:24 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:09 +0000 Subject: [PATCH v2 06/12] perf parse-events: Always track user config changes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-6-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Requiring the 'pmu->perf_event_attr_init_default' callback to be set to track user changes is a bit of a trap to fall in. It's hard to see that this is required when depending on the user change tracking. It's possible to want all 0 defaults so not set it, but at the same time still do some programmatic setting of configs with evsel__set_config_if_unset(). Also if a PMU reverts to 0 defaults and deletes its existing callback, it will silently break existing uses of evsel__set_config_if_unset(). One way to fix this would be to assert in evsel__set_config_if_unset() if the changes weren't tracked, but that would be a possibly untested runtime failure. Instead, always track it as it's harmless and simplifies testing too. Signed-off-by: James Clark --- tools/perf/util/parse-events.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 7a3a90377896..c58829004fb4 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1528,12 +1528,8 @@ static int parse_events_add_pmu(struct parse_events_= state *parse_state, return -ENOMEM; } =20 - /* - * When using default config, record which bits of attr->config were - * changed by the user. - */ - if (pmu->perf_event_attr_init_default && - get_config_chgs(pmu, &parsed_terms, &config_terms)) { + /* Record which bits of attr->config were changed by the user. */ + if (get_config_chgs(pmu, &parsed_terms, &config_terms)) { parse_events_terms__exit(&parsed_terms); return -ENOMEM; } --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 677C631A051 for ; Mon, 8 Dec 2025 14:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; cv=none; b=cJV0eJp4iG+bsbOfHMRFbxk8w/Ew+pNFA1UMJOq5PjvTZD05NowTub5MUiXGXeCkKUPFflDAZX4IUX3Z3rbN5RvVi7zI7b3N4pOLPLTIjWR5IyCKWI9E7Xv5Q5PDwMI2sPd4+BFrXB09yhs91A+p91vTPT3XbT35fRxDayinc8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; c=relaxed/simple; bh=AbvdrNMw88FZN4IE7Nf9KGk3nUuhKsauA7lRPU7zeEw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eHKe7/GNKqWv2wIpp05KV+zH/XjBIxNT9VJimYiNByS+twtIfJ7YKTU9wG0Sr/NAgtYy4TaWeDrtGsFFO+YF2LXwEVQO9sKDA3+V0TmwmJ3WYWDxZJsbg97GEOF/6XACVDawgFXts5gVUuxx8iUZkfdU/4qyacoHzCJqoP0Fek0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=lqTsn5Ed; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="lqTsn5Ed" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-47790b080e4so27370405e9.3 for ; Mon, 08 Dec 2025 06:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203807; x=1765808607; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5kd2R0ME/G1mScEH97Zt/42ug6RvhAVhA6QI6GEroJM=; b=lqTsn5EdJ2nAkG04p5K9UJSV6+AYGnc1nXJosP0q52k+f2zATDkcsOk1VDn7WMOf6z F7M5Be5UxiWyyzqFL27hacusEfMAvN2ueKwZ88Ddo2BAUzJVmTGaeJHY4RbW9EDwXq6N saU+xldUkRLsJoN2BgX102djU+reVItA8cKjw5DeuglNWs/xywiTZYuBXlGOv13kifP9 fsy0tsXDmp0EG/ACYtk5pqioqXhizp502HKLpP9RrXd8uTHAmjnk0i5Zh+eYZ53pxeE6 d6Hb+2gEfcL/V3SU6pRlMWld3FSqFhxWxZPcdsbvJtLjbK65wNGh9rBS8/jQoucPZd9i kjmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203807; x=1765808607; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5kd2R0ME/G1mScEH97Zt/42ug6RvhAVhA6QI6GEroJM=; b=cZYoVPQzU7JZ50olxuZcrY9WtC4OxOTjl/zZ2lkGEsxFLo0pNQCCG1VD5UPdmcAe/x O7BrvFV0RkIE7W9NQFJky1zbRqFNpO6cGeIxb35wEKE/xWQyDJRbt8gnRhdX4uAbbyrI 3HI4uis7RD0wX1d84QUwy/xxA3M6DZPThc0MZDetcYwtacOaBLFpvzs6FKkYdqpCJBa0 xVsyIf9IhpNG9fSy47VeZAlhNsq1FP4EWyFURh1MEPrX70MeVG5fnQ8cOpcXmys4HKuo n0Rx6Z3ADZyJMOdUonunsD2Z8qYxUAJ5I08fR6Ci+3fqO4aUakKwiOC/Wr48oW4H8PQl xFuA== X-Forwarded-Encrypted: i=1; AJvYcCWSyvALA/ry3fGFOB5o289hm4kbknqsOgNs+7Xm+aFJGU+7pmNS+CxBcyNAELiTleUs3pl4PnhL1y1qa+4=@vger.kernel.org X-Gm-Message-State: AOJu0YzAUAXVHJqKEh0fJxo/lmhHiMna6SFYQSsKrItP3MuKmU16hvhd 3vS4KsiCM0nrAkjcL0oH0cLyTm/jdZQ45G+W7IZvgDY3himZBQpRbRu/nhjrlxI4P/A= X-Gm-Gg: ASbGncuQv1Ary1w1jPOPFdCzXntGsrzAFsH60hJmLHOGmQZjXKAxkT3ZSryxs5MlAFd 3t6iqn9UKNauVd6waNdO0mZq/0fqnM6NVmiqbMJ/8YOkyg207F7232cnQikTBZOhFFBJmlprxHG oJbqTp6bWXwdHZW7eFZ49igwOJ/Psz0xDoXSBjIwHyaZ3NV9E5bXJ3u95HGCaDOCX+iVO9PNM4L A+FCl+yqeXxKZPkKOBL0qingpfnwZs0xS+Coc9Zk26TRHChn+BDbq61dT5tXm8FH03Gf94i2MKK R8V7RYN//T5XDvwi4QHZd2QeJI/hdGANBsRvLXtKAX2dSes8SZtOdg8rqi4sG08gv2s7wtUwmOC dPKOHX+Swmochp8s2v0SyTPDGuJrxB2UMu5mz4vX+gOWn8mvreS76vEDAYvJ0umesx5vQFO73zs xgfdCmRL1dis1mH84i5Y8a X-Google-Smtp-Source: AGHT+IEhbbXGKkuGD/fbdNeyATAFNtzV6xXJwj6vpDm344XgOyf9yieISnwZUUrfZfDQkKbisoBK8g== X-Received: by 2002:a05:600c:6748:b0:471:9da:5232 with SMTP id 5b1f17b1804b1-47939dfdc35mr82272095e9.15.1765203806602; Mon, 08 Dec 2025 06:23:26 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:26 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:10 +0000 Subject: [PATCH v2 07/12] perf tests: Test evsel__set_config_if_unset() and config change tracking Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-7-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Test that evsel__set_config_if_unset() behaves as expected. This also tests the user config change tracking mechanism as it depends on it. Signed-off-by: James Clark --- 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 cbded2c6faa4..f938135e62aa 100644 --- a/tools/perf/tests/pmu.c +++ b/tools/perf/tests/pmu.c @@ -192,9 +192,98 @@ static int test__pmu_format(struct test_suite *test __= maybe_unused, int subtest } if (attr.config2 !=3D 0x0400000020041d07) { pr_err("Unexpected config2 value %llx\n", attr.config2); + } + + ret =3D TEST_OK; +err_out: + parse_events_terms__exit(&terms); + test_pmu_put(dir, pmu); + return ret; +} + +static int test__pmu_usr_chgs(struct test_suite *test __maybe_unused, int = subtest __maybe_unused) +{ + const char *event =3D "perf-pmu-test/config=3D15,config1=3D4,krava02=3D17= 0," + "krava03=3D1,krava11=3D27,krava12=3D1/"; + struct parse_events_terms terms; + struct parse_events_error err; + LIST_HEAD(config_terms); + struct evlist *evlist; + struct perf_pmu *pmu; + struct evsel *evsel; + int ret =3D TEST_FAIL; + char dir[PATH_MAX]; + u64 val; + + pmu =3D test_pmu_get(dir, sizeof(dir)); + if (!pmu) + return TEST_FAIL; + + evlist =3D evlist__new(); + if (evlist =3D=3D NULL) { + pr_err("Failed allocation"); goto err_out; } =20 + parse_events_terms__init(&terms); + ret =3D parse_events(evlist, event, &err); + if (ret) { + pr_debug("failed to parse event '%s', err %d\n", event, ret); + parse_events_error__print(&err, event); + if (parse_events_error__contains(&err, "can't access trace events")) + ret =3D TEST_SKIP; + goto err_out; + } + evsel =3D evlist__first(evlist); + + /* + * Set via config=3D15, krava01 bits 0-1 + * Set via config1=3D4, krava11 bit 1 + * Set values: krava02=3D170, krava03=3D1, krava11=3D27, krava12=3D1 + * + * Test that already set values aren't overwritten. + */ + evsel__set_config_if_unset(pmu, evsel, "krava01", 16); + evsel__get_config_val(pmu, evsel, "krava01", &val); + TEST_ASSERT_EQUAL("krava01 overwritten", (int) val, (15 & 0b11)); + + evsel__set_config_if_unset(pmu, evsel, "krava11", 45); + evsel__get_config_val(pmu, evsel, "krava11", &val); + TEST_ASSERT_EQUAL("krava11 overwritten", (int) val, (27 | (4 << 1))); + + evsel__set_config_if_unset(pmu, evsel, "krava02", 32); + evsel__get_config_val(pmu, evsel, "krava02", &val); + TEST_ASSERT_EQUAL("krava02 overwritten", (int) val, 170); + + evsel__set_config_if_unset(pmu, evsel, "krava03", 0); + evsel__get_config_val(pmu, evsel, "krava03", &val); + TEST_ASSERT_EQUAL("krava03 overwritten", (int) val, 1); + + /* + * krava13 doesn't have any bits set by either krava13=3D or config1=3D + * but setting _any_ raw value for config1 implies that krava13 + * shouldn't be overwritten. So it's value should remain as 0. + */ + evsel__set_config_if_unset(pmu, evsel, "krava13", 5); + evsel__get_config_val(pmu, evsel, "krava13", &val); + TEST_ASSERT_EQUAL("krava13 overwritten", (int) val, 0); + + /* + * Unset values: krava21, krava22, krava23 + * + * Test that unset values are overwritten. + */ + evsel__set_config_if_unset(pmu, evsel, "krava21", 13905); + evsel__get_config_val(pmu, evsel, "krava21", &val); + TEST_ASSERT_EQUAL("krava21 not overwritten", (int) val, 13905); + + evsel__set_config_if_unset(pmu, evsel, "krava22", 11); + evsel__get_config_val(pmu, evsel, "krava22", &val); + TEST_ASSERT_EQUAL("krava22 not overwritten", (int) val, 11); + + evsel__set_config_if_unset(pmu, evsel, "krava23", 0); + evsel__get_config_val(pmu, evsel, "krava23", &val); + TEST_ASSERT_EQUAL("krava23 not overwritten", (int) val, 0); ret =3D TEST_OK; err_out: parse_events_terms__exit(&terms); @@ -539,6 +628,7 @@ static struct test_case tests__pmu[] =3D { TEST_CASE("PMU name combining", name_len), TEST_CASE("PMU name comparison", name_cmp), TEST_CASE("PMU cmdline match", pmu_match), + TEST_CASE("PMU user config changes", pmu_usr_chgs), { .name =3D NULL, } }; =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 A748931AA82 for ; Mon, 8 Dec 2025 14:23:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; cv=none; b=nw7gRch6i6vODXpGHrUyxqSEygPR68QKu8W4biYwO/1vWOm7zufJVM0ra0oIIFHbnSzMydGs5O+FfZaXE/+KVK0ATSXLPZZIA9Z9z1DuNUlHceJW6Zp2iKzeuV+WnHEX9mMZrFvCGWX5YCkwRAjUhYTLIl/9l72z+XZvG3fOi9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203811; c=relaxed/simple; bh=+w1iFxCmBs3uSvHvYtkhGpYpTANK4myW7Uve2CygcO8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OOEJsAW32sfLWlUwOzDPlSoNoj/tK896eQz5MG65lmBBSO5JKHT79/R7woYmsTdgSJUV7fMbRaMSwMV5BG2WzK+Y8KnR7sbRloqlJ/xRQ9tNzKYhLkpWLaq4NfvBv70knhiDv6ITOF1yQQ67/WeI5e7Kj+Bx5pnGBKV23Ok2t3g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=o7HovBVB; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="o7HovBVB" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-477aa218f20so28891635e9.0 for ; Mon, 08 Dec 2025 06:23:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203808; x=1765808608; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9jd2yrStTOWGOmxByUtMp4BdKIyOeVJpeKEcTyld+gI=; b=o7HovBVBZF+Kh3WKuwv+R4/AbbCMof8d08VRto6kYcAAjV6qP4ym/Vsp+FddGX54GP axclrH2usPbzYpVx8n03tWTEbjXUs4io3bcvE69m0ogZJaECbLpv/BYICNvzMyxSRhAY Em1vYTT7z++1NsZMV7uDKZnKRxLYXTTE45pBNhvC1mt46Bijqq1uOwbMRINf/dCleXr6 0MLx+CK3MFHDZplHomBohlk6nWw/ZQnsps5ufxV0m/MQu/pWusjKaMwzOBVDTSW0rbOl rsm6eR3OWHABB2JXkWM/lMqg2OaG5cXQlNtBUhDiJalhswOzAJL2MSDIf7FzBLcs12XL cmhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203808; x=1765808608; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9jd2yrStTOWGOmxByUtMp4BdKIyOeVJpeKEcTyld+gI=; b=HHRxvqD5t7fP+bpwV0XF5pd6ZAI0gFyn9Fdr8T+1y1KGuBW+YViqTEsrtAqLzsWIMm UPmxEPQhPii65SdBkT13wNAT2iUZZxRduoSSgTZ+6hXbWrdCcWZ87qWt3A+hJQ7LKp7G reFgQOH9DWcQKrgdus/guU4iZ9nWFzxbICrxWsuksYabnroOHUAlfEPlTa4n0byx83iO fnCIQd3v7j/e5rI3nkE58KBTLxavSdL4mqERr+ngbB8TbezWFrNVHArH2VakZHVf5bU3 Nf/uJZrwavOIPvUQgOUqWUZ9rpfualuyapxGldFEVNf6NxIhynRd3hvlG28Am2UUCoMZ GIhg== X-Forwarded-Encrypted: i=1; AJvYcCVfOs4M5NlkDva7yFSwrQLXTrRfl4/mgyHTKMfp6EnVWBjTSGb+9SW/9YfnJwKPSzGfo5qrYKEisEEqQnw=@vger.kernel.org X-Gm-Message-State: AOJu0YzyRyKLhyPTEHdVzDOOpePQEYeCuopSl/3W1dhqHwzj/u8Z8rG/ Z15m8ZzahWtROas32JbIyVtVw9gcZO7ILZ3r2OmdQg9yTsDRDRzivOIUTyLpesW45RE= X-Gm-Gg: ASbGncvgr2ArcTVirXeYfYEua/IWiIHscmTtEsQk0Q8fKu+ts1lstGCd1DDlrB3iDOj hCDTqUFcBmqPKEdJdXC/ME+UDQYMdUkeBTfjWlk9IGwlfvD1hevAzyE2USKgf2yZS368nKeq+ap HsubjPq3zp/fIYoUDngiBBJuQvXDRmwsAyd9PdgeD5gCuXZrEY1uiqka6xNUm6La6XDNwPJbFV3 TXlDCew91RsmzaHsk+SwHzSm7OCPTqjJ/w61yJw8p6lt4P7l60uoMM9rJOrzKnxjC+kX4vXbnKQ M0M1UGb54Aysbh3ml8lyUQszwSUny57i4ywx7Wh6ObQULg0HZxS/jwV2U8/31jqYXleVUtaxDRj mHW+rlH4pAkv/9uIfbDHdDtDhNOIoY158JSnlNq8pGpDv3Q0zE50RbmYSsIPYjovThZ6LLzba01 BCEP9mcE9crKo4xhsu99gp X-Google-Smtp-Source: AGHT+IFGmwb2kb7IVcMJGI+bmMQWoQ9Xck7BMYDULw0ILtMY20pG9v/l2Oz2SqT1V002Z0ra/fhTlw== X-Received: by 2002:a05:600c:4ecb:b0:475:de12:d3b5 with SMTP id 5b1f17b1804b1-47939e4ff58mr81937945e9.34.1765203807943; Mon, 08 Dec 2025 06:23:27 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:27 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:11 +0000 Subject: [PATCH v2 08/12] perf cs-etm: Make a helper to find the Coresight evsel Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-8-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 This pattern occurs a few times and we'll add another one later, so add a helper function for it. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 50 +++++++++++++++++++++--------------= ---- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index ea891d12f8f4..22c6272e8c36 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -302,6 +302,19 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, return 0; } =20 +static struct evsel *cs_etm_get_evsel(struct evlist *evlist, + struct perf_pmu *cs_etm_pmu) +{ + struct evsel *evsel; + + evlist__for_each_entry(evlist, evsel) { + if (evsel->core.attr.type =3D=3D cs_etm_pmu->type) + return evsel; + } + + return NULL; +} + static int cs_etm_recording_options(struct auxtrace_record *itr, struct evlist *evlist, struct record_opts *opts) @@ -476,29 +489,21 @@ static int cs_etm_recording_options(struct auxtrace_r= ecord *itr, =20 static u64 cs_etm_get_config(struct auxtrace_record *itr) { - u64 config =3D 0; struct cs_etm_recording *ptr =3D container_of(itr, struct cs_etm_recording, itr); struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; struct evlist *evlist =3D ptr->evlist; - struct evsel *evsel; + struct evsel *evsel =3D cs_etm_get_evsel(evlist, cs_etm_pmu); =20 - evlist__for_each_entry(evlist, evsel) { - if (evsel->core.attr.type =3D=3D cs_etm_pmu->type) { - /* - * Variable perf_event_attr::config is assigned to - * ETMv3/PTM. The bit fields have been made to match - * the ETMv3.5 ETRMCR register specification. See the - * PMU_FORMAT_ATTR() declarations in - * drivers/hwtracing/coresight/coresight-perf.c for - * details. - */ - config =3D evsel->core.attr.config; - break; - } - } - - return config; + /* + * Variable perf_event_attr::config is assigned to + * ETMv3/PTM. The bit fields have been made to match + * the ETMv3.5 ETRMCR register specification. See the + * PMU_FORMAT_ATTR() declarations in + * drivers/hwtracing/coresight/coresight-perf.c for + * details. + */ + return evsel ? evsel->core.attr.config : 0; } =20 #ifndef BIT @@ -832,12 +837,11 @@ static int cs_etm_snapshot_start(struct auxtrace_reco= rd *itr) { struct cs_etm_recording *ptr =3D container_of(itr, struct cs_etm_recording, itr); - struct evsel *evsel; + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, ptr->cs_etm_pmu); + + if (evsel) + return evsel__disable(evsel); =20 - evlist__for_each_entry(ptr->evlist, evsel) { - if (evsel->core.attr.type =3D=3D ptr->cs_etm_pmu->type) - return evsel__disable(evsel); - } return -EINVAL; } =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 E5EA531AA9D for ; Mon, 8 Dec 2025 14:23:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203813; cv=none; b=GAGnw+RijuzpnuC+NvKAX5PACP2V/+dNEhuy6jInt0MxVK8aDYwT3xOmuSccEswx0Lzr+X47dkJdqqY8NQGHMLKtN2DCDUXB87gTWAEiViNqPoa5kic/0U6lStaQu/qXOzPgIUhEV6L3fEKKs4CXLe00u/O3ZMdTVuiwGWctMp0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203813; c=relaxed/simple; bh=OgKG9PkDZvm8ejTmX9Po9XOIWBwQKKAXku7R7Bstl64=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=llGd3txD3Gin79m003VERrgKunFDUkzLbr4DkSHEQw3V81KHaoOVdxn2r6plvQRG2LNoKoqxe+AObb4fodjzKNryGEF1z/dyybQDSSJMcMv1Pw345tiU0YvmrwFXamoGg2e2fDwJZi3r3mnsolq0KhQIpzqSWvu8ex9XEOZanqc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=OOxB094A; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="OOxB094A" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-477563e28a3so32442905e9.1 for ; Mon, 08 Dec 2025 06:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203809; x=1765808609; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oOIYYaELVWTJuyOlfjACt8LftXuc+RvaZVZxn3iQ/Mc=; b=OOxB094AMe3P0hJAwIj9og5KXFRZT4Ga8FZhef2jAy0yNbMCjkw/MklPcEOHoUMnMI SIaz+GCwge/VnFi51xYwlqtTu344uWr+jKJXiaO8EQngZOdKbKB4/DQd9EE5OFkTwdjv YRyKMeKvWHwA6Lsf6BUzy2UDc1JtN9UbhDyLCcaOErEsPNj7cMevuZvchGpNUAE0lEHa 1uRntox2wX9re3bBwXdGdO9hiItMFqM816vn+v5j04PgHl/11vVIpMC2zLC/L9l7WQe1 BtarqvJdIJ9j9Ghon8D8V6RbAocsMTlwyeEXJuNXPuGkxEFfgsJdxzKiKOJR0u8n+o39 CoDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203809; x=1765808609; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=oOIYYaELVWTJuyOlfjACt8LftXuc+RvaZVZxn3iQ/Mc=; b=DWK8M9WA5hxApSJU68SzSjGRTPmYUQo51ilvCOuR9NaaBCP8QOBoqKJxnwOBl2eHHo 2BcYqya/ZXLbIw5aSOOgVY/J05v+zd0w0TTriQliycbJvqhOp7EFUZdUR6U38PbBk8Yf fSSbSQPlkYRk5v4RQFeb90mFZX+yqntfudrFtv2ojm/KnIHfVsFzOXOz3KXtpFakeZ5t eD1Fpi3QqLJtvWYQ44LDF3myYzCHw/aFYCJ/rShunelZnB2iyooBAVnw4KA4HihLnVJv qpVeQ/rVzjF6Q1NFem+qmfLU4ujJbGtzdTY/4n5y8RY1t5BXMS3r4FKVgxAfOQJ9a+GP 4Tag== X-Forwarded-Encrypted: i=1; AJvYcCU+GKe78RoqKNF8eGHp+pbHcD1b7sQ9KSj9i9IztsbTUZw2H2Z+xIbPmqMWMtmNWBKeDPY92XRU834imUg=@vger.kernel.org X-Gm-Message-State: AOJu0Yxp9VFeCNWKPH1dK1M8IHeVLKrovsUxstAbJaWNpnem8oPrCOxc YaaadzjFPlOCFlV92C/FQZOC22FEza7NOcKtnmpxh3vmOJtC22EO+187uxCozw0auMg= X-Gm-Gg: ASbGncshzwXo4ZbFGChhPpoBkBZ6wzCyS9WwjdAwXEkCaHf5ovyxTwoJlXIlCmuW5Gt J5lgMhY7FJKBA2k+8JJIBtIKeDVVGCuEhkbn3CnPUUEUQgcxvc8c2hyKsvug8m1aparaxkmV6jx qD1WD2WJv3iGCfTOrzqGYhZCZPLnjAnkSDfeFj2ZEGxIZzq30tNPP06gsk11AAPAS1Ul2vwW6tt bVs2a4QTLP5Ivwu3ZRwhqe3VYg8bKQLgptCNNmuj9jReOu73yD2w56lT4tdkTvItnAfTxhawDjM EzyMghyAyfAlXE7hKznV7WF5FeOdymvKIajsY9bxlCSsIFHO5lhBh2/fhxiPoegGQebh41D8Y+8 tUrePJWa5bU9+5FywlBHr1KjGrczcWHiFdFP2Wtxo2WVX4OY/AIXoL9erNKG5NCqurEcmd6OtzU fi/tk/hBoMmKbDWhdtlgr1 X-Google-Smtp-Source: AGHT+IEiiKIAKZltC2nX6+7tYL9Tdb7Gn5KWFk1rr5OgzmQFNmbmqB60aAPM6H1XwO1G4r9HgabKPQ== X-Received: by 2002:a05:600c:a11b:b0:477:a71c:d200 with SMTP id 5b1f17b1804b1-4792eb5e5b9mr134591805e9.11.1765203809123; Mon, 08 Dec 2025 06:23:29 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:28 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:12 +0000 Subject: [PATCH v2 09/12] perf cs-etm: Don't use hard coded config bits when setting up ETMCR Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-9-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Perf only looks at attr.config when determining what was programmed into ETMCR. These bits could theoretically be in any of the config fields. Add a generic helper to find the value of any named format field in any config field and then use it to get the attributes relevant to ETMCR. The kernel will also stop publishing the ETMCR register bits in a header [1] so preempt that by defining them here. Move field_prep() to util.h so we can define it along side field_get(). Unfortunately FIELD_PREP() and FIELD_GET() from the kernel can't be used as they require the mask to be a compile time constant. [1]: https://lore.kernel.org/linux-arm-kernel/20251128-james-cs-syncfreq-v8= -10-4d319764cc58@linaro.org/ Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index 22c6272e8c36..a5135b743e6f 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -68,6 +68,12 @@ static const char * const metadata_ete_ro[] =3D { =20 enum cs_etm_version { CS_NOT_PRESENT, CS_ETMV3, CS_ETMV4, CS_ETE }; =20 + +/* ETMv3 ETMCR register bits */ +#define ETMCR_CYC_ACC BIT(12) +#define ETMCR_TIMESTAMP_EN BIT(28) +#define ETMCR_RETURN_STACK BIT(29) + static bool cs_etm_is_ete(struct perf_pmu *cs_etm_pmu, struct perf_cpu cpu= ); static int cs_etm_get_ro(struct perf_pmu *pmu, struct perf_cpu cpu, const = char *path, __u64 *val); static bool cs_etm_pmu_path_exists(struct perf_pmu *pmu, struct perf_cpu c= pu, const char *path); @@ -487,6 +493,33 @@ static int cs_etm_recording_options(struct auxtrace_re= cord *itr, return err; } =20 +static u64 cs_etm_synth_etmcr(struct auxtrace_record *itr) +{ + struct cs_etm_recording *ptr =3D + container_of(itr, struct cs_etm_recording, itr); + struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, cs_etm_pmu); + u64 etmcr =3D 0; + u64 val; + + if (!evsel) + return 0; + + /* + * Synthesize what the kernel programmed into ETMCR based on + * what options the event was opened with. This doesn't have to be + * complete or 100% accurate, not all bits used by OpenCSD anyway. + */ + if (!evsel__get_config_val(cs_etm_pmu, evsel, "cycacc", &val) && val) + etmcr |=3D ETMCR_CYC_ACC; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val) && val) + etmcr |=3D ETMCR_TIMESTAMP_EN; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "retstack", &val) && val) + etmcr |=3D ETMCR_RETURN_STACK; + + return etmcr; +} + static u64 cs_etm_get_config(struct auxtrace_record *itr) { struct cs_etm_recording *ptr =3D @@ -746,7 +779,7 @@ static void cs_etm_get_metadata(struct perf_cpu cpu, u3= 2 *offset, case CS_ETMV3: magic =3D __perf_cs_etmv3_magic; /* Get configuration register */ - info->priv[*offset + CS_ETM_ETMCR] =3D cs_etm_get_config(itr); + info->priv[*offset + CS_ETM_ETMCR] =3D cs_etm_synth_etmcr(itr); /* traceID set to legacy value in case new perf running on old system */ info->priv[*offset + CS_ETM_ETMTRACEIDR] =3D cs_etm_get_legacy_trace_id(= cpu); /* Get read-only information from sysFS */ --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 D68CF31B822 for ; Mon, 8 Dec 2025 14:23:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203815; cv=none; b=FmK4TsWDsrU2H7gqyIfBsH+IOZWo7E8v32gjsrExZweS/4rChnCScHYbGl1Ak0mDTRMGAvf0X25P8ByC+duty8DGBBJ80CLVWh9WolZS5xKVVvEyapaUZJLy+FibOqs+9opwJX61W35TFeX3Jq39OTeZGc0KDYrQlZDIivPJNPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203815; c=relaxed/simple; bh=YbyRkpwdLOqRyIj5AYCI+eJu5FRAqfw/ugAvNg9Iz3M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kkQkM0x5HyPItqh3Ugt1KRtuNdb2Hj5S7YLfusyvAh4jcuaNLzzS6eA6AHBISb/far1T5vlu3p64dLaFV/147y6Rh7QIzIMMeSCE5gCCGBQf1wzzEl+A8Sp3Ff7JcRiS1AH2TpGgNPASU78Cq5Hu/HK7i/ypgtdXq+R84dCxtb8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=BPRH5P3F; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="BPRH5P3F" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-477b91680f8so50579585e9.0 for ; Mon, 08 Dec 2025 06:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203812; x=1765808612; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=h3MJH/lNPT8DNNCsCKfxfekwOJGt2219jutaHJgnIdQ=; b=BPRH5P3FwsRlsXjwIYzb7vlAjYdaXEVAhUrBWkhAKV8RttjHoA0W5EJUkHEFryAxSp wmDwN9nug5MR7k8s9eeqFCVVYwN3ZhGkMnSu1PLD2oy5SkgbLJzJcsbS/f4nVOLzaveS N8B1SSoqSGzEBrgWlfDTS0lYPrR2Pxbp+H1QW7a6mVT94RHt155l0x/zEjgPqxAzElIb HqQ/Y0ISurufBXnelMYBgZDQdmlq7GE2y1KDKzjwvdVrppWCidK6S/5d4ggVjkgNfR0T heBH6tTSM3NqHN9ZsurNf8OiKri9wyzpVAuagfz4dYQvJLjWA9YyqjP2RwnNDdfMG7/B 6x1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203812; x=1765808612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=h3MJH/lNPT8DNNCsCKfxfekwOJGt2219jutaHJgnIdQ=; b=MjCUG7YInbIr7D+FxW/jCHCbngHd7fpoKspazRUAARjNwZJCS+swJBLEc4+TNIAEBK secTB2wSJX+PFgQ12YYZ+w91gC0NEJ6h9h32SsuPxsad0hNl2VIMdDxqWug8Rof7QgdF D+0aqTFU4q/FkWKDIPqspFGJ0kzLK/qR7h06/B6nRXHl6ColPN7MNe5PxnupZDe/AI5C daU6jUfVLXQH3WDbD31LcU+OVDIZvigyLafzFpM7ACoIlZbJrcXpcWNDwUSwV9PEwUGH KKNLuI9zxN2jp3fL9lGxIbTeG+gGA7p8b/MUpKH17xhDlhxP1qTuopDmntN2sgpMhNIB rANw== X-Forwarded-Encrypted: i=1; AJvYcCUr4GTL5tOyjZHFW02dxw1svyUHiOITpTtR7dJlX7c/3LuvsMIvHrpW6k9y1eKudae7iZe25PcItJd+1DE=@vger.kernel.org X-Gm-Message-State: AOJu0YxIZTU/VQr/dKlann6sOJtm9weSpaEkjH0wDZjXXHvjLgvhQNGq gtI8s5MFZjrjRZkC8vr6Z6FVWQAECYJ/AuUq2dtn/BkA7v9C/yRni2ve4R+SpvXzb0I= X-Gm-Gg: ASbGncuMmB2ZmCW7TIcQWwkQ4lzQYJSQ4YIsaSlYNW1/D1e1eyfnv5WhQJc7BUydrip f7mMoVG4vPN4NZldQsCwu1O5lA+a2zpap0nqNVl8pYkUK0j8vNTs8LDoVMN4ufG9Rm+DdvplmAV oN828DQOIR0bW7FAkn5KLC7R9wD8clls/3yTnWAZeVlDgoel6fZ58d6m7YBm8mZk1Gwzn34t1RG tIZmRxsXD1/eIvKwx3QKOQO4LTpa8hnLoldp7xeO0u5ZtFGcUYoufZMnrPkQG58TXf2MBV57nKS 79JwhO44LxuVrAoVTTCZegK6FsLV2w5qRB9ZugW9SIfGdpNbEu/dzur0NqbM7KAJr36pBUuizQA aBPQDGWr/8tz0CQlt3QL+3qB6c/DwIb3IXt5qCiMBjqLpYw+odX/9Z/KLvgXDpoTMvIkaCdPtoN 396NHXZxszjnYpb4vSmM84 X-Google-Smtp-Source: AGHT+IFyQ2glgXqpcjiC8KcvlMBIRf60rQxQ/nkTZCnm7ai0E3dGboO5ydFiCpMyFkFY0AjK7zhV/Q== X-Received: by 2002:a05:600c:4ed3:b0:45d:f83b:96aa with SMTP id 5b1f17b1804b1-47939df12f6mr84356285e9.7.1765203812098; Mon, 08 Dec 2025 06:23:32 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:30 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:13 +0000 Subject: [PATCH v2 10/12] perf cs-etm: Don't use hard coded config bits when setting up TRCCONFIGR Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-10-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Perf only looks at attr.config when determining what was programmed into TRCCONFIGR. These bits could theoretically be in any of the config fields. Use the evsel__get_config_val() helper so it's agnostic to which config field they are in. The kernel will also stop publishing the TRCCONFIGR register bits in a header [1] so preempt that by defining them here. [1]: https://lore.kernel.org/linux-arm-kernel/20251128-james-cs-syncfreq-v8= -10-4d319764cc58@linaro.org/ Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 79 +++++++++++++++++------------------= ---- 1 file changed, 34 insertions(+), 45 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index a5135b743e6f..4a606b1e90f2 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -68,6 +68,14 @@ static const char * const metadata_ete_ro[] =3D { =20 enum cs_etm_version { CS_NOT_PRESENT, CS_ETMV3, CS_ETMV4, CS_ETE }; =20 +/* ETMv4 CONFIGR register bits */ +#define TRCCONFIGR_BB BIT(3) +#define TRCCONFIGR_CCI BIT(4) +#define TRCCONFIGR_CID BIT(6) +#define TRCCONFIGR_VMID BIT(7) +#define TRCCONFIGR_TS BIT(11) +#define TRCCONFIGR_RS BIT(12) +#define TRCCONFIGR_VMIDOPT BIT(15) =20 /* ETMv3 ETMCR register bits */ #define ETMCR_CYC_ACC BIT(12) @@ -520,56 +528,37 @@ static u64 cs_etm_synth_etmcr(struct auxtrace_record = *itr) return etmcr; } =20 -static u64 cs_etm_get_config(struct auxtrace_record *itr) +static u64 cs_etmv4_synth_trcconfigr(struct auxtrace_record *itr) { + u64 trcconfigr =3D 0; struct cs_etm_recording *ptr =3D - container_of(itr, struct cs_etm_recording, itr); + container_of(itr, struct cs_etm_recording, itr); struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; - struct evlist *evlist =3D ptr->evlist; - struct evsel *evsel =3D cs_etm_get_evsel(evlist, cs_etm_pmu); - - /* - * Variable perf_event_attr::config is assigned to - * ETMv3/PTM. The bit fields have been made to match - * the ETMv3.5 ETRMCR register specification. See the - * PMU_FORMAT_ATTR() declarations in - * drivers/hwtracing/coresight/coresight-perf.c for - * details. - */ - return evsel ? evsel->core.attr.config : 0; -} - -#ifndef BIT -#define BIT(N) (1UL << (N)) -#endif + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, cs_etm_pmu); + u64 val; =20 -static u64 cs_etmv4_get_config(struct auxtrace_record *itr) -{ - u64 config =3D 0; - u64 config_opts =3D 0; + if (!evsel) + return 0; =20 /* - * The perf event variable config bits represent both - * the command line options and register programming - * bits in ETMv3/PTM. For ETMv4 we must remap options - * to real bits + * Synthesize what the kernel programmed into TRCCONFIGR based on + * what options the event was opened with. This doesn't have to be + * complete or 100% accurate, not all bits used by OpenCSD anyway. */ - config_opts =3D cs_etm_get_config(itr); - if (config_opts & BIT(ETM_OPT_CYCACC)) - config |=3D BIT(ETM4_CFG_BIT_CYCACC); - if (config_opts & BIT(ETM_OPT_CTXTID)) - config |=3D BIT(ETM4_CFG_BIT_CTXTID); - if (config_opts & BIT(ETM_OPT_TS)) - config |=3D BIT(ETM4_CFG_BIT_TS); - if (config_opts & BIT(ETM_OPT_RETSTK)) - config |=3D BIT(ETM4_CFG_BIT_RETSTK); - if (config_opts & BIT(ETM_OPT_CTXTID2)) - config |=3D BIT(ETM4_CFG_BIT_VMID) | - BIT(ETM4_CFG_BIT_VMID_OPT); - if (config_opts & BIT(ETM_OPT_BRANCH_BROADCAST)) - config |=3D BIT(ETM4_CFG_BIT_BB); - - return config; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "cycacc", &val) && val) + trcconfigr |=3D TRCCONFIGR_CCI; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "contextid1", &val) && val) + trcconfigr |=3D TRCCONFIGR_CID; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val) && val) + trcconfigr |=3D TRCCONFIGR_TS; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "retstack", &val) && val) + trcconfigr |=3D TRCCONFIGR_RS; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "contextid2", &val) && val) + trcconfigr |=3D TRCCONFIGR_VMID | TRCCONFIGR_VMIDOPT; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "branch_broadcast", &val) &= & val) + trcconfigr |=3D TRCCONFIGR_BB; + + return trcconfigr; } =20 static size_t @@ -691,7 +680,7 @@ static void cs_etm_save_etmv4_header(__u64 data[], stru= ct auxtrace_record *itr, struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; =20 /* Get trace configuration register */ - data[CS_ETMV4_TRCCONFIGR] =3D cs_etmv4_get_config(itr); + data[CS_ETMV4_TRCCONFIGR] =3D cs_etmv4_synth_trcconfigr(itr); /* traceID set to legacy version, in case new perf running on older syste= m */ data[CS_ETMV4_TRCTRACEIDR] =3D cs_etm_get_legacy_trace_id(cpu); =20 @@ -723,7 +712,7 @@ static void cs_etm_save_ete_header(__u64 data[], struct= auxtrace_record *itr, st struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; =20 /* Get trace configuration register */ - data[CS_ETE_TRCCONFIGR] =3D cs_etmv4_get_config(itr); + data[CS_ETE_TRCCONFIGR] =3D cs_etmv4_synth_trcconfigr(itr); /* traceID set to legacy version, in case new perf running on older syste= m */ data[CS_ETE_TRCTRACEIDR] =3D cs_etm_get_legacy_trace_id(cpu); =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 F41E831D72B for ; Mon, 8 Dec 2025 14:23:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203817; cv=none; b=Uqr2q6ewy3PY0QSh0L3GiySeCHGv4lfjvWbmbTbJk5GyciTbG1J2RmXpBdj6sf0Cr5QEgSCrGUYd+5CgvDK5xvU9wVlWXAAaR/xJ2y/8N28dK4Yv67NTvfenkzdhPL/+UtJwJf3Y4uwMQiV5X/t/VNAgujEeih+AtwV7iQXFiXE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203817; c=relaxed/simple; bh=mEpxfkiT9R7sUWQ6ZKH/YPRS63jr9gZ8SH3kBajtofM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l7LYQ4uJBav9B7Kb3d0YTdEVTgw4HY/0DpoYfOuO91BacHIDBhqDHyFgk6iLRtSvstB+T+Q/dyhX832Me+Hh3Q4ceCSikq/RgbHoiRhAEJkslPVokbSkptGEpu4gnMtOI1uH1rj3ok7ejBGd12HWuQO0R32xyt17bIF9RyTma9E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=P7PEbsIK; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="P7PEbsIK" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-47774d3536dso42815035e9.0 for ; Mon, 08 Dec 2025 06:23:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203814; x=1765808614; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=SsInU0t5SsRXwndpS/OaiCaWG6xiu+JNwIsRwUuzGhw=; b=P7PEbsIK12d57cfc7lzfpf93KpwC0x+uuLYD9bBJrhsFjhZBMkRzLhClhgZ6DO2af5 mEqtLNoKnsiaVoCJqEYIhtsJrj6I5qZapD8Hmx/gCWjNIV71uInVZGbKCbCNh3UXXQyB 6wcvWKu4RknicTdZ4YsC4hXa6SyV4DB7tnNw7+yhcSAcYOrOrxotwpsCaon9JZfDfLLI 5O3ovpTo9kDYnXFPMwzUlbLGs2mddmP21RSqQRLt2IZ/nkd0TwmTcnTN1SLIweV1TOTQ 4l/rowx73FiH9m3aHOnTc6zytKvUXhNFUnYlm6e7hDTdX+KLv5MqYNYGu1OB/Ca4HKyM WZSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203814; x=1765808614; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=SsInU0t5SsRXwndpS/OaiCaWG6xiu+JNwIsRwUuzGhw=; b=MuMxU5jeNH6nEkmjHA03yfcIT1l26Lxod/gU0X5grvfNTkDARWjuewt0dENEG9J1/o bVyndD3oeO0MOvmXH3aHj/2iP7PSEik12IYDr/hmi5pBE7Zqwb5Qjv1sH3hwew46tl8h VojCekF6djgntw23NJj87df35PyiEtBV698qJfCMjhdqKIzQ5dlpHzLApYcOj+ZCFINE 4+Oys2vrdcHJOjLrCelYKZFB+6U8y2NCHhVGGXvPmOq4auNjqzKu3pGlJrksJKkxTuUK rquhJNDjLUu4rxPUmw0g7sC1Ju7gQ7ETgforWwkmWVW8dxO7IwmHd41HrNRj85Q5lz0U PuTg== X-Forwarded-Encrypted: i=1; AJvYcCVVhwWxVXpCyKW4qTwjBWMxuOD+/XEYDQs9wvFS47MGQn0StkoT2egNFIm5uR+MB/myKzMy31Z8xZPoLFQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyxvx2PbSOfBsi5lzQZ59qW5ecZ4KvZN3pHzCmzKAhOeek4Nh4O S9TxNCnqfNysVpPSsyk0VPw/VhXuQQkDF8Pd2bD305N6Mm4swQOC+R/hO/Y2R2Ng6vk= X-Gm-Gg: ASbGncvvs64zP/BiWcmLzzzoLPTPTgvPKq5Rv4iRUbcOCSMM2yqqY0zXWJiwgJD6Qwp CqeuK4pPV06PRAPe7iZ8CiU0O6ZKhS7Grh6Ofz/nvPf/izQY2UowDmDij/4jSJ0DnZiIdAOVoX3 MeTjDYvDFhmjpRqAz9K6xLqfdOe+t5Ms6APTwlT+ZY/DuzSsIaH6ttSuXFh02PhYHgsnTvwmAXH uTQhLMmqFFdIC4JlEAEFxcekTl/LshDyviGiFSeJB0opb4biGKgZ+jl6tRaZP5CUtaT2pyQvg5Y psVxZUPRQZ+GDyDhtDDgR0MkcqtWQkWIak6Svex1O/ZYKge1g9rv+ssqB0lUcWJdhOaH5DLPLpU lOSVSmX6vG0iac6xNH+8YcmkP6jGVV0EMae9/HOC0/fCCTzruoLjW7X2YSn2sbVIZwxz0IpPd2N 6ftt+uWvLt+3msYn46mgUP X-Google-Smtp-Source: AGHT+IFSZGwfFwJSYKaBVY3GQ2FBMVbPJczh0bZwQlbrmePS7rzEeSRqZHVvyMQWkuI4F0AEn+gDQg== X-Received: by 2002:a05:600c:8b6c:b0:477:9e0c:f59 with SMTP id 5b1f17b1804b1-47939df17f6mr81324235e9.2.1765203814305; Mon, 08 Dec 2025 06:23:34 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:33 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:14 +0000 Subject: [PATCH v2 11/12] perf cs-etm: Don't hard code config attribute when configuring the event Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-11-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 These instances of hard coded config attributes are used for configuring and validating the event options. Use the config attribute that's published by the driver by replacing the open coded operations with evsel__get_config_val() and evsel__set_config_if_unset(). Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 57 +++++++++++++++++++----------------= ---- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index 4a606b1e90f2..bfb573cb5878 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -103,13 +103,14 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel struct perf_cpu cpu) { int err; - __u64 val; - u64 contextid =3D evsel->core.attr.config & - (perf_pmu__format_bits(cs_etm_pmu, "contextid") | - perf_pmu__format_bits(cs_etm_pmu, "contextid1") | - perf_pmu__format_bits(cs_etm_pmu, "contextid2")); + u64 ctxt, ctxt1, ctxt2; + __u64 trcidr2; =20 - if (!contextid) + evsel__get_config_val(cs_etm_pmu, evsel, "contextid", &ctxt); + evsel__get_config_val(cs_etm_pmu, evsel, "contextid1", &ctxt1); + evsel__get_config_val(cs_etm_pmu, evsel, "contextid2", &ctxt2); + + if (!ctxt && !ctxt1 && !ctxt2) return 0; =20 /* Not supported in etmv3 */ @@ -120,12 +121,11 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel } =20 /* Get a handle on TRCIDR2 */ - err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR2= ], &val); + err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR2= ], &trcidr2); if (err) return err; =20 - if (contextid & - perf_pmu__format_bits(cs_etm_pmu, "contextid1")) { + if (ctxt1) { /* * TRCIDR2.CIDSIZE, bit [9-5], indicates whether contextID * tracing is supported: @@ -133,15 +133,14 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel * 0b00100 Maximum of 32-bit Context ID size. * All other values are reserved. */ - if (BMVAL(val, 5, 9) !=3D 0x4) { + if (BMVAL(trcidr2, 5, 9) !=3D 0x4) { pr_err("%s: CONTEXTIDR_EL1 isn't supported, disable with %s/contextid1= =3D0/\n", CORESIGHT_ETM_PMU_NAME, CORESIGHT_ETM_PMU_NAME); return -EINVAL; } } =20 - if (contextid & - perf_pmu__format_bits(cs_etm_pmu, "contextid2")) { + if (ctxt2) { /* * TRCIDR2.VMIDOPT[30:29] !=3D 0 and * TRCIDR2.VMIDSIZE[14:10] =3D=3D 0b00100 (32bit virtual contextid) @@ -149,7 +148,7 @@ static int cs_etm_validate_context_id(struct perf_pmu *= cs_etm_pmu, struct evsel * virtual context id is < 32bit. * Any value of VMIDSIZE >=3D 4 (i.e, > 32bit) is fine for us. */ - if (!BMVAL(val, 29, 30) || BMVAL(val, 10, 14) < 4) { + if (!BMVAL(trcidr2, 29, 30) || BMVAL(trcidr2, 10, 14) < 4) { pr_err("%s: CONTEXTIDR_EL2 isn't supported, disable with %s/contextid2= =3D0/\n", CORESIGHT_ETM_PMU_NAME, CORESIGHT_ETM_PMU_NAME); return -EINVAL; @@ -163,10 +162,11 @@ static int cs_etm_validate_timestamp(struct perf_pmu = *cs_etm_pmu, struct evsel * struct perf_cpu cpu) { int err; - __u64 val; + u64 val; + __u64 trcidr0; =20 - if (!(evsel->core.attr.config & - perf_pmu__format_bits(cs_etm_pmu, "timestamp"))) + evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val); + if (!val) return 0; =20 if (cs_etm_get_version(cs_etm_pmu, cpu) =3D=3D CS_ETMV3) { @@ -176,7 +176,7 @@ static int cs_etm_validate_timestamp(struct perf_pmu *c= s_etm_pmu, struct evsel * } =20 /* Get a handle on TRCIRD0 */ - err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR0= ], &val); + err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR0= ], &trcidr0); if (err) return err; =20 @@ -187,10 +187,9 @@ static int cs_etm_validate_timestamp(struct perf_pmu *= cs_etm_pmu, struct evsel * * 0b00110 Implementation supports a maximum timestamp of 48bits. * 0b01000 Implementation supports a maximum timestamp of 64bits. */ - val &=3D GENMASK(28, 24); - if (!val) { + trcidr0 &=3D GENMASK(28, 24); + if (!trcidr0) return -EINVAL; - } =20 return 0; } @@ -273,16 +272,20 @@ static int cs_etm_parse_snapshot_options(struct auxtr= ace_record *itr, return 0; } =20 +/* + * The sink name format "@sink_name" is used, lookup the sink by name to c= onvert + * to "sinkid=3Dsink_hash" format. + * + * If the user has already manually provided a hash then "sinkid" isn't + * overwritten. If neither are provided then the driver will pick the best= sink. + */ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, struct evsel *evsel) { char msg[BUFSIZ], path[PATH_MAX], *sink; struct evsel_config_term *term; - int ret =3D -EINVAL; u32 hash; - - if (evsel->core.attr.config2 & GENMASK(31, 0)) - return 0; + int ret; =20 list_for_each_entry(term, &evsel->config_terms, list) { if (term->type !=3D EVSEL__CONFIG_TERM_DRV_CFG) @@ -305,14 +308,10 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, return ret; } =20 - evsel->core.attr.config2 |=3D hash; + evsel__set_config_if_unset(pmu, evsel, "sinkid", hash); return 0; } =20 - /* - * No sink was provided on the command line - allow the CoreSight - * system to look for a default - */ return 0; } =20 --=20 2.34.1 From nobody Fri Dec 19 09:52:48 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 62F9631DDAB for ; Mon, 8 Dec 2025 14:23:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203820; cv=none; b=WoURj6810sgHMuCmXUek21qy2HXAmAA4o4DzQ3IWTKVqly01YORwVrhHgMHdxn7tXtTdsp7pkvAanoe8FyN24NgjUTXaa8eWJj6ajJutGD8IA+zyLPFH/oqD91oj11EvRpctlSmBxjH0ZrVW/X1hUvn1R7UpbQ2uVVDlQmdU4EA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765203820; c=relaxed/simple; bh=XDHLC1TToim0ot24UHTP8tg0u/f4uP/BR8HUnpB+CwQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e4JJn+ISnwdCVFxvPxQz07IOvbxDvJ9Coy/FAv5FY9ECnmaE57h6Lbn8TZ0uO0J55WUwxhsJP1ueIY+QqJKEHwBdzxhn7Mvjo9KamJOJZmhyjCBMY+4zxbF7a/QWADFsUtlSI4DEELZsW1/q+IXsagbkduU/FDavsClB/eZb3W4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=lbYQXFg9; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="lbYQXFg9" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-477770019e4so48367295e9.3 for ; Mon, 08 Dec 2025 06:23:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765203816; x=1765808616; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2GmRPB0jBQgoThlmGWejjg28u4BOouUoY2C6pZo+51c=; b=lbYQXFg9eeFeK293NLf382K4x75cpyZ99rqY8ezFLj1AXumcNkJH7taDHPHzs4gaWE ilyEOXUUJ30D4joMBLtf9Xx8O8rrvRFWMW71il+dc8+9mH0NEztqsewkZed6xnuHDm0L OMNG+bH/8tEXJkUhk683HrxsEakxT11m/nfw4/omDqUe1HD4TCUqEbxZhKJ1YCViYCB9 vCQgLvXk6dRtTV+MMvqLJrRQ+JSqeSPpvbnaZLvFClDpsNVC9KIYCBrCvm6iUMbNiOVi GFwbEDkP+R/Yku5fzwAhx0yiNcfpDBaoKrnj1adwytnq3VyOgj/SHJ5h1sYpeucU76Wz ZAFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765203816; x=1765808616; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2GmRPB0jBQgoThlmGWejjg28u4BOouUoY2C6pZo+51c=; b=KIq8JTqwjpeZGfFdFXWkuKoxOMOzfWzXiPJoJ/FM4UvcgtaH7ai65OXa3DDmDjEXGU pmKKw1EyOQTr86MmlL5OXKxKVmzMySoPe9pFyJWa5MCm9goEaIIss3ravY9Xvxh3jmco gR+qpWZzTvaSNMWYXYle6EwgbaPnwtro5K997WNObHtdEyiBD30D44LDZxp5Evvs0+s7 yu6MxrgX1Fx0JFLYt9WzgEQtWjH9QKPmo5wB02tG7RNToOP4DKvsAp3N9e5v9n0b0ru9 SRhM+YKQ3QwzKtNqJ9J608nJ/PeX5DMaaeNty/q1cMioHauu3yOBsLn1PFOE57zD2pPW uJCQ== X-Forwarded-Encrypted: i=1; AJvYcCWYE61ZbXeqj0SYxAUB+Sp6I5a4bIPqnjQXNXDuMetBJNjSNLEdYYcU/sndO4KMCsDPthiAYCCY9n9BeUE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3/NM1tIzQES/koUyc0oLXJDPNVQqC78i5lg5QLFrm/9xjqdr2 HQHaX9nr6mk5WlkGAq/jUWXtf86FBHkRno++gElRUh5mg74RZaZk5aBHQYri2sVEXZhD5T/qJOk oYVi/ X-Gm-Gg: ASbGncsiFRNS9toqdBubWrNjmLW806bJtBvPiOOfaBz7L2MJSn35DHpifrAuqTszHRY VMVtfY9qheQ2bQWHXkwa3liV3s5Sfwce0C0kGBYvKxO00JYcj4D7HpqMi6I1xSbgnqsLaUY4ooy aYAEvhGKTGc8AgY56xk9e+8RHjr4crCpcWwZujAGBLLtt/M2/PC45X/Lm9l1EDoDBx8/TEPV5rj EnLx2gnGT6a5mqOy+24Op7CU8VlCX7EfhdcywQCFnUJ+Xk90gZ7xu0DhtY09p07g/luiddx3uOq Dj9FRIbE4W4nnLWckuJ6Px3trJS2ajf8l1QSsrRmmHPUGCic4Acd+OKELIEq5/RBr7DZTDhzwrJ NGxKYSBtqxfh55wsC0EVjo09/rlMIq1zxwgEByayK+LZhcprURK8rsk0uOqX5zOMBMld7X69GkH 8XAHe8WwVdDT4Ig02mS3Au X-Google-Smtp-Source: AGHT+IFoZPHDAM2lHyoM1YfjpO1gRYPlnwmwM67jG630YI+YhFcyltm9tk5Ti0SdAOyhTdmrTISiWQ== X-Received: by 2002:a05:600c:1715:b0:479:3a87:2093 with SMTP id 5b1f17b1804b1-4793a8720eamr49221135e9.37.1765203815511; Mon, 08 Dec 2025 06:23:35 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47930920e0dsm248561065e9.2.2025.12.08.06.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 06:23:35 -0800 (PST) From: James Clark Date: Mon, 08 Dec 2025 14:22:15 +0000 Subject: [PATCH v2 12/12] perf arm-spe: Don't hard code config attribute Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251208-james-perf-config-bits-v2-12-4ac0281993b0@linaro.org> References: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> In-Reply-To: <20251208-james-perf-config-bits-v2-0-4ac0281993b0@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Suzuki K Poulose , Mike Leach , John Garry , Will Deacon , Leo Yan , leo.yan@arm.com Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, James Clark X-Mailer: b4 0.14.0 Use the config attribute that's published by the driver instead of hard coding "attr.config". Signed-off-by: James Clark --- tools/perf/arch/arm64/util/arm-spe.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/u= til/arm-spe.c index d5ec1408d0ae..6c3dc97fde30 100644 --- a/tools/perf/arch/arm64/util/arm-spe.c +++ b/tools/perf/arch/arm64/util/arm-spe.c @@ -256,7 +256,7 @@ static __u64 arm_spe_pmu__sample_period(const struct pe= rf_pmu *arm_spe_pmu) =20 static void arm_spe_setup_evsel(struct evsel *evsel, struct perf_cpu_map *= cpus) { - u64 bit; + u64 pa_enable_bit; =20 evsel->core.attr.freq =3D 0; evsel->core.attr.sample_period =3D arm_spe_pmu__sample_period(evsel->pmu); @@ -288,9 +288,10 @@ static void arm_spe_setup_evsel(struct evsel *evsel, s= truct perf_cpu_map *cpus) * inform that the resulting output's SPE samples contain physical addres= ses * where applicable. */ - bit =3D perf_pmu__format_bits(evsel->pmu, "pa_enable"); - if (evsel->core.attr.config & bit) - evsel__set_sample_bit(evsel, PHYS_ADDR); + + if (!evsel__get_config_val(evsel->pmu, evsel, "pa_enable", &pa_enable_bit= )) + if (pa_enable_bit) + evsel__set_sample_bit(evsel, PHYS_ADDR); } =20 static int arm_spe_setup_aux_buffer(struct record_opts *opts) @@ -397,6 +398,7 @@ static int arm_spe_recording_options(struct auxtrace_re= cord *itr, struct perf_cpu_map *cpus =3D evlist->core.user_requested_cpus; bool discard =3D false; int err; + u64 discard_bit; =20 sper->evlist =3D evlist; =20 @@ -425,9 +427,8 @@ static int arm_spe_recording_options(struct auxtrace_re= cord *itr, evlist__for_each_entry_safe(evlist, tmp, evsel) { if (evsel__is_aux_event(evsel)) { arm_spe_setup_evsel(evsel, cpus); - if (evsel->core.attr.config & - perf_pmu__format_bits(evsel->pmu, "discard")) - discard =3D true; + if (!evsel__get_config_val(evsel->pmu, evsel, "discard", &discard_bit)) + discard =3D !!discard_bit; } } =20 --=20 2.34.1