From nobody Sun Feb 8 23:41:42 2026 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 9F39F3148A5 for ; Mon, 22 Dec 2025 15:14:49 +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=1766416491; cv=none; b=JicTqAU97AXB58n8tMHyBwE1VM+Hpfz++I+zg8vHPKUm/GosIEpjUQJ/tR34rNtLkenLEgMlAJXTOR77K60nj3wsbLy5r+7aqQ3MF/VA1ZJI8qHxpC6usQIts94HncALhesp7M36vlbSgmeQQ2NUwZEnELKtzvy43xbnfjKq3+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416491; c=relaxed/simple; bh=PAkf0NbnSlWBogq8yeUp6HixGYaT60O+RjPgTXYfoto=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oGcVlvfsN7DgKVuYKOy1gkifXAtUH8QzyrGL2hLa4o7jc9VJwn2GJaYPxOKTLAAUrEu6zHvukzYWsoPm0Y6zksS43XExsHtyRL1G4Db1JbWMZgbcSF8Yd4YQj9SvuHZ/Xhd+KT32y+DrgTm+/VeubH3ueRWH7Z/UK+3GnaKdrjc= 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=WiKGUH5O; 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="WiKGUH5O" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4777771ed1aso28182705e9.2 for ; Mon, 22 Dec 2025 07:14:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416488; x=1767021288; 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=dLNSFy2x/hIrhk0Ax93bLHz2woErNJIZ/GG5lWWV+fA=; b=WiKGUH5OPeDsf6FwpN1nrlmyeQUOr/WFK5KyIZflalgvq0CPQHPZUPNgmvKvdlEvZn QZ7/fCDxy7Azg5fAtSQ0aSSAIEnyhF/ZJDROs27335JTw4ECHRYGLjDpHTngyu0Ua3BA aaMtVxoOgNCXdhGs93ccvunz2QSUqngXavU1ADdBn0grrttQuO8m9JMxzvdZ/1q4cb5R g8R46GrIofkkZf2cQ7qLfBsqKyOaFhF38xxrXf3wJwjTD6UD6D8cp0bvRsG4mV3c005y 0+RqZ+azJZVyozb7kiMMbHEnBGkjMBFhK34gxynI8OW+ywKchUtukvmjDntRNGZPe0/X Ksig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416488; x=1767021288; 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=dLNSFy2x/hIrhk0Ax93bLHz2woErNJIZ/GG5lWWV+fA=; b=o8RUidMj2u8y9IVYmMjvOxd0x+rfI2Wl5zJysgT3Y+z0s+0165o4yLzHHH3KgcYrCF UWQQCNmTZ0fu7TMSr1+FpRhQ5/HG+4Smxr5MTMIn6d7yRLKZqFODQB1+sw7NELUV82ts 6dxWHWeu0O+XqoSEMjmSlMU0eAT9c8qPX3Dld6VaxB6UUnSmc9kkaJkYTYvssaUMAwC3 RaEVa9rNzOpK4oJzJyCaMAEnaJVzsOq4/ARF6zAJixCITXEDU7CFZ8zbFyLxU+3o/vNI hshpLh/SbVU58PmnG/XWJ7cdYqqjvTqDEACNj5RlFJu1ngAngcqjUeCKw8gINi8l+euK lbHQ== X-Forwarded-Encrypted: i=1; AJvYcCV7tY+canFBn+f6KgeqW+gEtRXPOJFpDj21mYLlB1i/OCfSdzWVhRlp4aaqjLtC9ORFvF8urZ230/UEhS8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0qbYq6PzOWe36qu/d1OspeWcRaJY2WjJrjJUGMjZmtPnmabQ+ UaZqZFOqTDiWIcgn4V5TiNgTA1CNQ4MLnidYYS2HwSIor+Xxnuegf1O9NMiynrZ8xW8OY1t/55w y5+XP8cg= X-Gm-Gg: AY/fxX58obazivZsZpBp5iSrAuboi46Lo9UQt1m2KcZNnh0YL+xS5MDKb+VnYiovhbo NlVZYCRHoqX5bXpvbJfavRtnT1x2DghwtRUsxGDchI+ni2/5YMtZT6iiGfL4JnvW5z2vqC+SOTl pD9yCu/2YicG7xW6AKN1l4v2nO2M8WhwyBgUPO06Yyvwt/KoT0bRrGVxDheW1DLGsV3NevwbKJC kr2/sGDNzAY99kREhZXe1UdJmMjJwDPs/GO4v4U3qdJ9PtKiU/ju3TiEjbRRkUeJZUJ8+UxEQeo 8ZOaZUv9Sc98PveFoWjD+n9/S1UY9X95s2nsaT72WaUmJFaDvvMFlElA1+/gSuA135BGa3DJrPh OKFU34gUaOJI4i3jALewLsOp4wZ3KxERnbcg11k3SglMCUGZ3qWSBgVpHv6aA1aLC/+LLp2KVGj 7DOh3H/Kqt/ENx6t7Mybnu X-Google-Smtp-Source: AGHT+IEahEYGJ7vFS+t3GrATAlFobA+R67jco9VafW8F5oa5ErNeavGgswhI/pyV13bcbNTE7NBvDA== X-Received: by 2002:a05:600c:350b:b0:471:1774:3003 with SMTP id 5b1f17b1804b1-47d1958ef07mr103027745e9.29.1766416487713; Mon, 22 Dec 2025 07:14:47 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:47 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:26 +0000 Subject: [PATCH v4 01/14] 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: <20251222-james-perf-config-bits-v4-1-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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. Running the Perf tests with "-fsanitize=3Dundefined -fno-sanitize-recover" results in no new issues as a result of this change. Reviewed-by: Ian Rogers 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..46422286380f 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; + bool str_type =3D false; + 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_type =3D true; 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_type =3D true; 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_type =3D true; 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_type =3D true; 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_type =3D true; 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_type) { + new_term->val.str =3D strdup(term->val.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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 A1C6D3218B3 for ; Mon, 22 Dec 2025 15:14:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416492; cv=none; b=tH4DDY5dBXYo+NFS04IQ56Tldb3T/m03226dBSBRoL69lwl7pqjjhIWTDhzzbuNcMAh3F1uUiL1vADPSOqya7lhSgh4+uJmoU4BOg0KbR9rRgmZZS1afa+kgIxRDGJRG4AC1ExukMLmxM/0QdR/9BL1cV8frNXXUIEQTtWFsJ1w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416492; c=relaxed/simple; bh=mrtxJ5M6SR3xdP9wSMg81zPVwvCfE9H+mEz/8/aLW+k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jEI1WTwg+EF2qO2Hk636+mweRPadqR7exDSXVRum3xq4rlMf3waapVmkSx07ZPzZfy0/TpaDMx37tsl7nAWRISyo94XRILAj7qn6PvqbJsVmO7gOt5YsW8HEjaKbMRAUenYiNTj62T8ZfQAF7jdgEG4z+6at20uLI9vncO61Kpw= 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=j4Xx/x55; arc=none smtp.client-ip=209.85.221.52 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="j4Xx/x55" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-430f57cd471so2202004f8f.0 for ; Mon, 22 Dec 2025 07:14:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416489; x=1767021289; 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=2iYsj2HXEXbwN0vBYKJUN3Lkbk015SqHZecYgVjo6J0=; b=j4Xx/x55/BCGEAiIjgKWJjZKjvfTFs4AaQakNAKFt5S73kTI1UYeQ/nH7Bx2QrMxaK I7/UJ2BpclkWP0gTGuTTbLhTQ8CvxdJT8KJq98zPvPBNmJ5knRgxevUshmLqHWXG7/wT ylhLzavGu2DDe40gqmgXJEw6SlP1U/oC5Gzm3/7n4rcl6G5wgixAJit83/lxnToM9DuJ advtI0D9PfcG3fzAfZ1/+Oj82Zey9DgC1m1POGd9UJCNJ3nGyGSbaEkb0zYyiK8QkIoL U45cijVpdcO84vl1N6xTaFWDd99rXqc2S72smXi/1vglaQenQAPWTyjYGm60j/NekEcp Q3QQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416489; x=1767021289; 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=2iYsj2HXEXbwN0vBYKJUN3Lkbk015SqHZecYgVjo6J0=; b=eXZM8HTX5R+M3HeoeLv+e0L2L0T2wMiG4r2DqfOyJwQ6HGNuGK3gHgiqpiNmnAFMvo 49IyGtj+VTWorErIh6S+OLfeLlrvCnbP+syVBmEYmhfiDO5lvPSPPGg1v6NYLfN3CIPF CAaalBegxGAdqqs8fI355qjZ5zSN6ejLWWSS4XARHlJOuucxA+LR1KRYNIb4qUFAQbP6 kN9PRxEjYj7/X7TAusj7XyLrbbLDfpxcDnfmISuFW6XZEk+oRRZ68bAmu9KIAb1Tw9zf tq9yq2pg8OX+eRyjcvY7ZIVrUDFm0qdtG8onFgv/64sO0HxnAjoNioMAaQy21Xo6UD7M yNxQ== X-Forwarded-Encrypted: i=1; AJvYcCUok77Ar9RQneOtw6HcVs34IM/3qF3xU7UMlZJWIMJdq4KodiIwZIxq6sdSSEtTm8hgSIqsKeavjEePP6o=@vger.kernel.org X-Gm-Message-State: AOJu0YySSk+4+LABvFlwEmAn/xMqWnqJF6rNKkKFbmUVSh0pycy4Ja6A 9ZujhDdFOJczqopOZbmfuS+0x3/alQStCbrzpG3gQvMh9SZ60dOMqmpJ6v8JRK3N8IU= X-Gm-Gg: AY/fxX6jHCbo5hdvB/fTWzSA1ROgZIe/7xART160hnwpsU4DwSjjSyq8Qu2XfyxVQjU fPUfGqweCG2fnzb6qyfiCMCl9L2xCwLHUawkLwB9YSxQeVXOdNrLNkVfpo1kebcPmb2At0xQbKv Gr2jAsoSuslhxFNGxn0YMM0cjBJX+5i5S9INS3XW83f1dx32r1+H0/tnjEKTkLJ/m1ZZ2yMNjEG 0K+uGs2gkBGM2ffnUribx8zzqSKgG0W7NpnW50MntP7SS1KHNyxBDRemnDOvTJ2FmH5O76qvRfC xcCZnvWLfco5Rx1I+d5iCQ3Kcv0kHlDJ3JOmSk+f4tVSPsK21b1VrC04UawyOF10pw4foj1LEKp IBC2iD55rDf3JMT+n4ugZK2K21alSSGeVmUY4VPLQNT+zleUSIFKg8qe47jNqFDaFfsbTnghPQY UWA86bhS0h8XGXhiWD+49pSGDpyKljNxY= X-Google-Smtp-Source: AGHT+IGLZG6rDLL8DZTvheHrtZ8wcdGMWVbVjIluTaogXPZPgmpF6avXPlRYPjqEHI5VM9k96uhutw== X-Received: by 2002:a05:6000:26cb:b0:430:fcbb:2e6b with SMTP id ffacd0b85a97d-4324e4d2d51mr14009093f8f.27.1766416488996; Mon, 22 Dec 2025 07:14:48 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:48 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:27 +0000 Subject: [PATCH v4 02/14] perf evsel: Refactor evsel__set_config_if_unset() arguments 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: <20251222-james-perf-config-bits-v4-2-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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 Make the evsel argument first to match the other evsel__* functions and remove the redundant pmu argument, which can be accessed via evsel. Signed-off-by: James Clark Reviewed-by: Ian Rogers --- tools/perf/arch/arm/util/cs-etm.c | 9 +++------ tools/perf/arch/arm64/util/arm-spe.c | 2 +- tools/perf/arch/x86/util/intel-pt.c | 3 +-- tools/perf/util/evsel.h | 4 ++-- tools/perf/util/pmu.c | 6 +++--- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index ea891d12f8f4..c28208361d91 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -441,10 +441,8 @@ static int cs_etm_recording_options(struct auxtrace_re= cord *itr, * when a context switch happened. */ if (!perf_cpu_map__is_any_cpu_or_is_empty(cpus)) { - evsel__set_config_if_unset(cs_etm_pmu, cs_etm_evsel, - "timestamp", 1); - evsel__set_config_if_unset(cs_etm_pmu, cs_etm_evsel, - "contextid", 1); + evsel__set_config_if_unset(cs_etm_evsel, "timestamp", 1); + evsel__set_config_if_unset(cs_etm_evsel, "contextid", 1); } =20 /* @@ -453,8 +451,7 @@ static int cs_etm_recording_options(struct auxtrace_rec= ord *itr, * timestamp tracing. */ if (opts->sample_time_set) - evsel__set_config_if_unset(cs_etm_pmu, cs_etm_evsel, - "timestamp", 1); + evsel__set_config_if_unset(cs_etm_evsel, "timestamp", 1); =20 /* Add dummy event to keep tracking */ err =3D parse_event(evlist, "dummy:u"); diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/u= til/arm-spe.c index d5ec1408d0ae..51014f8bff97 100644 --- a/tools/perf/arch/arm64/util/arm-spe.c +++ b/tools/perf/arch/arm64/util/arm-spe.c @@ -274,7 +274,7 @@ static void arm_spe_setup_evsel(struct evsel *evsel, st= ruct perf_cpu_map *cpus) */ if (!perf_cpu_map__is_any_cpu_or_is_empty(cpus)) { evsel__set_sample_bit(evsel, CPU); - evsel__set_config_if_unset(evsel->pmu, evsel, "ts_enable", 1); + evsel__set_config_if_unset(evsel, "ts_enable", 1); } =20 /* diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util= /intel-pt.c index b394ad9cc635..c131a727774f 100644 --- a/tools/perf/arch/x86/util/intel-pt.c +++ b/tools/perf/arch/x86/util/intel-pt.c @@ -664,8 +664,7 @@ static int intel_pt_recording_options(struct auxtrace_r= ecord *itr, return 0; =20 if (opts->auxtrace_sample_mode) - evsel__set_config_if_unset(intel_pt_pmu, intel_pt_evsel, - "psb_period", 0); + evsel__set_config_if_unset(intel_pt_evsel, "psb_period", 0); =20 err =3D intel_pt_validate_config(intel_pt_pmu, intel_pt_evsel); if (err) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index a08130ff2e47..2cf87bc67df7 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -575,8 +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); -void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, - const char *config_name, u64 val); +void evsel__set_config_if_unset(struct evsel *evsel, const char *config_na= me, + u64 val); =20 bool evsel__is_offcpu_event(struct evsel *evsel); =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 956ea273c2c7..e87c12946d71 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1382,8 +1382,8 @@ bool evsel__is_aux_event(const struct evsel *evsel) * 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) +void evsel__set_config_if_unset(struct evsel *evsel, const char *config_na= me, + u64 val) { u64 user_bits =3D 0, bits; struct evsel_config_term *term =3D evsel__get_config_term(evsel, CFG_CHG); @@ -1391,7 +1391,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, if (term) user_bits =3D term->val.cfg_chg; =20 - bits =3D perf_pmu__format_bits(pmu, config_name); + bits =3D perf_pmu__format_bits(evsel->pmu, config_name); =20 /* Do nothing if the user changed the value */ if (bits & user_bits) --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 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 D4568322B63 for ; Mon, 22 Dec 2025 15:14:51 +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=1766416493; cv=none; b=qecQmz4SI/vUlAos8w1dUQNsI28adsvpVDfAaD2sHd/gCq1m8jv/XJ5aufUxTjzRebN6xcSpGyF9cnNC49pqrL81gvidt1PoHUa7Rd96K9t1rG0IwTx47kypRrFh1dW2zSXRnT2nQg9xvuFSrM1WeiIJc1CrUtvlwMMGpyhU8z0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416493; c=relaxed/simple; bh=Jc9rERJ1aa9uPXcRf+vQny2CNy2GLYq2wwN414Q1Kbg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CAjAhMK7pSReFiOrShcFkht/qvij4lfj+YvDKNcwe3MdcBdBPOu7fU0aqQICcbF92m+wSkNsHFyvrDsaq3W2Pnvya3bxM2M9sdr1l5oFV57bSghCIxD19lXNW5Wp0+Nqll/F78qoTLg80TKJmd4wKYxFkErfO6qGj/sITN2/o0g= 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=fcUs5sZU; 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="fcUs5sZU" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4775ae77516so36787105e9.1 for ; Mon, 22 Dec 2025 07:14:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416490; x=1767021290; 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=LcmTvJXahQwVxWMEArSL10u6PwPhpeVpWDjIQEb7L7Y=; b=fcUs5sZUPq2wgHGzHdaeRSq4yF1KE7V6tJgu3lUMSd9ieZ9OYbb8nJyRQcoEDo1RtN eV0ecvYuizeEm8L/Ygl/k9r1BKF+4UGgRTQKiqiX2E1clvkL3MN0yKoJxSMKdkPQogCW C46qCdoRqWGtRupm1mQDErTB2ffaZpzVbN41uwfoZlvTzxtHBBcoKvcS5F2FHZVxeDz3 VpEBjGRlqrhWu3ENbnrNTMv7pucCSi+Gq41GjeZ4y/11IKHtFFOQkv4nb7l2HfBeBdoV YVpo76+qN5/n9YtECjwwGu1WtEBCSnmCAgJLW6QmE+WTNsUFHUYgjzigpOtKQag5ARJW kwFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416490; x=1767021290; 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=LcmTvJXahQwVxWMEArSL10u6PwPhpeVpWDjIQEb7L7Y=; b=C/+eEYKhXjkqoj7c+MH/G98iVVOBxOZptSY853orXSObSaRe/MCsU+UzlvHzGauv82 voiMJxZScB2nw83O52O+FFD707H7sj0YSplsEDJR4wPIUyAzbaR2XhtIPepTTGphdKPL cT1qTeWMCc30+fLoE08p5A7354Dw7uLFVzTEzvRhm2QdbNJEO9fKcUwiA6E9U/0nzL0L a6kVqu/Go27zw/XoRj9KQDTm0/ibvIAOWJcUe0gIh3wC+yWePAJTeXU2Ub7PQ6Gj6TeB 3OqfESC/WQNnDPG4vdu2HJEtraGMYsR1LWt/VN4zNry6Dekp/Oq+6knLr2ZEz6bwZoMP 8jCg== X-Forwarded-Encrypted: i=1; AJvYcCVAMUqZpZzGsVuY1jFN5fOGo4cNF+2gRgFJ6+OofnAoquhINeRbeo2C9TCtPx3gVcYI8oX9KSCs6/is3LU=@vger.kernel.org X-Gm-Message-State: AOJu0YyczIJZLG8DiOLSb/6IsNZLGE/Wu94w0aaBXswyWfPjNguB6HKP Y/iUoVK91qkBybRC9trrOsebdVEDE9/dWfMl0jKLPUp81lgS3dWTuRe6HdUfIDX7kEA= X-Gm-Gg: AY/fxX4u3wg9H6erPK3cpeZ654CwgbXfU7Ya4NVQi1bIbxKGt3H+WYO/wGAOkDz8vk9 uCeSNHqkgHH7Gjzk/K61Nf+E5wPZA64OIN99XizMD7qKiQOQ+bMV5habMd7v2fAo3076/8t5WBs F4FsWR3q5GStNRK+vaZDZzurxP0zQjQkg7NyI5ZvqdPT2I4TQ/XZpwOdXtdUOLSv43tJl5Dwazp jNDUnjUOqfDVukI3hTPEv5Sjd0EMg0lAedjMY3nwnY1mubQ1FKFIk+8ALEFURrww8kgUsnQTIhe kdGvqWD4p0FQfisirJp8nea3o7fA+UieUPTB3FIjiF48P30WHHwlRG7xAl9FPtfZACjzsX6Kjh9 W9CHNNtMeHlCSY1vNDiZ/vNghdtN+TMpAWcLxaqk1ZN6xe2KPx53GuYO+UWkhgjOwYLl7YqMoii MQsmQAVv6qhFTiPAGNwzb7PW+HQtXgmqQ= X-Google-Smtp-Source: AGHT+IH4/L5Fd2bdzY3Fz+9C/VnJ0iwvm8BOZw7bzpSdKuWzvPUtGRSH0pZWBQVoeSUMScAftQbCdA== X-Received: by 2002:a05:6000:609:b0:430:f7bc:4cf1 with SMTP id ffacd0b85a97d-4324e4d50f7mr14023332f8f.26.1766416490049; Mon, 22 Dec 2025 07:14:50 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:49 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:28 +0000 Subject: [PATCH v4 03/14] perf evsel: Move evsel__* functions to evsel.c 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: <20251222-james-perf-config-bits-v4-3-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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 At least one of these were put here to avoid a Python binding linking issue which is no longer present. Put them back in their correct location to avoid confusion about which file to add a new evsel__* function to later. Link: https://lore.kernel.org/all/ZEbAS2yx2fguW60w@kernel.org/ Signed-off-by: James Clark Reviewed-by: Ian Rogers --- tools/perf/util/evsel.c | 40 ++++++++++++++++++++++++++++++++++++++++ tools/perf/util/pmu.c | 40 ---------------------------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ec6552a6f667..21878e9bd029 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1314,6 +1314,35 @@ struct evsel_config_term *__evsel__get_config_term(s= truct evsel *evsel, enum evs return found_term; } =20 +/* + * 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. + * + * @val is the value to put into the bits specified by @config_name rather= than + * 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 evsel *evsel, const char *config_na= me, + u64 val) +{ + u64 user_bits =3D 0, bits; + struct evsel_config_term *term =3D evsel__get_config_term(evsel, CFG_CHG); + + if (term) + user_bits =3D term->val.cfg_chg; + + bits =3D perf_pmu__format_bits(evsel->pmu, config_name); + + /* Do nothing if the user changed the value */ + if (bits & user_bits) + return; + + /* Otherwise replace it */ + evsel->core.attr.config &=3D ~bits; + evsel->core.attr.config |=3D field_prep(bits, val); +} + void __weak arch_evsel__set_sample_weight(struct evsel *evsel) { evsel__set_sample_bit(evsel, WEIGHT); @@ -4098,6 +4127,17 @@ void evsel__set_leader(struct evsel *evsel, struct e= vsel *leader) evsel->core.leader =3D &leader->core; } =20 +bool evsel__is_aux_event(const struct evsel *evsel) +{ + struct perf_pmu *pmu; + + if (evsel->needs_auxtrace_mmap) + return true; + + pmu =3D evsel__find_pmu(evsel); + return pmu && pmu->auxtrace; +} + int evsel__source_count(const struct evsel *evsel) { struct evsel *pos; diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index e87c12946d71..e3a1f26213ec 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1362,46 +1362,6 @@ void perf_pmu__warn_invalid_formats(struct perf_pmu = *pmu) } } =20 -bool evsel__is_aux_event(const struct evsel *evsel) -{ - struct perf_pmu *pmu; - - if (evsel->needs_auxtrace_mmap) - return true; - - pmu =3D evsel__find_pmu(evsel); - return pmu && pmu->auxtrace; -} - -/* - * 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. - * - * @val is the value to put into the bits specified by @config_name rather= than - * 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 evsel *evsel, const char *config_na= me, - u64 val) -{ - u64 user_bits =3D 0, bits; - struct evsel_config_term *term =3D evsel__get_config_term(evsel, CFG_CHG); - - if (term) - user_bits =3D term->val.cfg_chg; - - bits =3D perf_pmu__format_bits(evsel->pmu, config_name); - - /* Do nothing if the user changed the value */ - if (bits & user_bits) - return; - - /* Otherwise replace it */ - evsel->core.attr.config &=3D ~bits; - evsel->core.attr.config |=3D field_prep(bits, val); -} - static struct perf_pmu_format * pmu_find_format(const struct list_head *formats, const char *name) { --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 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 CB2F4322C67 for ; Mon, 22 Dec 2025 15:14:52 +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=1766416494; cv=none; b=tJXuwJ36AEH0mQ4bkpX2vGJGE5ehWiaL4l/2vKA9ZUc21aohqSxsPGfCVNZm1Ve6qNi5Dhrg1wwUS3DkE0fvFfItFe4Yoz2+ycmX38Al0Q+IFkLzFvBwwFD1QEXAzNJtUYMzF2rjuFNpcp61mj5ccrNyiypW4wpkyzY2n68Y/RQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416494; c=relaxed/simple; bh=FTxDdPV8VRCnrc+wl5dgopj1RtcXYU68OejLvw73lKQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tNYiU8pP2Lfo1vOtbnSwR/ii9aw7Mf+eOeH34cRZ06BIcDZkiS9+pLkP/8muJMio781n9qn+LH36P5rEac63dO/dmO2oLL6lI7GrcIAptRelQq39AS97QFaGe7d+voi7C4vHSUv9Opyy7rX+KwA3a9YUOUfny/XoqR9sAc4Rs0Q= 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=B8850Ybp; 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="B8850Ybp" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-477ba2c1ca2so41033815e9.2 for ; Mon, 22 Dec 2025 07:14:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416491; x=1767021291; 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=U1bJE594NjB5xayk5BHzRci/xs2vEOkVDLlHSZrqiYE=; b=B8850Ybpwr4E5WjIUjw3uVxj+xJGVer4XEn0ZCMDXdANzjxSky/NKkzAjdoFonksnI YnDms7W0iIW8p2+txwIGgLjefCJ3AbKaqdJA5W9842Mg3CK3hMpfETRFgZpUKmE8MTbU LQydx1aSqZfZRrjEBIfSHxDgnZ+gBZ7ljyVi+/07I7YklUcMzWoguqY5DYqBhLmNtIgr XWgpI1lnLPupmc/JhuxUGDG0Z6YzWBbVpc4OpNChyKZvaz2J8HZcxZUzrhOueV/cFkhr 8OB6EwUFuqxKuOyKG08znT/YvC4xNy4dC37DF8xW/WDISyDtHaF/i7citV+qVG0N7kHb dZxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416491; x=1767021291; 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=U1bJE594NjB5xayk5BHzRci/xs2vEOkVDLlHSZrqiYE=; b=sqmBuUGcQ2T84tY7aBHpBxWZTAoQvGljQ9OPSp+e7NcyYA+2RqCLbD69YQqFTWplJV B/D63Axhb5aDO194yiG2zqS/MqzUfZH1bNXL8UI5EgXulccw6Aks69Kr7lxjS5V5nNtM kLxlT75ZSIuf1YeJxtTbvLHP4cupfJ73effQGwQqRdn9phzCinPiFyQtSrPowk9JKtkP NfoKWYtr6Pt+UFkMMbUZteJnz/nUuZ13Achn5d/Fm3X4EBHPRxqLGArL4FyCzilgGEU2 TGPvccvs5S8O2nx1v8osbu+oBH1iqsbgIQLHC4zXpNp9F2W/14oDtPMcxYqG18qGzwkf bj/Q== X-Forwarded-Encrypted: i=1; AJvYcCUnqnSLmlzghWHPKiMOYVNUn66dqxD/+Zw7A9dHnbB/DfYv1gftQGWYQurmZFgwjB0YLn4G2Fcdwz/Tmag=@vger.kernel.org X-Gm-Message-State: AOJu0YxyR5glmouMdZay6+nWUwUeJCLRXIdKB46MKLV/FGIu9gHR1Qkj wWfRcPgQAU8AR7DyZezexFV8pHsvswEr8ImhiIUgroJWE+kxGKDQ/FWOGJoAb6rpYpE= X-Gm-Gg: AY/fxX50yQ+t4z4FpBH4//A8wOsT/nJKUtiwQ+29eLtVKjjfkFAbihASnud8C+/OClf EXC/TsTvtmnIgTpIQ7y/Osvft1DZpFc0pm2DmnQ3jJknZ38DhYWNo0EZ6fN7+XuDjJbtOAseNtP tyKlIjrZjhVukHIHwkFWmgw7W5XJBUpEtvMaBKuv4J5nSqgIbrGb02lwphYWMd0uuovie4Rr2QY DP3dt6w+svqbi/JkjtujUwCukrc7dCCt/Ash05EILLcH5T8RCt0KvnrK8A9s8rXwAnqhVtGJJ49 6F7gzD3Tgd80HrdwD48ufJTVMm+PwcYBHTsPAI0RnXP2ursCEH6yj/OC3whqTXeiKS3T6BfXfEJ TOnAguKsNYdhuM8mNVPuRgxrlYb+GtqcwRCJ15w44WmSY480lULINlnnEqofiZtKRGw/KU+CeJm OMLBB2EwAGNYtwe7wR4+6BnYXhWdZDo4E= X-Google-Smtp-Source: AGHT+IFddjiKvcVB6cB7sXuBjaeFQkW72VpuWm8Z2oCtbr9Um6xxbGDEDSw9Q4XBeyAlVCQFF3b1FQ== X-Received: by 2002:a05:6000:26d1:b0:430:f463:b6a7 with SMTP id ffacd0b85a97d-4324e50ec19mr13688757f8f.45.1766416491127; Mon, 22 Dec 2025 07:14:51 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:50 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:29 +0000 Subject: [PATCH v4 04/14] 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: <20251222-james-perf-config-bits-v4-4-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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(). Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/util/evsel.c | 4 +--- tools/perf/util/pmu.c | 3 +-- tools/perf/util/pmu.h | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 21878e9bd029..45ab97beeb34 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1322,7 +1322,6 @@ struct evsel_config_term *__evsel__get_config_term(st= ruct evsel *evsel, enum evs * 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 evsel *evsel, const char *config_na= me, u64 val) { @@ -1339,8 +1338,7 @@ void evsel__set_config_if_unset(struct evsel *evsel, = const char *config_name, 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 void __weak arch_evsel__set_sample_weight(struct evsel *evsel) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index e3a1f26213ec..599fdf5e28ba 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1404,8 +1404,7 @@ 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) +void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool z= ero) { unsigned long fbit, vbit; =20 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 8f11bfe8ed6d..e34db47ae5ef 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -254,6 +254,7 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct = parse_events_terms *head_ u64 *alternate_hw_config, struct parse_events_error *err); int perf_pmu__find_event(struct perf_pmu *pmu, const char *event, void *st= ate, pmu_event_callback cb); =20 +void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool z= ero); void perf_pmu_format__set_value(void *format, int config, unsigned long *b= its); bool perf_pmu__has_format(const struct perf_pmu *pmu, const char *name); int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_forma= t_callback cb); --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.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 07114322B8D for ; Mon, 22 Dec 2025 15:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416496; cv=none; b=huS3I4cTcUWjUcQ2/mFyqPDG00+i4436LvU1lqXURt70O69MNODy+A5wjx/MyJD2k6K5oOhtBsdOO58GdZQRXG+z7oW3itDKqyWIa71Rm5qJv0USPs2wmUikq8pLd4BlhN+6SoUEDqe4ohbsG1ei8kGMA+hhgimyR8afw9aGGiw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416496; c=relaxed/simple; bh=91WocCuEtGZMcPX4yTHxa5nPnX5Yy14hUt5jFUQrOQA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pfSTo0IQWYAYtVCOdtaRkmeoy5Um+8Fz5NmzBHmd/BQ94X+Pi6o6IgoEVajVhrGQamUQAh3r57n6XIyByzILP3xQ67NoEBFA91xCr22KScIY64PlL1fECLXTzo0I2iXPNjHypQmE+kV/52xrJ4xbarUrH85ULuIoRCPYHV7BKPU= 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=nmIuNRgA; arc=none smtp.client-ip=209.85.221.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="nmIuNRgA" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-42f9ece6387so1528496f8f.0 for ; Mon, 22 Dec 2025 07:14:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416492; x=1767021292; 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=LRxhQKZyRKVmSnLrclrpBhqFP+Noob/HLauI0TzjRkA=; b=nmIuNRgAkqIviALluRFu1gFKMzs355mEyG8fD2WoYDEzQjygfzM+29HlCIpMwK73x5 95zVGiNfQ+TGLIflClR2GyMxAOZ506TOD7Q0VJxqQ9ko44qfQBaT+NUmTnOYf+OVCyhQ QmKI7Pm/IDgHH7M4h8PmXCucNfcvhbgbCOxf2qFnC5jrMikjCeRE4za4MVdaZQdmZfw3 C9sHZi/WK7DmEGxYS6xMiccC5xbxOLMnPbH5rCyO93RSX41ptZOX0fj0VoTAdnyocwTH PQ+j3elJHiSmLMscLT6bRqpnCMdX+yiUg9QIn/lkLwr6sar86CqjRJM1Eo0RTeSE+wrS xu/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416492; x=1767021292; 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=LRxhQKZyRKVmSnLrclrpBhqFP+Noob/HLauI0TzjRkA=; b=LSCwDbM9b3FshbluVSud9mrrAKf1HlTp+XfFOTyzlSWrptkJinbvQlZqQSrFEPAcFp efZuWvFiGHBQ5PsVlBjjBShEdJxiJAy62fRPAVZW8tCSy6Ps+7I2zFrCEz7rQ+M2lfkk xtBsxb3IQU4KMcz+lasQSa5CrsEodXoGSuSBiW95K7awwUl7kNa138cmp7U4bSYd5wwy ceX03AyIj2Lg8aoI6pOoatFdCdOL9ggOVEHbY80IFwqcPIGD5ydzS/0KJUSrCzjV3t5K +WHCpYpUmh4MuaqyUUHdTyrCWw8Zrt99YwCqcJyZDRWB99/1BXJpA5eqaQYTsC66UYwx NmsQ== X-Forwarded-Encrypted: i=1; AJvYcCUy29r3iO9UAmm3kvoASdlhyUZhoj4TIJw29tvISDgQIuqabptz9c4dbolf9h618e7W9TowRpRbEjTb7n4=@vger.kernel.org X-Gm-Message-State: AOJu0YzZqm3Jwne73UPi0GaWFTcZFx1vo8u4ukvUIwzlWWOCe/6uTmZH czLNF3Lyf7A4vHO2c6uKY5EICVZm1zxbf9sSQvt58gdYV85N9aoCgvI3h6xFR6d8wVM= X-Gm-Gg: AY/fxX4vzlfNZMzRERqKboYaUBtzKR/P9bbbwetlQJRbWFf/QhdfZS0PB6I2sAuZBBo Nvf0YLnbGYuqFPI3qvPgiO6PbhkTUZw2JnTpA0BuhxcbKG85GMxcKWbldfQGzibV0NI9cMTqnyV pvZyKDmTQRnn8OxhUd5rj5cBmDbNjFS+kN+l+BwEBMmv7vjwAclLe4aOvWs/OEW+ITdhf6/Qssc SxpnkXmsVPfHHpzScn+2X42VuTZw+yln7W563vUF48Kaerxoao1Tdv4T0J2ZePYCLNuyf810XHV ifQ6VXoJCGbY62DiB+R3FQ6MxeFl7fvFUxJ3Tx6UJ2B5WRipvXw+VO4w92H5Tbq5TQwTkHjoON6 K+NJVfn9irKuxFwCs9WpBzJGNHm1bjBApl68Y30cabAJMhrXN1qvdx1g8rGUoY9DdeOIgoTp9vj R/F7ozZjrkbBDVbPiZgMKY X-Google-Smtp-Source: AGHT+IHwBl/i824ujclP4sQLnrEvoMmybqJO1H8NlqTrzpxaH4/PUebErsbiPsvXrvCvQSiuhI0y+w== X-Received: by 2002:a05:6000:1acc:b0:431:327:5dc2 with SMTP id ffacd0b85a97d-4324e50a6acmr13487321f8f.51.1766416492214; Mon, 22 Dec 2025 07:14:52 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:51 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:30 +0000 Subject: [PATCH v4 05/14] 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: <20251222-james-perf-config-bits-v4-5-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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. Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/util/evsel.c | 9 +++- tools/perf/util/evsel_config.h | 6 ++- tools/perf/util/parse-events.c | 98 +++++++++++++++++++++++---------------= ---- tools/perf/util/pmu.c | 4 +- tools/perf/util/pmu.h | 4 +- 5 files changed, 70 insertions(+), 51 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 45ab97beeb34..354e28e94523 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; @@ -1326,7 +1330,8 @@ void evsel__set_config_if_unset(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; 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 46422286380f..1f6e2213326d 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(const struct perf_pmu *pmu, + const 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(const struct perf_pmu *pmu, + const 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 599fdf5e28ba..2fe92b4b6e02 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1374,7 +1374,7 @@ pmu_find_format(const struct list_head *formats, cons= t char *name) return NULL; } =20 -__u64 perf_pmu__format_bits(struct perf_pmu *pmu, const char *name) +__u64 perf_pmu__format_bits(const struct perf_pmu *pmu, const char *name) { struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, name); __u64 bits =3D 0; @@ -1389,7 +1389,7 @@ __u64 perf_pmu__format_bits(struct perf_pmu *pmu, con= st char *name) return bits; } =20 -int perf_pmu__format_type(struct perf_pmu *pmu, const char *name) +int perf_pmu__format_type(const struct perf_pmu *pmu, const char *name) { struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, name); =20 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index e34db47ae5ef..7bf5b23d0ea1 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -247,8 +247,8 @@ int perf_pmu__config_terms(const struct perf_pmu *pmu, struct parse_events_terms *terms, bool zero, bool apply_hardcoded, struct parse_events_error *error); -__u64 perf_pmu__format_bits(struct perf_pmu *pmu, const char *name); -int perf_pmu__format_type(struct perf_pmu *pmu, const char *name); +__u64 perf_pmu__format_bits(const struct perf_pmu *pmu, const char *name); +int perf_pmu__format_type(const struct perf_pmu *pmu, const char *name); int perf_pmu__check_alias(struct perf_pmu *pmu, struct parse_events_terms = *head_terms, struct perf_pmu_info *info, bool *rewrote_terms, u64 *alternate_hw_config, struct parse_events_error *err); --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 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 53434326925 for ; Mon, 22 Dec 2025 15:14:55 +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=1766416499; cv=none; b=M/4t4ii5PEA7/Bwxmk9Z+DNvxX69msqNBRe/xA4QFzzx9Qrq5EpXZDnfuGJqiwt8UOElSgjVUO/PJJ/jDVT/DPnBxb9RE2Rc9s6KJexrzky7Bo4m36cyQkkFfBWelzTjxBlh8iHmlzc4yJnpIGer+npBLmV2X4t7IUMWUimHSWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416499; c=relaxed/simple; bh=dtSxRObzl9Igu3Uf4jC/9ZgVZUFaci2xTk7imj99J5A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LjZ1f3TaLDIjItisWWjthbqRH8yDnFlc1VoxuTXY9+lxd8G/1hsrDFjDZK6Mo3IF3nCpO6oxsv3OeU+KEV6cl99VqQ0gYM91YkNxqlat/b+iXQ5s9Slegm9+so1D/pdNd+K6zep9Q/q+UHee/FYcwEYFdzSYQaMlO0ftoDKuY6Q= 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=MGaMR9uT; 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="MGaMR9uT" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-47789cd2083so21450215e9.2 for ; Mon, 22 Dec 2025 07:14:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416493; x=1767021293; 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=Tc92yWKQZM+B64gHggXneBOLYCdgUjGdgIDlKi2hgGI=; b=MGaMR9uTwog9ZE2BgTOpDHeCG/mmVs9L5inxIpvHLrOa9HDFUfnbaeTWyd/EpIBkIv EboPBF/+HPu8/wo/wl4Oqu+wmLjRxs6bOoOzPxk0TueMB38Le6QXJObLJqr5OSAoZ4XL Ahq96e46NIOvoGYKaVDpwxXV4dHxVd1CblxYjFwAHhRBQOBUNZHN3Tlc4tILBvPczwXi XPuR5eJbz/ufwmlpLrP2EQiH56rNScrHEmQwl9dS5ZEbVP2FhV+0/LxaCIzStDM4nct5 sCzcWbE8ZyBiRj1W1K1Xfeot7I8JNtKFIxXb4sUA+LCDIgLeCzX93fmr/qS+24uzsYPx kk7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416493; x=1767021293; 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=Tc92yWKQZM+B64gHggXneBOLYCdgUjGdgIDlKi2hgGI=; b=hojggMAtXRobN0ZVY340Gu2ZTUxKCV0Xs1Q9cx6o2YjM1Ex8d9jP+Ufk/sEzWXtRRm UdRBEt6hy/IecMX4EddC4FCg9fpiUT5ykrEdCeFeysQ/qsikJI1bYU48jXDfaFV+6/Dj bVfFXMexXsPvAmsJsJAWpL0erBbh589fFUhBXejHvVDovQhJkAKkMZE5lkYFV55Az9zt 1MpQzSsP9WuR8p7Wyjo8xYxN/cYsPRXSV/OvFhNVLenFZuZBZ9/Q+hlYiOxN8AEYjAIv apPVqIp2bS94d3qwEWJqg0dTbBpBWibed6rpdXD+ozooGRDiI+cwNbyiFJADpZuUVFwj vh3A== X-Forwarded-Encrypted: i=1; AJvYcCUB0K3KL2y+FiPJ3ALyhDHpIbwQOl6fA9BFEEzG13PeFKQPqMwWGHYMy56vAAEDrIwmgWUXgmPpYGeHDmM=@vger.kernel.org X-Gm-Message-State: AOJu0YzdDBbW6E23UnNoDv8PZ8eBWkn/uR9QUgnTtSotg775gYQeGdDp 0ZodDYMPneT/3Q0Xdsm1Jnu56vGs9kWJuyxbgQuQFVtEUcZdakgL63IrkckmZynnZgY= X-Gm-Gg: AY/fxX4v7fWo01DR2OGNS2yvDkQ8cGX7nSZPRihlVQPegWam9necIubJRFSW4wQ1mNN uaiJZHoyjMJ/iFpEdL3bfOpJ9LzeEGMJn9IHzfDKFuq3N8om6RhcnH2JtBzXaAvlyXtZZUh0GTR j2UrfckYBeYK3CWOHHPlqvH8H5P09FQQXhcVO6uOBvolK5NWsg9psM2PKaGQXBrAbf8IuDgEHnw dqdyBr8wC8r009WtSGceYNXcAp8lmloXqN+rh83hg+SMLpgUfJFQ+RlIXybv7UIzmWg7Rldj/o5 OCG8+DIWJ0buBWrmTIdzR/bFmQsrSZjJ3RNUAtUaAGrvNLG89nn09Zu3bOe3NmEPSCKGqUMsyIK v71zjdbPX1e8mSXWKDIMxlv/mG7XuwaTksQRdSwH8QBNOhdj1AieDgmWFzaz4M9GgVAaFznRb2y IiS0M786mrWFQjsGafSAmXpQmFke4IxEg= X-Google-Smtp-Source: AGHT+IH+XDMQ3rlxuM0Gvuwq8tNBEur+OrwI+FlxYWbuxE83bWivfEIsy6eHbB5jrKNX77vHoZIFOQ== X-Received: by 2002:a05:600c:348a:b0:46e:1a5e:211 with SMTP id 5b1f17b1804b1-47d1958a755mr124164345e9.21.1766416493331; Mon, 22 Dec 2025 07:14:53 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:52 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:31 +0000 Subject: [PATCH v4 06/14] 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: <20251222-james-perf-config-bits-v4-6-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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. Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/util/evsel.c | 37 ++++++++++++++++++++++++++++++++++--- tools/perf/util/pmu.c | 29 ++--------------------------- tools/perf/util/pmu.h | 27 +++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 354e28e94523..b863096ed568 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1330,8 +1330,39 @@ void evsel__set_config_if_unset(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(&evsel->pmu->format, + config_name); + __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; @@ -1343,7 +1374,7 @@ void evsel__set_config_if_unset(struct evsel *evsel, = const char *config_name, 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 void __weak arch_evsel__set_sample_weight(struct evsel *evsel) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 2fe92b4b6e02..dc5dab69151f 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -118,31 +118,6 @@ struct perf_pmu_alias { bool info_loaded; }; =20 -/** - * struct perf_pmu_format - Values from a format file read from - * /devices/cpu/format/ held in struct perf_pmu. - * - * For example, the contents of /devices/cpu/format/event may be - * "config:0-7" and will be represented here as name=3D"event", - * value=3DPERF_PMU_FORMAT_VALUE_CONFIG and bits 0 to 7 will be set. - */ -struct perf_pmu_format { - /** @list: Element on list within struct perf_pmu. */ - struct list_head list; - /** @bits: Which config bits are set by this format value. */ - DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS); - /** @name: The modifier/file name. */ - char *name; - /** - * @value : Which config value the format relates to. Supported values - * are from PERF_PMU_FORMAT_VALUE_CONFIG to - * PERF_PMU_FORMAT_VALUE_CONFIG_END. - */ - u16 value; - /** @loaded: Has the contents been loaded/parsed. */ - bool loaded; -}; - static int pmu_aliases_parse(struct perf_pmu *pmu); =20 static struct perf_pmu_format *perf_pmu__new_format(struct list_head *list= , char *name) @@ -1362,8 +1337,8 @@ void perf_pmu__warn_invalid_formats(struct perf_pmu *= pmu) } } =20 -static struct perf_pmu_format * -pmu_find_format(const struct list_head *formats, const char *name) +struct perf_pmu_format *pmu_find_format(const struct list_head *formats, + const char *name) { struct perf_pmu_format *format; =20 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 7bf5b23d0ea1..7655d996090a 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -233,6 +233,31 @@ struct pmu_event_info { bool deprecated; }; =20 +/** + * struct perf_pmu_format - Values from a format file read from + * /devices/cpu/format/ held in struct perf_pmu. + * + * For example, the contents of /devices/cpu/format/event may be + * "config:0-7" and will be represented here as name=3D"event", + * value=3DPERF_PMU_FORMAT_VALUE_CONFIG and bits 0 to 7 will be set. + */ +struct perf_pmu_format { + /** @list: Element on list within struct perf_pmu. */ + struct list_head list; + /** @bits: Which config bits are set by this format value. */ + DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS); + /** @name: The modifier/file name. */ + char *name; + /** + * @value : Which config value the format relates to. Supported values + * are from PERF_PMU_FORMAT_VALUE_CONFIG to + * PERF_PMU_FORMAT_VALUE_CONFIG_END. + */ + u16 value; + /** @loaded: Has the contents been loaded/parsed. */ + bool loaded; +}; + typedef int (*pmu_event_callback)(void *state, struct pmu_event_info *info= ); typedef int (*pmu_format_callback)(void *state, const char *name, int conf= ig, const unsigned long *bits); @@ -255,6 +280,8 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct = parse_events_terms *head_ int perf_pmu__find_event(struct perf_pmu *pmu, const char *event, void *st= ate, pmu_event_callback cb); =20 void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool z= ero); +struct perf_pmu_format *pmu_find_format(const struct list_head *formats, + const char *name); void perf_pmu_format__set_value(void *format, int config, unsigned long *b= its); bool perf_pmu__has_format(const struct perf_pmu *pmu, const char *name); int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_forma= t_callback cb); --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.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 7A7F33242C0 for ; Mon, 22 Dec 2025 15:14:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416498; cv=none; b=b7fE0jg12mGB947rxJpCaSHa6YlItC98C8jBLuzwky7CBhscXFGKyjjna3NtEYzS+VK1YKF6XoxMPoN8ngNFr+PsJIFnrqAME185U2BKuRxMhut+YW1exwuydKU1wrAMMrY+Lk8lr8m/sc4ncI8DXscL4PWQ9CY8Zzls5qp4lSU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416498; c=relaxed/simple; bh=M/zr80Oeo+sGWSF+YKiiItZy+uMJytYOw7BVT1B9KWU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IU59tRcoehtdMhasZppdgDv71P47OhhyVfkKoyXpOKpsmHgd9MJG+O2uL5EQcXIEtQrUnga84XPaxM5Gfpwl82dekKs/K1c9RMVpLqNUS71EhfHMp+31InSnnlY95oTCCfzu+WcJ/MMWOolt23IwjRPnwMTLi4C1exh5qeWTCts= 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=iG0aQ5Gk; arc=none smtp.client-ip=209.85.221.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="iG0aQ5Gk" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-43260a5a096so741228f8f.0 for ; Mon, 22 Dec 2025 07:14:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416494; x=1767021294; 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=Dusq4givPs/+MmVLybQAr0PfVhdx73n3zpPLiMfCBqA=; b=iG0aQ5GkuCJSnTZy4dK3ZKUaz5u3bnd5l2+r7vlh4zBoOZnLr5U0/7wMPZjlM5XSaB MeY69w4r5BgeXx0Yno60Zvj6cjVyfEYHqy3rDc7FPERnnN9SpLXcgmCqsb+GiPldXnkf mp0dODM37AKRoAJzIJxPd09VvtxzYrbaA6l2A03ieo3geSjcG2IuXjjc7cc0kKjRJiQi 77x4X8g1wHu4oLY0gA/V+xZ340BoWorB0eUcdbI0hwJ0V2dgFkxWyuhpWdwpc5DF7qxb HVq+xw3kFfRsxLDsxGBRgn7xWraM9JlgwmL7qvDXJbmubtfD4LXdNG3O7lCupLf6FlNd 8BmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416494; x=1767021294; 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=Dusq4givPs/+MmVLybQAr0PfVhdx73n3zpPLiMfCBqA=; b=sRVIDAZEEu9BvkXlAcgRDvnRGiNmiS8q27PJmacJrbrsljidi/ug/RBEBVzWBk4Q0u ukg33Zyr2EG93LCgMwqPWuhJnqmqeLg7JDPf/+KfIfu/2AvJcCLUdqVPCKGeeQ+GJ+vg 70CldRljVOoEsai9I3vZiHdoi9MpZJrwCZUXIMfVg7ExHVpBVkNG4ZFu3REWE5T0S5Nl BWFeMgtiVPnIoIh0rfeMUEk7JgOSA3AyTgMw+IoI/dlE2p+kzhYMQWcNiS0hLE/xWbmR W0wk7B5XCeRW7AR2tFitZZlDlmWf0xdC695vpNqwY8Z+wEkLaQ7OI9uLE4+OF4FhNg3o Fokw== X-Forwarded-Encrypted: i=1; AJvYcCUBjx008LIbUPEn6e9189R5o0x9otVPvJMFNJJXNDfQ3s3Iy6XhjD8axIfLhUP8uEN5FQh2701uMh/v/0c=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+DcXpSv5RUSIWRJrn4HqvFVYMMJm7XO1IABdZOYsJnmR9xSpZ wWWyGw8HLHpVrB4PxB8XDftu7IjIeFx4iJZyrIGaqCUr6k9/Dx4757H8Ph6WZDiQu/lgs9Cgr4x IG/sUbmE= X-Gm-Gg: AY/fxX4q9exJ+/yxzy2DsHg+HPNB6iVCxEMqu+qrtr44QynGba8/IoOnhsRnbyt3sEM GFw05IIIlmAEubsMYHwEW1HCUMmejrGIQwq+FYslqFJNq14qaNF3j7nlve/hbNmYxclnfYi0Eeb G65enQGN/ZHk+T1TTGUiK5Ep1JNK98aUv3dOA8ulCTqinfnb+M9ygS2uKTRoBByUuJxJAsbb8eK FQUYi23JsvBpCtM/ol9bpJlUKclvJFQd6EOANVDDje4LWIvc2VceBzmNocj374qnCojbkbmKFzv Dj8Tc+FB1ymH1J/WH2bY0PVoMb4v7xo5x2TRDBXUhhFm9VLQrxSwf+eFCJF0TU3YATSR/fVnv7/ dhMv7SnUL10iGvVIb+Ot2m3ZHU0HXPVLDNJGSy07yiBhy2Cto4KEVfRePLza3sAJUATw/PEk+qY 4Xae7RGut2DzbQ8dUM+533 X-Google-Smtp-Source: AGHT+IH25mEFFoPaM1cwim0haHxibCkaTMRRATJLhfsMoJuUgN3vVuqjq2nokfYWDZpCL4mdVJFaag== X-Received: by 2002:a05:6000:26d2:b0:430:fc5a:40ac with SMTP id ffacd0b85a97d-4324e70413emr14627279f8f.54.1766416494435; Mon, 22 Dec 2025 07:14:54 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:54 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:32 +0000 Subject: [PATCH v4 07/14] 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: <20251222-james-perf-config-bits-v4-7-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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 perf_pmu__format_unpack() does the opposite of the existing pmu_format_value() so rename that one to perf_pmu__format_pack() so it's clear how they are related. Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/util/evsel.c | 38 +++++++++++++++++++++++++++++++++++++- tools/perf/util/evsel.h | 2 ++ tools/perf/util/pmu.c | 35 ++++++++++++++++++++++++++++------- tools/perf/util/pmu.h | 4 +++- 4 files changed, 70 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index b863096ed568..703a6f73d468 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1374,7 +1374,43 @@ void evsel__set_config_if_unset(struct evsel *evsel,= const char *config_name, return; =20 /* Otherwise replace it */ - pmu_format_value(&bits, val, vp, /*zero=3D*/true); + perf_pmu__format_pack(&bits, val, vp, /*zero=3D*/true); +} + + +int evsel__get_config_val(const struct evsel *evsel, const char *config_na= me, + u64 *val) +{ + struct perf_pmu_format *format =3D pmu_find_format(&evsel->pmu->format, c= onfig_name); + u64 bits =3D perf_pmu__format_bits(evsel->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 perf_pmu__format_unpack(bits, evsel->core.attr.config); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + *val =3D perf_pmu__format_unpack(bits, evsel->core.attr.config1); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + *val =3D perf_pmu__format_unpack(bits, evsel->core.attr.config2); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + *val =3D perf_pmu__format_unpack(bits, evsel->core.attr.config3); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + *val =3D perf_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; + } } =20 void __weak arch_evsel__set_sample_weight(struct evsel *evsel) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 2cf87bc67df7..95c4bd0f0f2e 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(const struct evsel *evsel, const char *config_na= me, + u64 *val); void evsel__set_config_if_unset(struct evsel *evsel, const char *config_na= me, u64 val); =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index dc5dab69151f..626c7307c8a3 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1337,6 +1337,26 @@ void perf_pmu__warn_invalid_formats(struct perf_pmu = *pmu) } } =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. + */ +u64 perf_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; +} + struct perf_pmu_format *pmu_find_format(const struct list_head *formats, const char *name) { @@ -1379,7 +1399,8 @@ int perf_pmu__format_type(const struct perf_pmu *pmu,= const char *name) * Sets value based on the format definition (format parameter) * and unformatted value (value parameter). */ -void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool z= ero) +void perf_pmu__format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero) { unsigned long fbit, vbit; =20 @@ -1496,23 +1517,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); + perf_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); + perf_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); + perf_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); + perf_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); + perf_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); @@ -1650,7 +1671,7 @@ static int pmu_config_term(const struct perf_pmu *pmu, */ } =20 - pmu_format_value(format->bits, val, vp, zero); + perf_pmu__format_pack(format->bits, val, vp, zero); return 0; } =20 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 7655d996090a..a1255b3a8f91 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -279,12 +279,14 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struc= t parse_events_terms *head_ u64 *alternate_hw_config, struct parse_events_error *err); int perf_pmu__find_event(struct perf_pmu *pmu, const char *event, void *st= ate, pmu_event_callback cb); =20 -void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool z= ero); +void perf_pmu__format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero); struct perf_pmu_format *pmu_find_format(const struct list_head *formats, const char *name); void perf_pmu_format__set_value(void *format, int config, unsigned long *b= its); bool perf_pmu__has_format(const struct perf_pmu *pmu, const char *name); int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_forma= t_callback cb); +u64 perf_pmu__format_unpack(u64 format, u64 config_val); =20 bool is_pmu_core(const char *name); bool perf_pmu__supports_legacy_cache(const struct perf_pmu *pmu); --=20 2.34.1 From nobody Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 49511322B93 for ; Mon, 22 Dec 2025 15:14:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416499; cv=none; b=RwpK5YRm6MIgxVye9y5mQ46tbSEZgWj9mlWusXiCMcFvhtKEvOJx3G0MqZM91CPARYvJBX/zLqDN4UIUSWs/8+T9iFRfh+dSSoCwy1FA37adsCcUXjkJVT/CKCXCsrZcqJVEkUyaFOZC0/xU4l6/GW4+adiQcjs2S9qUxLfb1lM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416499; c=relaxed/simple; bh=7YYoqOIAjjMEaf57v2iXEXgdQFmEmn/LvBsi7H9riRc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GEuNOqQkBgJ1MobKt4XGxFdv1iY+Id+kNXSwbX9k4+qY/0jBYe6Psf9BsVTmlgUgrRgiPNt2mgxUdmGKAsNvwovR0sSPIb8oLteMxtx+YdRCLEgAUUYpBTe4Jl9uTzgO0E9r+xJk0+6Gqtb1n/jGPB1LNQ1HyEkOcH2E9QJ5UwE= 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=Nl7cPr6P; arc=none smtp.client-ip=209.85.221.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="Nl7cPr6P" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-42fbc3056afso2143464f8f.2 for ; Mon, 22 Dec 2025 07:14:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416496; x=1767021296; 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=zxU1vsfrqBADbCFBEcH8TNvakDJOOuWqCmLiru2LKyg=; b=Nl7cPr6PaKXnGPfeAwRKcvcm68ySokhSTqwGwaqQNF/Uuvl5zrh9BDHf5G17YLikyb LbQWCYqWOIYKAxqh4FKfWYvlzzYdkE5DyY89jsENsXg8G+palZ0bkq8MnL4AsyWU556h iBQjMhClJpGa1VhUHXxlt2X6l5izigJxe8IH0zBMk3R5Nfy0w1zVps0JtoH2jePKSHPn 1XZi75yPqP1aAnOK1GCU8KZ4ZzFSjgWOfcysiofNHA1ycVynV0zmBk/RnRDXaz8QhsRI ON1EiR4lXSZUMtl8xsWEzjBtCKqt5+H/gNl6TbCDtj9qbbshZLoQDL1EXhI3bHpF8fMT 5dSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416496; x=1767021296; 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=zxU1vsfrqBADbCFBEcH8TNvakDJOOuWqCmLiru2LKyg=; b=YmAl57/5Nr/GY4zv8iMJrStfySuHMArbW8xSYih47iDDsBaAmtQSXTc+3fihUrg+lR wdB6vNuxw3hO86DpOlSk+nKr7wLPs0grgrpFg1K2fwsgks3SmazOlKO+YbdIiNGPMPXc cFsQF5XEEguQLxEPyeZ/OWG5J744e1XHZB0IBmaHzXSqTzseZVC7dh/gAkwQgDe12AVu L+h5yx/6KBAdycacyWkeP2KXnI1BgZoQLXQBjrSdnfrmorXutRhFVofBBzEL3EGVDrYW KKU9O509mSlLq7WHBtrrEXTLtAtLS/FZRS4Wua+vDQgf1qXFX9j3qj18CPJ/cL/xKahp T8iA== X-Forwarded-Encrypted: i=1; AJvYcCVuaWwxroeMufM/Bu8r2pK63ttOZD/eAitNCCC/vsaXvVKX7qJXT+dQmvlW6MTG93kCE5WbgT2JHHic0cc=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8ZfcvcP6bKQrkYollXQwhSYAFS8LYKwWPpwtsC1hYJnkQeZwz MNyWLYxCdOt+vbiklExAyN2gafDhyodW0CjOAevh+PpYSYcRlEEDDhIsPqi+vPEofL4= X-Gm-Gg: AY/fxX48IlbKDudG8TBl3WRy/AawV/MQ0yQqHDTZx3EVEIgfg6dgFGwjVn3asMrUT62 yasXS7bAN0/cdKmLrbXSAuLmFvW4mFmkwQb1uLqp6elb4LjxFnrppU8NJ7qxU1n8EdG72YsMG1Y ZzSfilhG6GCx24PDltY9rwSe5GuQEh2lQmlkgB1zJa9lKm6InX+u93B2/L0CiAp+Jhu8HlW0C9m 2vt0O+D4xDoYteZ1PVprTMv0a7uM2ild7FnARJSCu5lv3uruJGhNr0c0dshN99vxGcvydeAPOIy edgHfaJ1Tq1iMB0ZgoLNMfO+yF8Ga4p1Tbv09C7Q+FeBG0Lys1pGggCeZ2mgwqU6awtDeOQ3kMe lZ/lOz+Rl5/FAUZ1L1Rly32kc5Q8nIbddMOGYX8BU/P33v7nWvRrQgL/VPYVqjaWZt0u2BWLZc+ AbRLKS5Q6Gq6k4ctd3oCRHy+p9ZeDgJhM= X-Google-Smtp-Source: AGHT+IFfTabNMYMJBYLmezzBRrk87qgMJIlKZFfgncn3j2IGaAmUdNJuFWzm+rqM2oVLN7iElkhpjg== X-Received: by 2002:a05:6000:22c4:b0:431:9f1:e4c7 with SMTP id ffacd0b85a97d-4324e4c9d76mr12946406f8f.21.1766416495549; Mon, 22 Dec 2025 07:14:55 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:55 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:33 +0000 Subject: [PATCH v4 08/14] 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: <20251222-james-perf-config-bits-v4-8-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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. Reviewed-by: Ian Rogers 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 1f6e2213326d..c8f2962a06c7 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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 63113327C10 for ; Mon, 22 Dec 2025 15:14:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416500; cv=none; b=jAIaWw7mARyv6MAO0tuGyR4GB6WD201APVSTQ2u8xk5MmRQtUWuIV7RkFiqVM/Mm9fkFyXchUsPvjox0e9apENRhJIbCTyK8THqT05Is2GSs0ynA1PH1v8g78cflEJSId/uqW0oIZtX4Ulr67t7iHY70Ikq3gBV6+QDhcJ6oxK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416500; c=relaxed/simple; bh=LQArxmrJrNZZsUxSMnAWJcE4cLQNPPNILpLMGRQk8pU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bf0HOOlc1QfBUnuK4jp+NPjoEoFBNp5l9/AJz1dmoYZNsY/tEVU2un4wqN+PM9wpag9gEtX2YsMpg2iw2azpdhA6pla+I26qtRAYT5U3gn9cO7MdSrBzyEX1olTDJX8+3UC4dXSvcS7AFJ69tK/oXkV/B6KZqOgHYWB2pK50IXc= 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=ldhyMf85; arc=none smtp.client-ip=209.85.221.53 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="ldhyMf85" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-431048c4068so2290803f8f.1 for ; Mon, 22 Dec 2025 07:14:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416497; x=1767021297; 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=i4eLrNTmJYNZqrOFXMkgnCrs/v9XFpKSoUUWAD+1qM0=; b=ldhyMf85C+ZDf74tOdg2TS42KCRk2rGngkOCR+jlOC4p/7ej8M2TgifKWPcbD9HpMi n6u2Esh9SzvSMQpefMYWn5UU6+tEtc0O57mxK530gdXSw2pM3fCtRVS1aI9nsSDVnOvu O9PILaA/TgQSeesCYBNVfi6FCGjcetvyARNzM/KKkXnyldiE2cRLm64p/51I+WaDg2vN xyadmJ4XdjOtqgnsMB8vqEGMqrQQmdyjyaD2lj8EOEQddB5SYmBmVew7b5QhHZyG09JK vYDSn6BP4pkfOH/kYOZj8NTIj0ljJUtmPGfT6xW5nq1/ALTjfwzEPeNfM7jZLrEWRxpD CpFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416497; x=1767021297; 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=i4eLrNTmJYNZqrOFXMkgnCrs/v9XFpKSoUUWAD+1qM0=; b=Z1QWsZxv5EgQAX+UHoZ3WNDGRdDBYD+Brnl5nnrdYqwu7MCUJef2ITp3E9e0ZaBv2o P9yZov3X3fnLKZyCx/45Y+Ty20TDXs6QYhqZ3j1+HSIDDKONv+Ex8jHb439serhCCCTw XBPKJr6qEA8CfgVIoxEbPm23FKNJIr/TO83mJu2f2xQQ5d73bmWNlxbJyEnzwjQv+U6F BBkp8Am9Zn8FJ43Ql8MSsbo+IKDZ3ncMq9INvHvXeCbKDYf7OXUF7chf1bH0kb8F2qOd YtO3jaMcWioiqaooEfRFmvuPir9CVhJCnGgG/hC0xLIsrZavch04vl+fRKeYXukAl4XO 8BMA== X-Forwarded-Encrypted: i=1; AJvYcCUQO/mxAYc+GF8uRvhee+cLxyD6kICncxumkyhg+EvlI3GG7QHRt1ZLQdve+DjylBaP0jrM33YoCGF/57g=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3erWTlGcog4oMQkMCho2aXbluU1Ldsvo1I9gQ+fjpQV+CGxJu +Rxz1/VbhEj5+cc7Mbif64KjngbLyI6yxLBo7ARUJ3hJnEYj+NxemN7aurg6SXs/QhQ= X-Gm-Gg: AY/fxX68ozaYMRlp4Co9DohZjXOKMlEnZ2SpO4+e/o8Q5qG3xMpkgKfsCkf8tnMRS9t LTW5Se93c+GcMyAcdskjYY8OUUTWNvm7yE8Vxcj2WkZ5dht6qgZ+t+ZQpIys6a4CNInzi7e5mId TldJ2JdMswj8KV3hdGtEjI2gHi05f6SE05IQ9HORYCqtzU06mbYo39TDwPVT2FlmXIcMraDIYNc 1buT9+ttUTcABiW3jSM/kr/CJW1lHk+7OuxR0B6Invg5RppdRUmBfDPIzu3lyJFHQDCUxpaC0Xq UeA5E5gphrcGZPEnRtGDON5Fykh6NJffMIZR6XIhTAFxc0wTO0LtJxK/AO8V7H1K1EeQZjXjg5V pNL257r+a2XJ4Lk7xIMvnwS3aKgax3tkw1x2BpLQIWtgfiMQfYN8OhKtB7fBcFz7iTQpcsQpdxl IS9ClzkFhaEdPkWJWJNtHc X-Google-Smtp-Source: AGHT+IEX38PKZ1aYnAoijx5riCeANgTFac47kzzgBW07ko1Xcrdxsb2Y6X78FNQXCIfizNz2p3XEYg== X-Received: by 2002:a05:6000:18a8:b0:430:f16b:d8cc with SMTP id ffacd0b85a97d-43244795353mr17080981f8f.3.1766416496632; Mon, 22 Dec 2025 07:14:56 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:56 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:34 +0000 Subject: [PATCH v4 09/14] 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: <20251222-james-perf-config-bits-v4-9-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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. Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/tests/pmu.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 91 insertions(+) diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c index cbded2c6faa4..0ebf2d7b2cb4 100644 --- a/tools/perf/tests/pmu.c +++ b/tools/perf/tests/pmu.c @@ -192,12 +192,102 @@ 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; + } + + 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(evsel, "krava01", 16); + evsel__get_config_val(evsel, "krava01", &val); + TEST_ASSERT_EQUAL("krava01 overwritten", (int) val, (15 & 0b11)); + + evsel__set_config_if_unset(evsel, "krava11", 45); + evsel__get_config_val(evsel, "krava11", &val); + TEST_ASSERT_EQUAL("krava11 overwritten", (int) val, (27 | (4 << 1))); + + evsel__set_config_if_unset(evsel, "krava02", 32); + evsel__get_config_val(evsel, "krava02", &val); + TEST_ASSERT_EQUAL("krava02 overwritten", (int) val, 170); + + evsel__set_config_if_unset(evsel, "krava03", 0); + evsel__get_config_val(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(evsel, "krava13", 5); + evsel__get_config_val(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(evsel, "krava21", 13905); + evsel__get_config_val(evsel, "krava21", &val); + TEST_ASSERT_EQUAL("krava21 not overwritten", (int) val, 13905); + + evsel__set_config_if_unset(evsel, "krava22", 11); + evsel__get_config_val(evsel, "krava22", &val); + TEST_ASSERT_EQUAL("krava22 not overwritten", (int) val, 11); =20 + evsel__set_config_if_unset(evsel, "krava23", 0); + evsel__get_config_val(evsel, "krava23", &val); + TEST_ASSERT_EQUAL("krava23 not overwritten", (int) val, 0); ret =3D TEST_OK; err_out: parse_events_terms__exit(&terms); + evlist__delete(evlist); test_pmu_put(dir, pmu); return ret; } @@ -539,6 +629,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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 72CE0327BF0 for ; Mon, 22 Dec 2025 15:14:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416501; cv=none; b=YrVq1MZ6vwyAbbdOvuWvaeG0GYf1ey+ykQoDEgBPEHKv/M4AeN9+IJyi/YgiolPcFUGF73h+27n+hsIqUlKjmv+BVUfQSZfWtlB9CZU0yEcq0qVm1rHE+y9UWYEf9fw/h4UUoPGHyoM06nVx6HdbApUjoZVksgmCDQuFb7vuToU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416501; c=relaxed/simple; bh=xdhUjHRtxvw8BCDXCGf/XHbPNrOY6/jThaBJXsuN6Oo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X0JQJNV5MLeoy4zFlEdassEe4eOnnrRXOtcidW+JDeDUFwGOg04TRqNap3hVu3/6l29Ai0tv+5HP33qHJjGbVKmjhrvIguKviu6oTKk6SV43Arxlb+x6FSWs6Djio5mhlOgkkDcbW11skLUqstMM4A+cYdV5fDcyWHZxZeTF/g8= 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=siWAE+V/; arc=none smtp.client-ip=209.85.221.52 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="siWAE+V/" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-430f3ef2d37so3050242f8f.3 for ; Mon, 22 Dec 2025 07:14:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416498; x=1767021298; 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=IHuJ8xIDoo5vqekEsW8kb8XOXUQ7JU8mQQu2ivsjyMg=; b=siWAE+V/v5GvaMEeqwEkt+HuWxoaR0iVPjhbdkP0Z4yfDqzcUcKUbCNSNALARLi6RD 2OFRGoTwl3Pu5JkEez/yuUJpvESkircXWgDoNIHWyzZFc1h8JZLZn8GQRcE2KDRUbHnR tudON2pA2/vNXelpWTJ/5SXO3fcYoSN41r61cn8ZPX7W44r+sdf1pxxYjGKON3YnlAhN 2zsU0hkqt3ebzJlkXBtWkOkSX/ho9EIXHrFVtMtti+vKyJ/oHsDpds6ppBwmmi/xPZpL 2qYtBMPvtHL3nnjLkodSs390szRlUv+hXdJ16XnnNgjpKucNNiqP/qHnXxd2q50/KkNU 2BuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416498; x=1767021298; 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=IHuJ8xIDoo5vqekEsW8kb8XOXUQ7JU8mQQu2ivsjyMg=; b=JxRMW9QN7tSIDSNrr3YvptwBLPf0UvZy8lOJA2k+fYf7Y3iFpqPb9+xCCJb56y6zZX 5PFL6HWai+OfF9l9lzRXxsVKJ+IRReyNCknEFu9ADz1pjgGag5xAsGbhLnk9lv/1zSj3 CDY3Ygp6JAVL6VIIPtp+tSNNpPsj3KlfH1dVuEQYy8t2B58cRmS/A3sAHJysxLYrZ0kV tzo3uYk9dWt/zjMFzXrjt+syvsM4KQsPdlAZzjEwzQ7O9iAH5cfHOX/NoOOJbZiCQWr7 tHdyY8sanpLRYnCjKD1o22aDTV7+PHiw1yiKo9+bJXZDEkmLhosVGqhBIFlKMdpyEchk xtqQ== X-Forwarded-Encrypted: i=1; AJvYcCU8OraumIncy3EBA45RLGh0AWJKdb3387vFv7o1khCh0fQkXBErLCF3IKAByJgTtIhB0DyXySFpewd9w7M=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7CDMZdQhPRUhzgaz+q2ggYwqtJhWfto98VIIm2cprh2gnwn2L /OMP+tcwSYqbL6U1cUhR1VLSLVOfXeqbugv+RiaRpucemnrriuR7iDupCp6TKTeTKdQ= X-Gm-Gg: AY/fxX5lNDLZBDG36H1mBPeYtJM3Bl+YT4y/cpZiJ2p7bhULCoz2Zm/dCnFVAtNfrFD 013QO7xFzV0R3uXkrcbVvFLn9+XonQq1lc2ReZepnurf2VSgL/2mj7M8f+rpQZWSiGk6oV8yvdv udbEY45T7VkQeIUY9nC//lt+Suk/51uv6rjsYORmalsdKT0S+BFa4SpKx20xhXrKZvBEMOlFYdx M+jIScTJoU9AYhJjdgN0HCoJTJn1cuFfyW4FLLKDFVPwVZboECZ83mPbtM0zqM0lYdDGQ8BlrUY Hl1d+nraZnA+OxwqiQBXkqwF7JtPgA9hoJ7NM+1WTNUNp24Cn62BE2EHUJBgNhaGxygfB92U29U P1zBScTIb/83UU69OBk9a95RCTRFnJWGdeY6WsVZ/N3P5M9BZQDfUptrHIuaCyjzoWFF7aEe/TG up8+L1GW5sqWZ/V4KTZhW/ X-Google-Smtp-Source: AGHT+IGRZvc9aknIZPTTtyXV/B0ua6X8t/YbFs3N1GKO4vbSwiO8gsbcX+wj/sriPf9bBic/0iVCfA== X-Received: by 2002:a05:6000:2c01:b0:431:92e:1d44 with SMTP id ffacd0b85a97d-4324e4cbc63mr11599219f8f.20.1766416497736; Mon, 22 Dec 2025 07:14:57 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:57 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:35 +0000 Subject: [PATCH v4 10/14] 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: <20251222-james-perf-config-bits-v4-10-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, Leo Yan , 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 Reviewed-by: Ian Rogers 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 c28208361d91..a49753f0d20f 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) @@ -473,29 +486,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 @@ -829,12 +834,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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) (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 873D532C301 for ; Mon, 22 Dec 2025 15:15:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416502; cv=none; b=q2PzDXxpChWbICI4bJhyCeNfELd7h8MuIJNWparpDahEnvw/e2ACTXHJO5+khSWJ0yHtLoZ5M3C22V0rUBkz1kCTjgsDJicyvv3HS4yaUVRdA9j7UiYCp0a8ZRAO/PxEH2JVgs5s7Odp2Lea+Rsy2nYWZHfy78BmkJE25NcDDO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416502; c=relaxed/simple; bh=IlGWCJT2qBGC3XXCJRsXxYfQz51Y104FxCfSOx1WSLU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aJXVRYtFg6Px/JE47kBdEZdym68PiOghNOskUBDTYLtfzn0AwPiMgRPeWy1hVlZb02VoHybQkCm36V/G3Q8qM6nv3rRLiav/wPYP08KgP8B0fiM6Zl6rSH8dmjM83qt6xE4jaUoAQ4n8zIetCGMn8EtxKFf/yTHuiKAUXjP202Y= 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=DlAIWigB; arc=none smtp.client-ip=209.85.221.65 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="DlAIWigB" Received: by mail-wr1-f65.google.com with SMTP id ffacd0b85a97d-42fb4eeb482so2064953f8f.0 for ; Mon, 22 Dec 2025 07:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416499; x=1767021299; 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=eIFLeU/rZDWgQfxqeduMgDTr6BnNNm0nr5ZzvbheRLg=; b=DlAIWigBu9MPEJJzMjgN3e6gqAd4lY1P6/Xa+Upt8slPh7i1T6wCBq/JtYsEOqypSA 5soyxmWwxJxmErHxmpsYJwhNobvMDa3jdWK3vz/mpeNtF/PjIStpJoyBTQAvqOo0vlji rBCw4au6TQswZPcxVmnhDaOXAH50eoJEX99W6GSBcSD13MmITs5Bamd670yvSjSAow6G hqYVLzATB/+jPMtuF2588OFaGkcvRggGb8MfVeDpbX+vyIQEoaLdg3RQU0y6Eclx3sLw mBKk2Vr7s+rUcdHhIvYEfm7Arf9Vnis/rOafmPYs5EaIrhqex6pfDI3PHA3TdWuSL/fk 6pZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416499; x=1767021299; 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=eIFLeU/rZDWgQfxqeduMgDTr6BnNNm0nr5ZzvbheRLg=; b=b/LVpR9TuhzPl6Zo7VEm3fYIJObgpgYykwwXL48Ig2FwyZ7bdu0R+R5kJIp7s//wj4 2ohMkEr1BKGe8U2ZWABsibvaIFEQC7TMvAqA5W5U+NKJF5fgz8B80UFlsttiKwN+AuoF E1vJagJkC9VamfslssnpeOXqrdhGqXupxOnAkwkN1XnJehEQJoFXQFAHi+avvCtdAz8K sGDfwM56/v3UWpUXATNgjcy8mvtIxsM4oZW0dZC7GYcOpc43cfuLj5PbpK7xJG37gI9R jhmC8pMz2dTRJXiv+otuBDgnlepR+D3H/c7WTH+y35XLNpbq7YAy+G4sanCa+9iduuPh 07xg== X-Forwarded-Encrypted: i=1; AJvYcCVrmLx/XGMg/KYfBhmsiT59iR+XLOM9EKwc6uPVm/G+CAj9qPMZf2QDTZ4xvvaAp69vhSFXo11pG6LB32c=@vger.kernel.org X-Gm-Message-State: AOJu0YxUK0Y7RqvVHbpC05Zf2Pl1zLnqxxtBcgQV+c+Fiu+w+TlR7XTY LCoYaz6OL5jkbTZk2f86d55mJRvQXOapqs8f3knw/HrvkvCPljAr+OdDFoD7k+xo2eo= X-Gm-Gg: AY/fxX4gutNbUASfdE13x6taVnIohlOp2k9ikoLP5G0glqyP1HrjNCInMMRUXubSH/G lud0xZ2dLnGMO39p7lwik1/yt6W9PMM8upPeWhlJ6gNI2leKYOLrhgINLvxEfN/xysdjlHOZ4X4 w5PmpfdxFRgRxrVDTuEnOSmElw0AA1AHFAMs4x3jqNI21EWOaoKETjasJhKduqjn4tgvbgNTzhL FGtXWzgsNRoajJgi9ayZETtTAND2ptb/woKiRr80eDKeMrFOOyZBkwCsgDhYp60BQEB3Yd2nqWU GRpD/7IxDoRcOe05mQJvZXylm9j+XOtCBuAFI8hD/0TLDH4MGFjdC5pco+I0jGBzImoF2CvdodZ Jc57nBRaefuDonM/gQ6W56lQg0nCQNim8EVxS58QIQ4OfZyAwderE16ZPrCyHUXgIjpuuMZoQAJ SvlalY5L+RZnjjnpMvDpJy X-Google-Smtp-Source: AGHT+IFsoNIU0EBEL2Gy8nEZDRr2zOvkFn21BezY9JDZ5LUC88dlX4X1p9ulUl+LSAp548pvzltUbQ== X-Received: by 2002:a05:6000:2387:b0:430:fdfc:7dde with SMTP id ffacd0b85a97d-4324e4fabe8mr11530837f8f.36.1766416498814; Mon, 22 Dec 2025 07:14:58 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:58 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:36 +0000 Subject: [PATCH v4 11/14] 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: <20251222-james-perf-config-bits-v4-11-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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/ Reviewed-by: Ian Rogers 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 a49753f0d20f..f535027ce862 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); @@ -484,6 +490,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(evsel, "cycacc", &val) && val) + etmcr |=3D ETMCR_CYC_ACC; + if (!evsel__get_config_val(evsel, "timestamp", &val) && val) + etmcr |=3D ETMCR_TIMESTAMP_EN; + if (!evsel__get_config_val(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 @@ -743,7 +776,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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) (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 10C07329E69 for ; Mon, 22 Dec 2025 15:15:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416504; cv=none; b=Ul/oVyfbywvp8LJsUen5ExhqDbxHJ0KBO5ai4qKAedmHd3ArKvKUSLT73e5OLsd+mGIURYOJs3OpRX47WAWQHHU7gdwJ6ACo7XDmdcVeDpJqIR3cTtjQS+sG0aAOdtcynPHxaUEaa2ONGog4VmpGId2X5Tfskf93HF1luxTkuJI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416504; c=relaxed/simple; bh=Yn4z8inxk4Yu0wDEan+xH+yZELLyctFmTteyMjKe+Vc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mr4Mwb5Z/pXLcH4o6kw7nhqIm08HTmUF3M1ihaXtsePQlh3lEac3ixPsPm8eiNsaJmSIEWSXrMmjV60S3c7GSYx5Xf8XncVtQPz2MZom1SkdP3sbioF9A6TB2UYhfUHi2hhnfeEO9zuDPg0E30YDt9bzmZUScVAtU9FgCn3ovJM= 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=U1XH6R5u; arc=none smtp.client-ip=209.85.221.66 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="U1XH6R5u" Received: by mail-wr1-f66.google.com with SMTP id ffacd0b85a97d-42fed090e5fso1911935f8f.1 for ; Mon, 22 Dec 2025 07:15:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416500; x=1767021300; 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=RFlRacjoMKjxtVCuFA3rtMsDNUnCiwPHWXGI0rppnjk=; b=U1XH6R5unBVryP29uMZdzGAZkaX6s1QTYaWdlChAlOmiM1gpkt1dEVI7RpCgBz76Cb jmELjgV5lLOpD7+9ncAtpUUF3JdAaNa2ZGQbQX/wOhnlankOMN49uW02zNTomV2IB8lf Rid0mENNRrHZz1wmIGmuYGwdrhw05+YnfOznHn191vCToggrfAsg/6+qGr2ybcwtuzZ/ NXumSbLROrqmMphaVQXEFGXnJYy5ZSJex4RsGMXJ5jEWshCp7YEg2h7nC4HvgSCCU/Z2 C/JnWZYRsNM1/gkh5MKLCAP6oKHbgGO1SP4kUtHzjCzX6djDsgGWMCMdHAjpt+7e7IWm yAsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416500; x=1767021300; 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=RFlRacjoMKjxtVCuFA3rtMsDNUnCiwPHWXGI0rppnjk=; b=WnbXnHt6fZhd3EQ7kjJZq6iBGFHcvZpN7C7BKNkE4a0Zl00a+xhacNRK65KvRtB78r FfcoaQTngYxbxMam0BfHUYgj9YNNKhg/goC8SkS2QH4raWd8ktEF9mbq+O6UBFqNH+Qe /dfxcg6v28atLBDBcFkZoMfliRdiygOZHOLegP16EmnhN1gliIJMV86x6vD5aBNdkC9e 1ki/8+dS0Wqklq45vl6DYQMR93xEPG3OhWCtXrImHM/MgWEo0o+V6eRC7YkqBj4iEU1h VUtpQNvymbPCPAl5kwVK0E7PWMRidIRZs/D++9Iogif/Ap0WTnvtF3v+DbdP8SzF7y5n HMvg== X-Forwarded-Encrypted: i=1; AJvYcCWm/P6tvgYUVMbIE7ikODVAssofjQaIJxlCN8xsvISIWedzuXYku9GEmpy/fIzIVaU4AU3FqKvhZI1x3N8=@vger.kernel.org X-Gm-Message-State: AOJu0YyYj8MVImRTVmNByNU5TnByzTsOuNDZcbTfghTyRd6OMf9ZwEZV btXzJoIByHNtf3n4WjNoSXymvUxFbMycxRjflOUx+UkipzrGEbYMpBLP9b1RMt9/ssw= X-Gm-Gg: AY/fxX64Cro48yoArgF8wosBkRFBnqhinb0S+Zz3ymEyA9l/Z6AagWrIZxLH/sU7oXQ DcK/+iOaBItiB77hk+LLP3iLY2vB0z97/ZuWhzy2mh7RoNb7cKNn4pfOj094B//QayHihKjJ8Sw GtaT05X+dcoc91QK8O0vICgzulvokE+9+447a5KNO3n8/IrIWH5DqVygJnEJ1GS5Qq8fCpAXSiZ sVwW/w2Z28zbX6YWX8a+rKYvvNAty0TIXBknuOfdibqzI5N1v8aAwL8zlOeSIw19hjSYN58neCf cnfCljAoiUUAg4v/B21aVlXlKn1AdTX6sxxyqrx14lpSUSvShMoazoFuZm9XuffpIVkYR+Gp3fJ N0BqvWs8vV/vLyTybpTJWsRoNba6FGGNmvPsZ0SZxQ+rKJoimOb/TlxiX38le0Hx9Y7D3jvcjdF fxf1uv4EVpWw38VUtSGVSk X-Google-Smtp-Source: AGHT+IEPUJNPy274HZi+qkvi/OeAVZd7MGQfUITqEL+CFL0dU4WibIBI9+G5uNVA8U0GZWyYh6O1PQ== X-Received: by 2002:a05:6000:2881:b0:430:96bd:411b with SMTP id ffacd0b85a97d-4324e70111dmr11870001f8f.58.1766416499926; Mon, 22 Dec 2025 07:14:59 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.14.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:14:59 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:37 +0000 Subject: [PATCH v4 12/14] 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: <20251222-james-perf-config-bits-v4-12-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, Leo Yan , 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 Reviewed-by: Ian Rogers 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 f535027ce862..12b28562c2f3 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) @@ -517,56 +525,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(evsel, "cycacc", &val) && val) + trcconfigr |=3D TRCCONFIGR_CCI; + if (!evsel__get_config_val(evsel, "contextid1", &val) && val) + trcconfigr |=3D TRCCONFIGR_CID; + if (!evsel__get_config_val(evsel, "timestamp", &val) && val) + trcconfigr |=3D TRCCONFIGR_TS; + if (!evsel__get_config_val(evsel, "retstack", &val) && val) + trcconfigr |=3D TRCCONFIGR_RS; + if (!evsel__get_config_val(evsel, "contextid2", &val) && val) + trcconfigr |=3D TRCCONFIGR_VMID | TRCCONFIGR_VMIDOPT; + if (!evsel__get_config_val(evsel, "branch_broadcast", &val) && val) + trcconfigr |=3D TRCCONFIGR_BB; + + return trcconfigr; } =20 static size_t @@ -688,7 +677,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 @@ -720,7 +709,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 Sun Feb 8 23:41:42 2026 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 0293132D42A for ; Mon, 22 Dec 2025 15:15:02 +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=1766416505; cv=none; b=c6f4fvMhdV02feQ9dvXpC3y1QEw7c5qgug5UE2/Gj8rjpgUWwksXJzeH1BwckUz4U3WjSkqcd6+bn0FwCFPKmq7CjSoxKofBgt4zAle1onBz0Fx3a8vrgz9gH5QpYpgyCcZacXVnMgBdlYjsCijKwqCP4s4SByLowRt6qdBKAGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416505; c=relaxed/simple; bh=h3UUZ+MTt/jVXlppiWB5dfmCDIA0ulaZv1PvNfguK3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bjp46feDgf+yExRMJt1Zg8hlvptObqARm99UL9MJZEQGSeyzC96tllDgoQQIpJEtzy6KIXFvn4uvD17ihfGal7RfKbdLr3ZzpKCqsvJz2b4qiJ9J19qx5sMYMwR9XLA7JCQDuBrVrCQHo9AtH0EetGn/QBPFgC7YACU7Mq6+zxY= 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=MzBFVU05; 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="MzBFVU05" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4775895d69cso17148335e9.0 for ; Mon, 22 Dec 2025 07:15:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416501; x=1767021301; 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=NZnllZdyzmPDgDLg3NsetnXCFaQjqpO0nxPQg2XzMvs=; b=MzBFVU05D6D/g+Q83JgxRQ0ZOKgR9Je37QeEw4PHGd1yheqHuOZ9BkGD4BB4/UlMio GPj1Zz91Q5WyAWFRbjsiKcy8GXUt0/fYniGe4t1a1wAEi0ydpFSZnEcma8Q7Oy5povay 57Ky//7qEgDjqyrrAIzAH3Z0StsYMonk9sRUTuf8BQRVUhm2r8L9UUtCbDP7d0Mu72Lq fBiWwmjN4yecf9aP+n0n7iD9vv+1OGxcjT8NAjv331X9PFPMd3ve1TJ4pjEhJilRayI4 nG0f6Fy1IGA+bUD1sPZstB/BKGQEYbYizemd9Z4ptM+ZLAVNpPkki8/MN+uJuLbPr3Jj kn7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416501; x=1767021301; 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=NZnllZdyzmPDgDLg3NsetnXCFaQjqpO0nxPQg2XzMvs=; b=ZB1YeWLW3fqLfFd6Kzyz0y3lEGh/0xUTGlxyqtaVUVt27JDTDd3lXZTzqOI8dei55w GbX6pYYQ+PcqvL2UDiqrtcAMIVeC1HYSI+/9/e7jjeWj+Zb0sQah6tPG0RWyJr4tN/Xe fJ6iSYIzP/SMwN+kg/d5wKv72foBVP80H2TCHYSUtzt9eZJ3sGOintKVjFc9Ng7MOlNh 2OQxbnzozkFfA94GQBvGqVUsMH2F8q2RZEoUzTgboiUPU3tGik7Vvz04tDo6yQIkUa+A 0X1D4FNWcIebjkIVaphPCSKh7DdnwMySahlOig6LWeIixmt/FUsX/9hRNzsCAxvmfgno E2mQ== X-Forwarded-Encrypted: i=1; AJvYcCUmUPb1PDiQtE0l32CwkCF5znAUioDvuEZu4iWsYIdnCLhGCqVKdh5WmXPxh5qbYgZegbs8Dgeg/ddjJPA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzqa46xSAhYcprliKZMjinV5Y+SCfi0nBvUYElfgLPLK2/xivGS L27GU7NTzdcBkV9yi3Payqu6+njZ7BlFDHPopuNBhmxlv5Ij694kRFkGzs7ELh+LpWU= X-Gm-Gg: AY/fxX77LqCKhC3jxMo/WyUD6tbgJ/l78ppkSdXHrGSvD+wH8IN+03xHS3o7I4G490w t9irQrjttdKf0cizKsMVJEM1z5XfclLxxw5MyNTPLdnWW4rkShuYsy3PpSSoNnGiUWmTNVurs5f aBhP6qUTzSKL4mkapWh7/F9ik0qr//FNz3P4eJzed2YvwIfrARYQP/krcsvxNT1PsW2VmJUxhW+ Q0uyrU0eooTc5iVKBLQAaRnL8NCvF1qO80QZVwjcZD7wAKTUhc9JIUEYh1p8JFHXb/ta+nxJFzS Eauk43vvrkZ0UZhy0DPrumG7mflivlrV/KuYGty3v+xpOyok9e+w6ssSeFB01xLNEnxSGlgrTa4 2nbBtiwUfJ0mSYdNJfe05QZ/a+UB8vxAzq2w7acJUOTixk1ho3YqLePtUBv0YHnH7y/+eZhcnot 7euiJS+6vtgapDjuhL11HI X-Google-Smtp-Source: AGHT+IGJQxCV50ScDAMUPbUoVuouEnRfEx1ZAS/DBqZ58QgrzRh+YFP0A0+P2e7M/HVXKXG4s2eScA== X-Received: by 2002:a05:6000:144f:b0:430:feb3:f5bb with SMTP id ffacd0b85a97d-4324e715af9mr13951920f8f.60.1766416501000; Mon, 22 Dec 2025 07:15:01 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.15.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:15:00 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:38 +0000 Subject: [PATCH v4 13/14] 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: <20251222-james-perf-config-bits-v4-13-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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(). Reviewed-by: Ian Rogers Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 56 +++++++++++++++++++----------------= ---- 1 file changed, 27 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 12b28562c2f3..dc3f4e86b075 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(evsel, "contextid", &ctxt); + evsel__get_config_val(evsel, "contextid1", &ctxt1); + evsel__get_config_val(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(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,19 @@ static int cs_etm_parse_snapshot_options(struct auxtr= ace_record *itr, return 0; } =20 +/* + * If the sink name format "@sink_name" is used, lookup the sink by name t= o convert 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 wil= l 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 +307,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(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 Sun Feb 8 23:41:42 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 DE09332AAD4 for ; Mon, 22 Dec 2025 15:15:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416506; cv=none; b=E9+QZydgfFs64bfBo2RzICeABfbAhtakTWxB+vDg2I4ApTdQmrM93O8wLb+mm1o/gxW/1v0EQ+9kt1t1ifqq5gicwZUzO2cEQOMhWICMEtSoazF2AvXGi+EK7oyFfsf3oehB/hXbC/j2PN8Qdfq2/W3SAboPT0wW2sA1TBs8+0Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766416506; c=relaxed/simple; bh=qfRSou8Gjtk8a4ox+K4x5qRrVK3aLa89yRlL85yDPKk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DH7XlLeq99btY9JvDlvWlMPWMvywcAGClWRZkpjzCeYe9AEGiJRF6xkAxklkBQA1kfnLrXTs4+mhMNI7ORHJdjMwj7iCuppQ14IYNNmREw+CYZp6XoZBTYD0J4/YB2T76eA68zL6rRf1o5ryHbsm/5FbQgPHxQzKi14EFBxmMFo= 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=kc2GUwWL; arc=none smtp.client-ip=209.85.221.52 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="kc2GUwWL" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-42b3d7c1321so2413487f8f.3 for ; Mon, 22 Dec 2025 07:15:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1766416502; x=1767021302; 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=2jQ8W5nzp73oSPJlX5Jug7ze2sl2RQ53Mf0/SiitI2Y=; b=kc2GUwWLXZYOjYQ76X4inM8w3ZOmIxmQX9cVKFLkweq/Eb/t54vobLaPw19FVbyvwZ LdsXK+GrZfi8LltCFAoyPOGcwKnS3BGVJZq6SGppvoHGOzHX7W+upgNM9e9UsZswdpMS INcVEa8VKcbMFzqfD44BYLFqfZcrtU/Vp3bSXcWXoF5MbFeuiGQoePR0PQcl46geBcUu Nim5aNslJlD8aPE2exkcWpdFKp8QN13+rHFqN24npDy/vhaVs1hIFQBWktaYabfRDRv4 kS0lKRiwAovwSgAAh61XAtUiF9wS7DXUIOKVXzDjc/ENyXiivM38dAXB6Qc4pr/fXEkg sYZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766416502; x=1767021302; 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=2jQ8W5nzp73oSPJlX5Jug7ze2sl2RQ53Mf0/SiitI2Y=; b=ARigx9D57ztddtIv3wK0Ygn4CbMgC4iZzfyOgskSMeHZ1h4nj4QSwAisj8+yXL++BZ VoQlvKQu8ze0wYeUBXGjUFxnFw4NE3THlf5wEUJPrRHyvT+Hq9Jlr57aoSgaU7H77n1f HKbUo9PDwMtWLjRB9iwxMCyA+1YlB/PsUigU0Ed5ZPVHGPC1JfH4uDAbk8Aj9UHbuIBb Z2qTNWtyM6mi4NYVHhFNTbWR3op4rVN7Hcd/QvnT+4Dw0aJ3Ow0MjnK673f7WGCkhltJ hIQ4hCLX5HRsI4Gw4zTsZp3RY1Y1kLwVT1o/X0JhonQT20uQkgohaF8ojrVPcEWZSBxH pxuQ== X-Forwarded-Encrypted: i=1; AJvYcCUsb/qFj1pNEy2Xo6b96Anz2HGJwgylNbezCRc9R2Uw7w/oNL+7IObKPGbs7VpBtb+XJ2LRk5f8CPRGHsA=@vger.kernel.org X-Gm-Message-State: AOJu0YzMQAoRO1OX4Gl+RHHJUnTyLjp9y8byT6La+5oTywG1Bksf9mBt dHLOfAdKHTb56b2BR4b096SwXDDBw4iIuGeeMDFF9QQrrGCVfd6JJLidMkH6cmEQm10= X-Gm-Gg: AY/fxX7P7LZcm/0rMrz1vm6nIbExDYpw/4zWdpNpfFzuKfxCs5joyo6y8Y2VKs8FXrA Vb5p34kZgb+rv6VcT9mUm3MucqvmLJ3rrWOZ6m2TmdRk9g3num319aaNnU53LGA/eFVz0UEY7sn OLHUzoQq9tpqGCkTCKHFgmET9JQTzUSCcfuvqvkks/pNleE6Nxn+J8/VAGRGwGljowccs0tFJr5 W7vZmQ0wpB51aZ3CBHLk42iXt967xsNVH6Jci9olnRR/XrdNl7vEOXfiatjE2MpESThbAnHEw0h 8wpgu2nSOP/rlktjplkYj9wVwunv8x1GRW4xbmyLszUtZcQY0Q5AY2QnSRcyZhR+ctQUagUOUqS xM6vyah/VdS2EWUe2nFbp7XnfubYR6bxi08x9bALoNgOz4+rJbq7qBJ6e17LmK14sSPxWvur7fC mVfdR2FED1SPW4rexeL11A X-Google-Smtp-Source: AGHT+IGVW2AQoFnt+YQeUkk1+45K7c9zrckQIjMupb2A7/EyJF6AN1n+ruma4tqVGKfvSqChhpvFvg== X-Received: by 2002:a05:6000:22c9:b0:430:f72e:c998 with SMTP id ffacd0b85a97d-4324e51081bmr14459005f8f.51.1766416502023; Mon, 22 Dec 2025 07:15:02 -0800 (PST) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea830fesm22750093f8f.20.2025.12.22.07.15.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 07:15:01 -0800 (PST) From: James Clark Date: Mon, 22 Dec 2025 15:14:39 +0000 Subject: [PATCH v4 14/14] 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: <20251222-james-perf-config-bits-v4-14-0608438186fc@linaro.org> References: <20251222-james-perf-config-bits-v4-0-0608438186fc@linaro.org> In-Reply-To: <20251222-james-perf-config-bits-v4-0-0608438186fc@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 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". Reviewed-by: Ian Rogers 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 51014f8bff97..17ced7bbbdda 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, "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, "discard", &discard_bit)) + discard =3D !!discard_bit; } } =20 --=20 2.34.1