From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.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 29B0631770E for ; Fri, 12 Dec 2025 15:32:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553567; cv=none; b=U6OPqjyxesskNHmzAw2sToW/Ev3+8uXVtzNwSMJcAmBfPTSEVf9raxPoXc26I9p9cbVmRFgjDp2x02ZLnME+njB0ZkmNaov3J5/JdFZ9mi6ErIOzIWLAlhABDrupIp5LUk/eoor3HEdj/uw92r3H/7eY4l8IDWKe82xc724P5dQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553567; c=relaxed/simple; bh=ZX17Rkes7dkEtPsDUoS6OmWNz00dlWz49jtuaAUKFWU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gDCzVYgwgGyZxvgZDCQzxxDKf3oEHedv4IolYdgfMy0o/pDioz7aRIva5TcEh19PzdLXJJlIeuS8tkw9nwwe9dmqFsDkYByvNWGQChPtz8S+NIvOZ6GvwXJ5aLFmhKIGSxx5CASTc/9iwTyr8bwD3Gjlj0+YvgzhSuLSfCxT+/s= 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=L9n0WA6O; arc=none smtp.client-ip=209.85.208.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="L9n0WA6O" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-6492e78ce07so1794468a12.3 for ; Fri, 12 Dec 2025 07:32:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553563; x=1766158363; 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=n5ZLabgmBWGVHBvnREIfc+SWl2RRHRg5YFpCcVKIHms=; b=L9n0WA6Od6v4oV/okveXVOioavfEXZ/VJPb8IXMkz4Q6AoNfuY667EfeQQVCvU66Il uxyqrg8Ukh47sPkGSfUZlLawgTexg/lolie8lVv6Ol+0XLUOQHbVDUU9uWmtuWoj7ejJ tbmZNIrPfuJ7bSsab8308pc/jAVo+yYf7KxAODVW7ap2IPCVlLFaUVKzr8ltGYsGpafP fBSXPyUJ80L8lQLqqjvbEq0fQNY9HDYp8T1qwiFw5gB9bHDRJKthGo/guf75tcG6elMq kCxP6K5x7oT7iX76IqCGaYPCirHUbrxk+NAy4khmy2tZSskfjV+I8BjXDO9HOVDKES01 iBcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553563; x=1766158363; 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=n5ZLabgmBWGVHBvnREIfc+SWl2RRHRg5YFpCcVKIHms=; b=Tx74+tifmFRR1NSfwvfmt4KFIyd0wq12EQUfpbUNYh7rIb6tc4FwR8cqR8fU1NHQbr U8wx5GKuqxuqkQbD0GyogEuiO/sG/ovwFC7UhT5j0drJ6CWiKUfCcRe/hDtKthtdNjsP fVpMOHFEJY8FpNgW/PQm+AkknNRuIeYOeF0F4T2pjpYCBMiJHmBFFZMzToRry6TwP7iX ogFy1stVTStYrXUBLXvVzJCqs7SZ8DFJCHQRZMVr4JMxtkPoi0HISJyBNsGMizSsRC6K dQ+inSM+ZbVdcs9ACyRx2NTVflU9dppw7yT8i/HanUxiC+/6OW33tk6PW0TAkg6lFPk1 mUOg== X-Forwarded-Encrypted: i=1; AJvYcCXp26J9TiPbtU452p5QszKe6O6yF9+FZ9HLt4M/nZJMy6PuWJNGWXmOFhlFc2Z3ElIpdqteeqaXofglsao=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1ygvCpGCkojHzvFr9dX9bca3hdsLdLQz7+bEtNLHck4HtW5Tu igQEtPikUJ4bDim672CW5Oc7ol4+izDqd4hGjmhzlBGvJ88uqF5jswic8CNx83YIos4= X-Gm-Gg: AY/fxX5yB8PMxcI9Aw1ifowBEyMQ5I2UJ8Fq6cujVV5cQYFPJcBn5MsJKAz7jvBKEs8 06/zashC7ug+Dx1Mg5yoDnX96LiiTeDktGpzCJBN7b7/2AwatH6Uv6PKZcF9vyHF813XcNgwM4A a7PiSMyNBYV8mKT09hM6F59WMyM0q9hvDoQ6acPULOa0GuBhwvZcw32Tv7fTTHeJTSQ7M0YC6mw QAv1fsm8c/iaGvda5vUEiixEwRh3pTGYR6uoWnZ5Rqig/UfLtYzdedUwZH6qJeeAwEfdZUQ0r5y vv/xnXLw/Y1Hv6P5jjsGCiUGo7KjBEDpXeD/l6VhV4SbB905arECkSA6lW07T9OIm7X64cYFvEy HnC/jaV7qaB21qV/RyUKayysFtMblEkoYzJdoJI+EsziQQAQmmUCVpkjLy2LNByMhoFECQWoHdE cIL5LO5Gl/8874DQ3eUqSLCmn1+IrZAlo= X-Google-Smtp-Source: AGHT+IEqNbfSYkOtyXU7vPkI7qHD3gJ9+5d7AnSBhvsFB2ufQkU7DAINBVA90jbUKOQb02dY9d6XxQ== X-Received: by 2002:a05:6402:2083:10b0:649:aa77:5ec3 with SMTP id 4fb4d7f45d1cf-649aa775f32mr808892a12.18.1765553563242; Fri, 12 Dec 2025 07:32:43 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:42 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:18 +0200 Subject: [PATCH v3 01/12] perf parse-events: Refactor get_config_terms() to remove macros Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-1-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 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. 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 bcd3a978f0c415a8829d3fa37e9dd6bf664b39f2..685fd8d5c4a88fb8ae601ded60c= 1fc36dde73403 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 17c1c36a7bf9a3ec08812c4de700e3a3b3e547cc..46422286380f33a48087e7079a4= 5bb21beb2d573 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 Dec 14 06:34:18 2025 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A18F42F49FE for ; Fri, 12 Dec 2025 15:32:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553568; cv=none; b=RlUnGzG5IeS3DCXRg8Jl1x4g/mUKs654/tNTx7QFOHspPZJb+3Riu6D6yGujvVM+VKeCNReO6S6+Qc1EkYUvU6PWGcuqXb1sOzjJMc1dRSC07nA4MFTZwBH6KWcYuX4ctsl82F3IkR2q7uHpjXct1MdtCYUzrVQ5IiZCn3wmQk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553568; c=relaxed/simple; bh=wS+WoY5+pabDz6YhKsGblNEU9rEa6XiOUL5c9eS9Ybg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R6LTPM8HxXMWR2hqOKnz6zUtkBPdAQZXBivjKQrdQRtzN+rt2iNXWWkgabPAbq7OT+0ONEGWM0uwtwElyb9dMTFH2EyGBk1pSNQaVtrRpwla4bolQIilANib4zo8zeyngaL+xtQ0XvQ6EvkX/5bYe6hmKhNA4s/cwIEfXCqR2aA= 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=TUpMXsbR; arc=none smtp.client-ip=209.85.208.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="TUpMXsbR" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-64312565c10so2267293a12.2 for ; Fri, 12 Dec 2025 07:32:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553565; x=1766158365; 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=UfU6zNPFNxu9+V9/OLIYdA0tUQo18HdLl5yljJL+Q8o=; b=TUpMXsbR7CTH05ysiTFH/Hgh+tBf4Y3PfNWjwHOVXaRA6bbcACQOLZ8C2ALaXCSTbA s8SmbfBHeSmn2B+T0aTosQ816gMgcmLF8Y6wYf0DW+6Qa/n7qWvsHk/2ju2PtSlxSkDx WrljMVcwRh8lCEkPmTnyPBVo5DVzv9R7aguTZmJUMGAXr1K0OwjWpfFDljyY5k71v3Y3 zkA2PDOFzrDiC4CH6vKHbViMlh6DnDO9p+xcjeERt0ikT/J59sEjhDcGaGK8NSdrM4VR D2dj2LPjQYZh51o5sZjG23/BXgkcXqLopJlcby/EzmEIZKpbC0YRvj3qSIn5wfdr4KPg m80Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553565; x=1766158365; 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=UfU6zNPFNxu9+V9/OLIYdA0tUQo18HdLl5yljJL+Q8o=; b=ZCNiDQo+7XLRcJ2Uyrpaum7tOLL1+12vXbJQ6Q1CZmviNM3MXSnxulyyZVgOPkcEzw clOoL0pQcM2Ofqk+Rv2TDuyEZzTn1Gl39Y3lOIzyYYB6HXdyO60g8S1DiNoX9A/2fAHg NL4H71MGIacom/PnS5pavTaC+Nx+EXVHm3DFA1aM609x1Inz10bCGAlH2ZGyw5KClqQ2 6djZf/8vUvFvSgmguDLTK6u2zVa+28hiXLL04SV1eYWrYBkW8bV9nIHHmmnlaVQdUGwr 6cemuTwwQGH9QJiORWXVhaGXNA4o9UJJKL/7EwOxe/RnuS8J2OBCtZHvb80NXIv2H9Kf dP7w== X-Forwarded-Encrypted: i=1; AJvYcCVw1LehXRPcOVBkYl6lZ1IRpmnW0Ub7rrmoE3r2z3dUgyat2WH1RzCM+90aCjK4C7Qzo/Wnwj6crreSeN0=@vger.kernel.org X-Gm-Message-State: AOJu0Yzi9SFLkXUbBFrYLPm0TH5rlOHoq7Io16jl+2h/hbGyR9CsLMHn cMaeRjUBVIAzqQYGKip4iE+6mjKfrEpJwzpi4dwC/ZsQtv4BcwdO9m7eeSvm8CVYpK0= X-Gm-Gg: AY/fxX4VYk+bjn1tY3VWj1kJBgnCH2nA+8Fu9N7TwifJ78oZe3zhUJ9Dgr3tQ1OAYL+ WuIaotKwpUyEFXood6VohIe/ryWIfmMjYYjPLRk+UyzsJtLul7WzFoGfSdctc6nU9Ibt+tGkooH wJ+kQW2wiybNTn+45L0D1ZbVw+SVTWKXSMkVbN+Oi0K5K++BVZsFpFgkM4xEeIeX5JTqDrvfv2c KJIRsEo6JpUIrHyMkAVCNyvs5kg0ePn2tn7K1UE1bX8b893MfnbGHkoXq1Fctjf+x6rSIKSjOhT 78W4bYWusmDqJLTsMLGDUfowXAQYq0tdjZ/PlHjYOp46ix6lPlpVSaK1UVQcuINFFiVfnUbT1qW w1hWZplt8kMZnzGnZy1M+HyuLhTWkPgxUvGOcpjf7j6Z4rkvlwcpJpGHWk43IHU0mT9touTUr2d IHC0q/bh1c/BZ7KEvOTL+qgbADnPZ40SQ= X-Google-Smtp-Source: AGHT+IGZdm37HxAqsjhy1/5xDaqN7lUTV358c1EAXqBH9pM4lK4FxazOWjwBlNTx1asu/TcDWqtePA== X-Received: by 2002:a05:6402:2553:b0:645:d764:3fcb with SMTP id 4fb4d7f45d1cf-6499b1e3610mr2444108a12.28.1765553564857; Fri, 12 Dec 2025 07:32:44 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:44 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:19 +0200 Subject: [PATCH v3 02/12] perf evsel: Support sparse fields in evsel__set_config_if_unset() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-2-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Sparse config fields are technically supported although currently unused. field_prep() only works for contiguous bitfields so replace it with pmu_format_value(). Signed-off-by: James Clark --- tools/perf/util/pmu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 956ea273c2c7805c0cb504fb7dcf996f79f5588d..2c26c8d76bed920c7b5b43beb86= 7e4d1bcaa2970 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -144,6 +144,8 @@ struct perf_pmu_format { }; =20 static int pmu_aliases_parse(struct perf_pmu *pmu); +static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, + bool zero); =20 static struct perf_pmu_format *perf_pmu__new_format(struct list_head *list= , char *name) { @@ -1381,7 +1383,6 @@ bool evsel__is_aux_event(const struct evsel *evsel) * the bit pattern. It is shifted into position by this function, so to set * something to true, pass 1 for val rather than a pre shifted value. */ -#define field_prep(_mask, _val) (((_val) << (ffsll(_mask) - 1)) & (_mask)) void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, const char *config_name, u64 val) { @@ -1398,8 +1399,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - evsel->core.attr.config &=3D ~bits; - evsel->core.attr.config |=3D field_prep(bits, val); + pmu_format_value(&bits, val, &evsel->core.attr.config, /*zero=3D*/true); } =20 static struct perf_pmu_format * --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.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 226FB2F60A1 for ; Fri, 12 Dec 2025 15:32:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553571; cv=none; b=GLM342svghwOFIkR4E8D085hN1pKwG9R6Z3O7bu+43YiHI0O7T2hT0DLL6Fdj+hJs9Mvr7EhRJIcPhyV5RagGWAAFlh1YZnbUMLa5i/Iy4m45z7pA8EUL4MU3XXrPkvR64cmBc2LsiYNLpSKXBzUIsnTny7MQsgbGMt4q8tnf1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553571; c=relaxed/simple; bh=vWZqMcToevyun2DaJzmwXDwT5hN4jpmu6pxtripRP0Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tTyHvq1jDHiHwi0TL4a1jje3vCqApvugXw97sjU/y/hyYZysxv/vTotkiWjI+aNeWQhS5kjFHrBbI12UY980jYCxfRCQZYRpQWaLSGLTyAcLLyfGCBMjthZKp8084Xq1U8m+sReN7Z6bH8ebQEow3i7p2Rdj1WpxsRdKWFjTADA= 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=aSjFq0le; arc=none smtp.client-ip=209.85.208.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="aSjFq0le" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-64165cd689eso2157107a12.0 for ; Fri, 12 Dec 2025 07:32:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553567; x=1766158367; 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=xSulanRhWm+TOJEsIJX6kByj32cTVV8wVNthl+pdTvs=; b=aSjFq0ler4sXWOBOeLIgy20ZRgKhLxaS/E4bBC6+GKKhbTWkhLJCQmqtuoqkLibUu5 Lw6wKnJDuh45R8wybS1DaDAfK7bzuUTm+leX8qH9qL0ASInFQB+0+jVL2RoNoo/ESkKI e7ZKSULG7D/eh7Jalew4rhUgC9D48sH8ZZZnSPhpKxIY6XWBgj/6RnXBrae55V0OuBQ2 ZZpTG43uzOwXOBkcsn2NbW8N6GFVbCZgdRqqh/eHCdPk/5ugnENPZn65SJrtJhmfsJQ7 bSSaxMVApFoGyXp9VFWAAPdbdJsQHTVsxpu0C+j8KOledF7c7wIZn0CU2icrN9J14xMa gI/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553567; x=1766158367; 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=xSulanRhWm+TOJEsIJX6kByj32cTVV8wVNthl+pdTvs=; b=lM0vLNIMr3wbK18rv8JQimthqpMg4QYSYG3Y2oANJ8DGxHwIgRjMg4Shmm83YaN0wl ur6Kt8AN2njL9M3WVEbNM4+vFhcCf1B7jsuvEVmSotsc/aWe7vwceb4aHN0TcXpXR0Mg Exmq0+KW+X/FI8NM8paHZ+9OeP6qAegita3UM/RK4fGeSgqt1vGUCa1NPB2K8ywNJV94 14bOeLiNTrymG/yR1Yv8LlOTw1gNTOGwbvXFeAca0mZp2ewIxf3GlzylxQLAi/sEQvaU 8wR6Rv/iy4WIS+1f6FtnfxvquSti7J64ZrcHEFVpVjk49a0MgRwK/7huey/sAXBU5m87 R27A== X-Forwarded-Encrypted: i=1; AJvYcCURnObuxijJ0wQA0K2XPpuG3D6ZpDSxR1Ja/iywW64UeCE22a8P8ZoGtApJkJ7JJ4evM6pQtG6qHIdEzxc=@vger.kernel.org X-Gm-Message-State: AOJu0YwIbzIBtwa6B5P6LYrYNhWJ0gsu8opyb9BKECT7rHPJfDiBBH5f F06JvR9ZFJNI5Z8JdH3ibgpdShXy+zEbEsV5cMzCRIbz9LptX5epSzyxL7GCtXn49Yg= X-Gm-Gg: AY/fxX4zh0X1p0zsYgffIpwyemtWx/iUtj+V260Yq1QgnDMPBH3hhbq5EoajwaLMOlV jOz33uSxGGoda3C1xuwdOdfbhQwqbLXErYrHEmokYXKC0o8oJXBx/HCr6OKRzYOrLWXx3Hcj/FJ U+6SYgye+eph3cIAkq0HBr1dXL5zZ3codiGA21ZRLSyTRXsgHF7Z82T26UnkIn7lPufIfY+8PWx JWf2Sqr0oLs14fBSiusQSPmri9t0dU336i3p6rizxI16QrpOp5gU/LnlPn3YKwF0TnWKuVGnUpL H88RxAEACby6VrmX7Dm/eDqK7EhbNcVFCYbZodraehp3dlaSUfLOsHPLiPDMGykJmMsyyOY0abO PkPg3Ru419MpLEWgyG6giMIZQK+IiZzCCtCWnzzqO2Rmdqd5YZEv0GIrgZrDVzAzB+vZGdGKCgo xFABgJiwAdb9zNJc2Lj8cu X-Google-Smtp-Source: AGHT+IE0jsBzIwoiXf1j1BrrX+hYReRJK59uu92Fpw79dVuN+GXXuARzuNi4SxAAGM0C7gWCzIiRtA== X-Received: by 2002:aa7:c642:0:b0:640:931e:ccac with SMTP id 4fb4d7f45d1cf-6498745a2a9mr3880322a12.7.1765553567457; Fri, 12 Dec 2025 07:32:47 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:46 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:20 +0200 Subject: [PATCH v3 03/12] perf parse-events: Track all user changed config bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-3-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Currently we only track which bits were set by the user in attr->config. But all configN fields should be treated equally as they can all have default and user overridden values. Track them all by making get_config_chgs() generic and calling it once for each config value. Signed-off-by: James Clark --- tools/perf/util/evsel.c | 6 ++- tools/perf/util/evsel_config.h | 6 ++- tools/perf/util/parse-events.c | 98 +++++++++++++++++++++++---------------= ---- tools/perf/util/pmu.c | 2 +- 4 files changed, 65 insertions(+), 47 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 9cd706f6279313c2cc53eba1adbd45f352090f75..dcadf022405d398bf394b3da7f0= db5c81a3ec268 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1242,7 +1242,11 @@ static void evsel__apply_config_terms(struct evsel *= evsel, case EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE: /* Already applied by auxtrace */ break; - case EVSEL__CONFIG_TERM_CFG_CHG: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG1: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG2: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG3: + case EVSEL__CONFIG_TERM_USR_CHG_CONFIG4: break; case EVSEL__CONFIG_TERM_RATIO_TO_PREV: rtp_buf =3D term->val.str; diff --git a/tools/perf/util/evsel_config.h b/tools/perf/util/evsel_config.h index 685fd8d5c4a88fb8ae601ded60c1fc36dde73403..7b565d76c0bc4277effbbf95011= 0986b423f571c 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 46422286380f33a48087e7079a45bb21beb2d573..7ef63b808d0542999fd1303b9f9= 4cae68e38030f 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1253,66 +1253,32 @@ static int get_config_terms(const struct parse_even= ts_terms *head_config, return 0; } =20 -/* - * Add EVSEL__CONFIG_TERM_CFG_CHG where cfg_chg will have a bit set for - * each bit of attr->config that the user has changed. - */ -static int get_config_chgs(struct perf_pmu *pmu, struct parse_events_terms= *head_config, - struct list_head *head_terms) +static int add_cfg_chg(struct perf_pmu *pmu, + struct parse_events_terms *head_config, + struct list_head *head_terms, + int format_type, + enum parse_events__term_type term_type, + enum evsel_term_type new_term_type) { struct parse_events_term *term; u64 bits =3D 0; int type; =20 list_for_each_entry(term, &head_config->terms, list) { - switch (term->type_term) { - case PARSE_EVENTS__TERM_TYPE_USER: + if (term->type_term =3D=3D PARSE_EVENTS__TERM_TYPE_USER) { type =3D perf_pmu__format_type(pmu, term->config); - if (type !=3D PERF_PMU_FORMAT_VALUE_CONFIG) + if (type !=3D format_type) continue; bits |=3D perf_pmu__format_bits(pmu, term->config); - break; - case PARSE_EVENTS__TERM_TYPE_CONFIG: + } else if (term->type_term =3D=3D term_type) { bits =3D ~(u64)0; - break; - case PARSE_EVENTS__TERM_TYPE_CONFIG1: - case PARSE_EVENTS__TERM_TYPE_CONFIG2: - case PARSE_EVENTS__TERM_TYPE_CONFIG3: - case PARSE_EVENTS__TERM_TYPE_CONFIG4: - case PARSE_EVENTS__TERM_TYPE_LEGACY_HARDWARE_CONFIG: - case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE_CONFIG: - case PARSE_EVENTS__TERM_TYPE_NAME: - case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: - case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ: - case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: - case PARSE_EVENTS__TERM_TYPE_TIME: - case PARSE_EVENTS__TERM_TYPE_CALLGRAPH: - case PARSE_EVENTS__TERM_TYPE_STACKSIZE: - case PARSE_EVENTS__TERM_TYPE_NOINHERIT: - case PARSE_EVENTS__TERM_TYPE_INHERIT: - case PARSE_EVENTS__TERM_TYPE_MAX_STACK: - case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS: - case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE: - case PARSE_EVENTS__TERM_TYPE_OVERWRITE: - case PARSE_EVENTS__TERM_TYPE_DRV_CFG: - case PARSE_EVENTS__TERM_TYPE_PERCORE: - case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT: - case PARSE_EVENTS__TERM_TYPE_AUX_ACTION: - case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE: - case PARSE_EVENTS__TERM_TYPE_METRIC_ID: - case PARSE_EVENTS__TERM_TYPE_RAW: - case PARSE_EVENTS__TERM_TYPE_CPU: - case PARSE_EVENTS__TERM_TYPE_RATIO_TO_PREV: - default: - break; } } =20 if (bits) { struct evsel_config_term *new_term; =20 - new_term =3D add_config_term(EVSEL__CONFIG_TERM_CFG_CHG, - head_terms, false); + new_term =3D add_config_term(new_term_type, head_terms, false); if (!new_term) return -ENOMEM; new_term->val.cfg_chg =3D bits; @@ -1321,6 +1287,50 @@ static int get_config_chgs(struct perf_pmu *pmu, str= uct parse_events_terms *head return 0; } =20 +/* + * Add EVSEL__CONFIG_TERM_USR_CFG_CONFIGn where cfg_chg will have a bit se= t for + * each bit of attr->configN that the user has changed. + */ +static int get_config_chgs(struct perf_pmu *pmu, + struct parse_events_terms *head_config, + struct list_head *head_terms) +{ + int ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG, + PARSE_EVENTS__TERM_TYPE_CONFIG, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG1, + PARSE_EVENTS__TERM_TYPE_CONFIG1, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG1); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG2, + PARSE_EVENTS__TERM_TYPE_CONFIG2, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG2); + if (ret) + return ret; + + ret =3D add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG3, + PARSE_EVENTS__TERM_TYPE_CONFIG3, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG3); + if (ret) + return ret; + + return add_cfg_chg(pmu, head_config, head_terms, + PERF_PMU_FORMAT_VALUE_CONFIG4, + PARSE_EVENTS__TERM_TYPE_CONFIG4, + EVSEL__CONFIG_TERM_USR_CHG_CONFIG4); +} + int parse_events_add_tracepoint(struct parse_events_state *parse_state, struct list_head *list, const char *sys, const char *event, diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 2c26c8d76bed920c7b5b43beb867e4d1bcaa2970..e02f74d4020c151082ecc434c29= c0ec4c2c9b2c8 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1387,7 +1387,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, const char *config_name, u64 val) { u64 user_bits =3D 0, bits; - struct evsel_config_term *term =3D evsel__get_config_term(evsel, CFG_CHG); + struct evsel_config_term *term =3D evsel__get_config_term(evsel, USR_CHG_= CONFIG); =20 if (term) user_bits =3D term->val.cfg_chg; --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 E37E031B800 for ; Fri, 12 Dec 2025 15:32:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553573; cv=none; b=RM7hcGOZdtR/GAhXeKtR6ZScatplSWFMb0gAG9lpYbrzBgqunzdQSUzsZSjreQONSsVhlHp4a73wbZeHUPavpK5TzrO/9kW9qRaqrYsAt8YyaV6avtp+QcVPxj8P7Uk+cUCvgnAbtQYkhf/yw5B/7AXsBOxsp1dg0MN1M4wvv58= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553573; c=relaxed/simple; bh=zLdx5e3pyh2JRQOFFSBmpdx51RRSEdD16iQSkfVhasc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M9vnRhVATMNHzkU/DBjpScezhqYnpRmUmZCvxMoFwvOc7cW8tQnv0SvaKObhs32fL9BboaLI8yrEsLZRBoamm+1M5SD5oBJrybJS11GMw+Qqp0H5b1BDY7uZCtwi/R6HnJKnrU93wI0uOwuc7wRwavZJju+zFyTMU0Ig3ZINxIw= 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=VFSMY8Tq; arc=none smtp.client-ip=209.85.218.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="VFSMY8Tq" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-b7277324204so224046766b.0 for ; Fri, 12 Dec 2025 07:32:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553569; x=1766158369; 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=9R0fqOMnWx/kXqG5KJ5IdcBa/s5Ujlxo3aE4ef72JzE=; b=VFSMY8Tq0wndD7ReNusaeIBbccnJS5PMKQFQzvDBISxQieatGL7DgAj+C0pyadgPrU vwJQdGTX45G2jeeQTVny6ll2IR/gbc1xAXsPugKr02oJ2sx0iXi7QLNJwCm0L45IjhNc ShvLllatSA/q7KKkrxxaH1P7p3rySP5h0A3uQRSS1oyTED02eaqQC2AP6+xdR8kjEemD 6fFQPNy9JBJcl5alYwvIKbVmljSYoaUYZFxVll5srmY40jTtTPuec7iY8+ZkF8Vfm4gV WsHDy8VckMMn4oV+I0oaIr6ogXkaGsHda9sRaAW4eTIIxMLL6wRnhXi4Ne3blFVbHPZ3 zF4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553569; x=1766158369; 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=9R0fqOMnWx/kXqG5KJ5IdcBa/s5Ujlxo3aE4ef72JzE=; b=l7I/11kpoGfv27gvHNY84gXANtTT5yp3OxzBkn5kppgJiq2RoyJgfawsZNujHa5Rvg oITvzE8jbgtlTZ1fx3bBlxAr9sRLNKKJThajMNkKT5GxYSV1LJdz8zMf+LmeUnQUf3A2 ObxgoPQaHmBROut1rxn+Tev4CTdPG6U/qEdUZTrVBFp4gHUA1q44XGOCeJubUXuxpasj TDqcNXJDUiK9LtjFcKc5WhZGR4GBnOxbGBVW4DKGIiufQ6QXhpuBWVYA9MzbQxBPCuYC othwqzyry4UjKMtsMcvpChFA/zM8Rqeo6aW26XDchV8ZlmJmP4xPg6yG2I5+mpZ5HvNf ZQ/g== X-Forwarded-Encrypted: i=1; AJvYcCWbIshkW8ZskVYUNHtdFMydIqR01jsgIf03at+WV7Xktdaov16Y0YWoyG8G1MjpXA44zq0MH/6WGnqscEc=@vger.kernel.org X-Gm-Message-State: AOJu0YyMisETj5DYAF9zkFA6ZuMrpbeRNLT4YKaCNDeU1cz0Nw9Bi9V2 EgLv74/SOjp8FfgZ51yiMYh+YmXv/UB7rlZkpLz0+Yc+L6T2WjpI0+Jnx1cB14dYh5M= X-Gm-Gg: AY/fxX54QW2CcUGKtGHvFVmbIwiSwKsLF2ZmcKTfCSULiOuxsFEUc0sITtQr2c/6b78 UOX8bAbl9wZrscXSap+SWCYxCfzy9/unpHIYNQKp655010NEC6TQ5QnSjbJlEL5O4WAXn80YQeN uknykrhd4L6yAthvLVJbMvxPffKMuSnPQDl2A43+UEDM72t3a70lZEitD86oegFWQ3FQ4JTWsT5 m49Xh6IpoS13CSjnN4U5FH3gdmXM/9/7osuXAGmSmYzMBxZxTJt45683Xim38ScwYrs0qXWKZdg dz++qpo0dmqXidE9kp1LZ2OLPwVQYozCmJPUQV5c6Mr0xdMRAUZOXAILWLsI9CLUy15RAapnmih xzHYxy18flqEowdUKRCNL1tlll6JMkoeBIbcGB48wCAz/zRreIz5PkeTDFhtnmNRzHNrDAGEppL HEGqwFCt0OOKI+4kBVWujrvnOlJzlIVuk= X-Google-Smtp-Source: AGHT+IFbuckV0/lVSbpz/gLDBbP/OWExCz0AsI758ga/mOuq3N+WcR0TmjT9gy99TZcqWy5LGpaTmw== X-Received: by 2002:a17:907:d29:b0:b7a:1bdd:3311 with SMTP id a640c23a62f3a-b7d23c5c413mr246282266b.62.1765553569104; Fri, 12 Dec 2025 07:32:49 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:48 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:21 +0200 Subject: [PATCH v3 04/12] perf evsel: apply evsel__set_config_if_unset() to all config fields Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-4-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Misleadingly, evsel__set_config_if_unset() only works with the config field and not config1, config2, etc. This is fine at the moment because all users of it happen to operate on bits that are in that config field. Fix it before there are any new users of the function which operate on bits in different config fields. In theory it's also possible for a driver to move an existing bit to another config field and this fixes that scenario too, although this hasn't happened yet either. Signed-off-by: James Clark --- tools/perf/util/pmu.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index e02f74d4020c151082ecc434c29c0ec4c2c9b2c8..514cba91f5d99b399d2d6a1e350= 971660c54a9fc 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -146,6 +146,8 @@ struct perf_pmu_format { static int pmu_aliases_parse(struct perf_pmu *pmu); static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, bool zero); +static struct perf_pmu_format *pmu_find_format(const struct list_head *for= mats, + const char *name); =20 static struct perf_pmu_format *perf_pmu__new_format(struct list_head *list= , char *name) { @@ -1387,7 +1389,38 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu= , struct evsel *evsel, const char *config_name, u64 val) { u64 user_bits =3D 0, bits; - struct evsel_config_term *term =3D evsel__get_config_term(evsel, USR_CHG_= CONFIG); + struct evsel_config_term *term; + struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, config_n= ame); + __u64 *vp; + + if (!format) + return; + + switch (format->value) { + case PERF_PMU_FORMAT_VALUE_CONFIG: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG); + vp =3D &evsel->core.attr.config; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG1); + vp =3D &evsel->core.attr.config1; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG2); + vp =3D &evsel->core.attr.config2; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG3); + vp =3D &evsel->core.attr.config3; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + term =3D evsel__get_config_term(evsel, USR_CHG_CONFIG4); + vp =3D &evsel->core.attr.config4; + break; + default: + pr_err("Unknown format value: %d\n", format->value); + return; + } =20 if (term) user_bits =3D term->val.cfg_chg; @@ -1399,7 +1432,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - pmu_format_value(&bits, val, &evsel->core.attr.config, /*zero=3D*/true); + pmu_format_value(&bits, val, vp, /*zero=3D*/true); } =20 static struct perf_pmu_format * --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.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 A28102F49FE for ; Fri, 12 Dec 2025 15:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553574; cv=none; b=MC7USrqrO+oUTrT0enjTMGjs5cLFHQZ1LPMOY3t9mOkn10gJEdVZhkmhgx52zeF1EWpZAS97BlKfuu/ySkMc+wIik6sjYMYrBkDn/LFXy23hncETSbQgxGygOrIIG+OBMmqyKB7ybD+Et5TP2XM3EvcsOpg6gBicAxMW/5UnitI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553574; c=relaxed/simple; bh=2k9PUMsZ7sr/50mD7OnNnMTOF48xX1ROwsUNkXp8J9s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KaDzjxLBQPcgSpR1NPuw2BPOiKQLH466Sqvil5jvxRCKZ2qr1ohXE4ZRo6296qT1KpHIwroCjQwCeHG/8liqWGFoK4s/HtbkRKuIJenmKsmgUwOT3MazSiQgvE1eeHIn+UQzstwmjHoRkqFxBYBxjqVNKIvqcIgErkClL9n4bUk= 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=rLW5WyTq; arc=none smtp.client-ip=209.85.218.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="rLW5WyTq" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b735b89501fso177295766b.0 for ; Fri, 12 Dec 2025 07:32:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553571; x=1766158371; 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=FfXl40fnB74AGQ/vJ3IYApuDFV3Ub/cQrhNchAtNkEM=; b=rLW5WyTqDGQUds0h7CCySL1m4jIh2LSXS8DsF0BCpQfSG0jKdkAdp8U9A/pMnrvv6x Rs4IA1XQ/nsAX2/ILH/Kgw/VmlFSdR/R8kvfctpgHciKnd4pZxd9DbkqKx3MRgjSRXz3 ZwplKdrg9pgs1PetKFH14K3yIOzVkRN02aUz3qH49wuVeT8N2Vgm2+Ev04zTZFTveNW6 8sMyhuJk71JAjr2NA0O7e/KYqDKi4v6w6MRGrW1fuvU/I1Kq63qeGve1nLC6oz7BUBdz V3aa29PYTndOd3bU4D/8n2GXSE7Aeay4VRH5N3XPqiLzt0L2m8aLXXfhpcLjd35VrY1H 554Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553571; x=1766158371; 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=FfXl40fnB74AGQ/vJ3IYApuDFV3Ub/cQrhNchAtNkEM=; b=C1wxNDtBmLs/s5O+SdjihqeX+e6/bzvZkFvFpLQOxpjDRJsrtRZIAMJmw98n66oeLO msfNYxUtkNKcrLDoeLIIOuWJ2Q0NHMF6MVPeEplD/1HRRWfgmbLeV4KYMnCLDVN6cxJA Th8XDgFHieN/sxkSlGv5kY3f/CZCx8NhvZcmnzqiE4aphMMZDuiuorwmJNkYxVEIQzam e/Se64gHGfwkZNRV01km70zY1lN4BF/KMO3Gz/f9Vgj+xXjwo9v6Fg/+CSZdPGV0IEZB W/NnfpuMFVMNdP3dFaKEkVGCGOBq67zzMw5KIBiuekbkbjXChhkY4ZTEFVeENN0KFM2A aRVg== X-Forwarded-Encrypted: i=1; AJvYcCUv/gj2QprbMLUzcLCD19/fkS2diipjOubB/nWo0a9TPWncMzQognCifpDbHws04fxMUbiAZG87fdOTTT0=@vger.kernel.org X-Gm-Message-State: AOJu0YzCdpSO5gm/vvRVjeDPxiMDNAjE8oi0GlB9roBUKXewckGeikRC 4P2qXDUO8jSmOljhKzc5KyuYEueKKDaBS816MEegrced4BzIdbp5gKMgUXIJVHRlBM0= X-Gm-Gg: AY/fxX449tFOmcb0LP5FG4RJuAKCXN/+AHyZzcf7doIQ/B8z50CH6Mr6ahJ0K6+NE3i mke9hegtLKKY7KH80fTnlJyiGxPzkhd4m3QqAIyLtXH+I5UXxYQ0qnrtU5exasjM4lPvqCMzTIQ xVCxvKh+agO8awNUcEAQceKL2ZWSyrXEknjaCtBQSecXOgKpbyKwqE8i42j0eqtiH6BobwS32SY tqrFtWnInxy2OJLRUwjpBftuWgU8dJBd8Qf/YqAgzrRlQNDfMjZKQZEaLjVjoRReBE0wb5+13We hfWHEyA7gdk9oK7zyMCFc1kYnu0MoS/gNLbtRPvpuSaGDVbIis/93qCbc1INzm2YQV8gpkzo7tb lu9AhjqKkqzhq2QyzOGz0ROnMq3XvqzgvAZeMqb8QeGl9fz6g1t0N4iHOq69wO3b29hkT3FD1VR gksKoSboi9kTJuWZYtxtnC X-Google-Smtp-Source: AGHT+IHTK60JzgqMoXpjzU7e1RoFVa6ExYTj3cwQgdkRaejKQS0ukfr1CN2Po78C7Fi34EABIQiNlQ== X-Received: by 2002:a17:907:3c91:b0:b73:6b24:14a0 with SMTP id a640c23a62f3a-b7d236670demr231854966b.18.1765553570929; Fri, 12 Dec 2025 07:32:50 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:50 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:22 +0200 Subject: [PATCH v3 05/12] perf evsel: Add a helper to get the value of a config field Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-5-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 This will be used by aux PMUs to read an already written value for configuring their events and for also testing. Its helper pmu_format_unpack() does the opposite of the existing pmu_format_value() so rename that one to pmu_format_pack() so it's clear how they are related. Signed-off-by: James Clark --- tools/perf/util/evsel.h | 2 ++ tools/perf/util/pmu.c | 77 ++++++++++++++++++++++++++++++++++++++++++---= ---- 2 files changed, 68 insertions(+), 11 deletions(-) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index a08130ff2e47a887b19f6c47bfa9f51e0c40d226..092904a61ec7afdc59253f9b78a= 9fe8b7cb5bfa7 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -575,6 +575,8 @@ void evsel__uniquify_counter(struct evsel *counter); ((((src) >> (pos)) & ((1ull << (size)) - 1)) << (63 - ((pos) + (size) - 1= ))) =20 u64 evsel__bitfield_swap_branch_flags(u64 value); +int evsel__get_config_val(struct perf_pmu *pmu, struct evsel *evsel, + const char *config_name, u64 *val); void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, const char *config_name, u64 val); =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 514cba91f5d99b399d2d6a1e350971660c54a9fc..ef7358ad1fb955f29f2e68b3d0c= e711754e4d67c 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -144,8 +144,8 @@ struct perf_pmu_format { }; =20 static int pmu_aliases_parse(struct perf_pmu *pmu); -static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, - bool zero); +static void pmu_format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero); static struct perf_pmu_format *pmu_find_format(const struct list_head *for= mats, const char *name); =20 @@ -1377,6 +1377,61 @@ bool evsel__is_aux_event(const struct evsel *evsel) return pmu && pmu->auxtrace; } =20 +/* + * Unpacks a raw config[n] value using the sparse bitfield that defines a + * format attr. For example "config1:1,6-7,44" defines a 4 bit value acros= s non + * contiguous bits and this function returns those 4 bits as a value. + */ +static u64 pmu_format_unpack(u64 format, u64 config_val) +{ + int val_bit =3D 0; + u64 res =3D 0; + int fmt_bit; + + for_each_set_bit(fmt_bit, &format, PERF_PMU_FORMAT_BITS) { + if (test_bit(fmt_bit, &config_val)) + res |=3D BIT_ULL(val_bit); + + val_bit++; + } + return res; +} + +int evsel__get_config_val(struct perf_pmu *pmu, struct evsel *evsel, + const char *config_name, u64 *val) +{ + struct perf_pmu_format *format =3D pmu_find_format(&pmu->format, config_n= ame); + u64 bits =3D perf_pmu__format_bits(pmu, config_name); + + if (!format || !bits) { + pr_err("Unknown/empty format name: %s\n", config_name); + *val =3D 0; + return -EINVAL; + } + + switch (format->value) { + case PERF_PMU_FORMAT_VALUE_CONFIG: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config1); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config2); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config3); + return 0; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + *val =3D pmu_format_unpack(bits, evsel->core.attr.config4); + return 0; + default: + pr_err("Unknown format value: %d\n", format->value); + *val =3D 0; + return -EINVAL; + } +} + /* * Set @config_name to @val as long as the user hasn't already set or clea= red it * by passing a config term on the command line. @@ -1432,7 +1487,7 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu,= struct evsel *evsel, return; =20 /* Otherwise replace it */ - pmu_format_value(&bits, val, vp, /*zero=3D*/true); + pmu_format_pack(&bits, val, vp, /*zero=3D*/true); } =20 static struct perf_pmu_format * @@ -1477,8 +1532,8 @@ int perf_pmu__format_type(struct perf_pmu *pmu, const= char *name) * Sets value based on the format definition (format parameter) * and unformatted value (value parameter). */ -static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, - bool zero) +static void pmu_format_pack(unsigned long *format, __u64 value, __u64 *v, + bool zero) { unsigned long fbit, vbit; =20 @@ -1595,23 +1650,23 @@ static int pmu_config_term(const struct perf_pmu *p= mu, switch (term->type_term) { case PARSE_EVENTS__TERM_TYPE_CONFIG: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config, zero); + pmu_format_pack(bits, term->val.num, &attr->config, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG1: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config1, zero); + pmu_format_pack(bits, term->val.num, &attr->config1, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG2: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config2, zero); + pmu_format_pack(bits, term->val.num, &attr->config2, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG3: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config3, zero); + pmu_format_pack(bits, term->val.num, &attr->config3, zero); break; case PARSE_EVENTS__TERM_TYPE_CONFIG4: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); - pmu_format_value(bits, term->val.num, &attr->config4, zero); + pmu_format_pack(bits, term->val.num, &attr->config4, zero); break; case PARSE_EVENTS__TERM_TYPE_LEGACY_HARDWARE_CONFIG: assert(term->type_val =3D=3D PARSE_EVENTS__TERM_TYPE_NUM); @@ -1749,7 +1804,7 @@ static int pmu_config_term(const struct perf_pmu *pmu, */ } =20 - pmu_format_value(format->bits, val, vp, zero); + pmu_format_pack(format->bits, val, vp, zero); return 0; } =20 --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A492131AF25 for ; Fri, 12 Dec 2025 15:32:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553577; cv=none; b=oWSgNjMWfK6mF016oib4nuzMso0iwy5VtZSX2oZzxT8Y8YqSA2IoGX+JopiMv7Q28u8dqSgHAAqIYg2IrK9K+deO8YZY8lLDNVwGc6bGaCH56g3hctOxaVb6ebdMhW/AqyA9icLc35ZgC5flON+Qd2LdUYv3nL6WECni8Bw3ZxA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553577; c=relaxed/simple; bh=8Q916A0+2qqjGTKQxWQQu1Y/Kx5Q3rnxowSKrPOUypo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jKYrGAOIXPnGmLpZ8N7gF71KirHCpEFH76oLDEjxTDg6lXbBfhwg+YEa2KGV9xskNPdGIaWt19ClxuQ0XG8/sZ3+yKgkj3C306F7uoxtUK2UtFppJqokzNaZlh5JDcBxC3s5aRNckmJNZsUHpYYt8y+UnQwTTVtPgqZr3e43ftA= 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=PEt3C44o; arc=none smtp.client-ip=209.85.208.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="PEt3C44o" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-640ca678745so2533448a12.2 for ; Fri, 12 Dec 2025 07:32:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553574; x=1766158374; 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=3rYOutVV+nlrAeFTj6aX4/QG8Lfx2y/6jkTrJCZiYXg=; b=PEt3C44o4bd47o6oRrGUydNfJ0iGKAokMiE0cefIYCqh8OgArdZZiIML+cUh7tlTQv McOY73fjg6Byp0BvT7VeOffbP77xyq3gXaJNvZvvVGFjJ6EVK2V303Bn9bdkuT3j0yN7 jf+N+GPtNHRlhdMizLZMYkzpasxV5HSlrrr5ne8K9E3lgPHe3UUFlsua3+gwns4dXeYQ Fci3USAHWyhIWaQt7OadaemX5qwTdbP4CdebZ4Bswru3v1wGJ6UXecNxA5oHL0jGCpPc dvBc8YDOzIdSvMHOW6WUCf+410qkOBkQgx0cLQQNyWpZXiAw3a277pYGaoV4C7BbxXmC C/kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553574; x=1766158374; 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=3rYOutVV+nlrAeFTj6aX4/QG8Lfx2y/6jkTrJCZiYXg=; b=jvUJuktwsk0qSoKKT2/SebunYrFjW9fSK9UyA6PpmGay1HPC2GiC/qkYpd5nzEP8BJ VsE2S+ti4svYFPHDIQ7i1GWnIv3Nf7YC1GJdNMbifAgW7mcHVWeZICJ/VNkW8VzDPwoE F/qyE1k2tW/lHBVMctzGdWfEkwiW0hzp1SVhMq2KquZ7lXC1Z8VB+Ah5aUZHo5KllfC0 NZZnnp+5LjiAbhXyZ9stHSVmOvhS9aabTRThyTQSOKZYC4hxQiWI3SFSAJvxC4WOvBii c+6jO34ht1FVtJECSqoIUbFgbvjb6F3MwDIova5EaLYHSF5+EUoCIXXWcRIi6YqTlYnu H9JQ== X-Forwarded-Encrypted: i=1; AJvYcCWLa4Iz/2c7YfiL6N8+MSa/A3WA+OUAeJ0ggT2LqDLPvgvSdyvKh2xWJpfdYUXLJsR0cludf/6rZMJSBS0=@vger.kernel.org X-Gm-Message-State: AOJu0YywxdPDA2sk3P3yuONToATys0J2SYVOqKY8IH6IJ5rONbIhnidy BJI9imY4AT1iOCzcniGRhYihaoPGIqaRWe3EwmyUYL0eMDmCS8uBEUM09e85myh3HLQ= X-Gm-Gg: AY/fxX4Ne3UigJ1fHduwY8kAFcxfnlh2x1Ve0dj0A/oOF7qjZy+Qqz+C2MDoeNDAjQz uviPmTJnxZyRHmIpe7pll8qLohxv7zSqJN5XVq0aRDwi2u4E7Dxdqym9Whubk445BKDlX7xZwfR PgC+UNpQtuRb3eeKTt9e/qSkODHFMOTsJFqFE0oGZ8+Xmku31b/c+HlyiUjuDyW11xda4xiHB9Y H6oB2rzopJRkbS9XqAE8gCIFRGz249PV1N0VMNw4y5A86zbecoU12uc0W6gMKCjXmvi06vV5C8m aogPCUC3rD/L1D3KkwAYQRL1lA8a8kRc2guHRcP9kIwxyj9oNKT7ZyiCyfLS4JLUlHnNSD1NzvM 4rnyMvPOnyM+5Zd53votp8ztqF5d5GEUYoTRVFbwcIM1sDBvTcNODzrO4gdHTRG9dMyYebX7AHM yzIiRaEYHNoi5bPUnP/MQy X-Google-Smtp-Source: AGHT+IHuBXF9wDV6j0xVcn3kE6xUIeXTjWm8gIVpYwkhI0QrZi9H7M2hxVZUiLHgfc5qp+HHWr/WGg== X-Received: by 2002:a05:6402:2114:b0:640:947e:70ce with SMTP id 4fb4d7f45d1cf-6499b12ff90mr2515331a12.5.1765553573963; Fri, 12 Dec 2025 07:32:53 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:53 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:23 +0200 Subject: [PATCH v3 06/12] perf parse-events: Always track user config changes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-6-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Requiring the 'pmu->perf_event_attr_init_default' callback to be set to track user changes is a bit of a trap to fall in. It's hard to see that this is required when depending on the user change tracking. It's possible to want all 0 defaults so not set it, but at the same time still do some programmatic setting of configs with evsel__set_config_if_unset(). Also if a PMU reverts to 0 defaults and deletes its existing callback, it will silently break existing uses of evsel__set_config_if_unset(). One way to fix this would be to assert in evsel__set_config_if_unset() if the changes weren't tracked, but that would be a possibly untested runtime failure. Instead, always track it as it's harmless and simplifies testing too. Signed-off-by: James Clark --- tools/perf/util/parse-events.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 7ef63b808d0542999fd1303b9f94cae68e38030f..bee9233437753ff706d6b149503= a5e660c3972d8 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 Dec 14 06:34:18 2025 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 DB9EC2F60A1 for ; Fri, 12 Dec 2025 15:32:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553581; cv=none; b=f7tWNW2b82TQTKuMrYah97wwjBOg/GTNx+q4cWeBnAJEOMR6c68vODp2Ymii1hyivmOn8cOhNaRtS2HVHIyD6KuGKlDP/Qtsh9Pvr7coZ1sVkPLVYGGvRs4job80r9HeXYfzC0gL2CmS1BwIBzIndZNp6APdbF1qJ/J2Csfp81c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553581; c=relaxed/simple; bh=UW8aZJ/wrytG8nQKXwmbp89xjQYr1P2Ou6Va12MmDEU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rqmn+w8An0CsubdZbpNSlUi9J4zbSRVwD80QRZfWbtaYQ0+aLsgtoVwh2NaBWCHt67xEY+kNYiWLLvLnyr4orkiyX0PCjMmpIXspRM0oM6TohpHQw9/qfrfiYcNE4eZutxBDKgPlHm7AmIwH/bblIBpFSQjUETf/orcHLSGOtEM= 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=EkKVPayn; arc=none smtp.client-ip=209.85.218.43 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="EkKVPayn" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b7636c96b9aso223153566b.2 for ; Fri, 12 Dec 2025 07:32:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553577; x=1766158377; 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=e7fahmTBI9kipCQMheuyeZUpREbzXH29kA76YEVRHtk=; b=EkKVPaynJYTxdVOY5CRXddG5B79ItU2QesDWOd3Y71Caarr0b4uKyIZ7tgkCk3sDEe zywluPK8JhOo4R3Fd4qFGbuAVbEeIYV6MpiHbWkmDJi9KnyB0f/oCvCeVxZ86V4+ZGcF 8OrfKZRYZD1GY7NfkTJ2AYoIbxaGcksgUDJSIBsn8ivwVZsygEsv70FDPAZjko+gM6Nl PTh6TTNpHbVEs3/2nPIWlTCHJl5RJ8dnUQhOyJ0AATKDZlOnFn0KQXpXSwZGEcNRRO4q t1VRhFRge11kPxAwkDwVfD85VAdUxBA72BApsyazVfPvzcteF45993ujn2Yw0iO/I48a cWNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553577; x=1766158377; 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=e7fahmTBI9kipCQMheuyeZUpREbzXH29kA76YEVRHtk=; b=J5nYP/TFSs6L/pJw4tXU7ErU3h2NaSTx3qiwKebTQUfhFSBhCylgyFeRctRy5d7aQA aLzhO9S6VXPhdbOA/8Zp1oTpmhQds+G6s5MIYMKGMYfR04zSHSxSlpFBiE2balSmNMrb 2bjPvR1Kc0+KwLbFQbUD9oukDlH6o6SQbmEzwa+ptBa3dA4Kn48jyTqujBQhvPyNPF+Q QSt+0WvH4yQc0u01uw18WalsoboVYL+uw9LVhgNic+R+kFIbwcHALyRlUSNm9YnYDWA5 KtKzqUjkhWuP6Bnapw6o3W5rH1QqwX5SZxOWFX12pyEHODFxL2XnHMcAPekKWLfEidR6 rdMQ== X-Forwarded-Encrypted: i=1; AJvYcCWxKCkI0vbaAwnm8OIAqK3XXwRz3Dmxqba0hOoL8ruUURBmtLVF2Mo3BWw7ZcWRBuHyjj8joTXW/O+yoao=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0ZGqWNWGpP/izhmPMM7MdtcRzgdI7H/EOgAuKmtGAQI8n8VFP VBQCeakGQFVo7dOzBhHwH9HXzuVinqadAUKFRJnoqIPUdQ0Ldm69fnv0Inqbut5dEtY= X-Gm-Gg: AY/fxX6/DoxKm+ky4g2FL1tHIRXTaf4sTQ7eWeCY3xA+f9P/dcSod540e2aIeJAe23h QdEuvs5zevuERZUh3/ypY2QWtsSgwFD7o410GlduXhqjeKT+/tZzBpGsgRtCFFropbiEy5DbksU Xp1Klstz1TCGoHe9Y6wP2awMhNP4SETUOA+4FEJhVTCUAXbARb+5H3dwZqVK+UUMhrO3BbCutB7 Na6F5eFpGencmrvfuTvILGaS3V2sQNnNdhsUvBXNRxIV2S/gM1WzwLRyskhUW+omWlpVtIJ6rDV Lis9EoCcc2aDvyxOKcwtiKTFWaMhn4dqG1QJpB3k5Wkg1/VSylwM1AaNK7/vM7vbb+Br/G1Nvhr Gxe/CuFlh4jPaYOF1DiHH3kP2f0/smnrY3Y+ua1F9CHNGEDIVtCNIoOU2zNaP+5syIIm8OckUyz KF22Q9CRXh4IIa8rwqYpOI X-Google-Smtp-Source: AGHT+IEQFiVpXtjTbT1nEBymPVvwKhgGbHnTLlvzOpyqaM6FBur+TFlEfnGCvotgjkxj0qijhEHzow== X-Received: by 2002:a17:907:6095:b0:b72:3765:eda9 with SMTP id a640c23a62f3a-b7d23a7988cmr220274966b.60.1765553577012; Fri, 12 Dec 2025 07:32:57 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:56 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:24 +0200 Subject: [PATCH v3 07/12] perf tests: Test evsel__set_config_if_unset() and config change tracking Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-7-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Test that evsel__set_config_if_unset() behaves as expected. This also tests the user config change tracking mechanism as it depends on it. Signed-off-by: James Clark --- tools/perf/tests/pmu.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 91 insertions(+) diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c index cbded2c6faa4d5b422936e81bde83bc328fcdfe7..9e313a9a44fdebd0d417c7558b1= 5e5db89241867 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(pmu, evsel, "krava01", 16); + evsel__get_config_val(pmu, evsel, "krava01", &val); + TEST_ASSERT_EQUAL("krava01 overwritten", (int) val, (15 & 0b11)); + + evsel__set_config_if_unset(pmu, evsel, "krava11", 45); + evsel__get_config_val(pmu, evsel, "krava11", &val); + TEST_ASSERT_EQUAL("krava11 overwritten", (int) val, (27 | (4 << 1))); + + evsel__set_config_if_unset(pmu, evsel, "krava02", 32); + evsel__get_config_val(pmu, evsel, "krava02", &val); + TEST_ASSERT_EQUAL("krava02 overwritten", (int) val, 170); + + evsel__set_config_if_unset(pmu, evsel, "krava03", 0); + evsel__get_config_val(pmu, evsel, "krava03", &val); + TEST_ASSERT_EQUAL("krava03 overwritten", (int) val, 1); + + /* + * krava13 doesn't have any bits set by either krava13=3D or config1=3D + * but setting _any_ raw value for config1 implies that krava13 + * shouldn't be overwritten. So it's value should remain as 0. + */ + evsel__set_config_if_unset(pmu, evsel, "krava13", 5); + evsel__get_config_val(pmu, evsel, "krava13", &val); + TEST_ASSERT_EQUAL("krava13 overwritten", (int) val, 0); + + /* + * Unset values: krava21, krava22, krava23 + * + * Test that unset values are overwritten. + */ + evsel__set_config_if_unset(pmu, evsel, "krava21", 13905); + evsel__get_config_val(pmu, evsel, "krava21", &val); + TEST_ASSERT_EQUAL("krava21 not overwritten", (int) val, 13905); + + evsel__set_config_if_unset(pmu, evsel, "krava22", 11); + evsel__get_config_val(pmu, evsel, "krava22", &val); + TEST_ASSERT_EQUAL("krava22 not overwritten", (int) val, 11); =20 + evsel__set_config_if_unset(pmu, evsel, "krava23", 0); + evsel__get_config_val(pmu, evsel, "krava23", &val); + TEST_ASSERT_EQUAL("krava23 not overwritten", (int) val, 0); ret =3D TEST_OK; err_out: parse_events_terms__exit(&terms); + 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 Dec 14 06:34:18 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.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 94C883161BC for ; Fri, 12 Dec 2025 15:33:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553582; cv=none; b=F0pOv1F0uIzdezpMPASn7LYybW1SU07wAqrFWAaR5a6OI6/lEMwS2ebLJZSVZA51HP+zXeeDgUHGIgPnTl8705OyOYENd55+44uN5FOARGXV/jnYF4/hno4j5ZTVZiC0W/wJeRa/Qa71HmjpVvnG0wN5Sv65O7WcXPJqJwhUO9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553582; c=relaxed/simple; bh=qgsdekHEBzAXO5lvPU9/5A8O0g5IS9B8puKwIYnrP+M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HqAwqYWK+jaFeN9eEOIS5V8lpFaZvUKgah0p1Q04ppMi7OJpx7JxMW3VtDURxHom7ilKOJwNFYYvSCVaqY1OwkBkKC2QrpD17hv5NDOKjtKDWCRPWMU8Rnj0skgsdoLwTD+oVLXXg7BuAy8NxyTDLabrKihFrdgwKOsAH7AYSy0= 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=WMfGxlpv; arc=none smtp.client-ip=209.85.208.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="WMfGxlpv" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-64951939e1eso2210700a12.1 for ; Fri, 12 Dec 2025 07:33:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553579; x=1766158379; 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=OERRRk3y48q4ktL/F5cCy8Sn/Ar6UF3zQz2qyOlFtzY=; b=WMfGxlpv4NSrFdg8VlcRpJmKAaijZk6lLy32by5ebZa2MmursnmhLVya136ZGxSP+f 8yTC/zRTyijTKZKeGLmxDVdct5sZeSvEZCU1kgs7LGWFXpN3J25lFUYw9G1oZE178p2x HXgwMpiWcASjLyV1VHc7Ui8KFUVuYqCghc7RR+krbus8Lc4FtxdLfErOrXoJIWSl+6Ok lD5U9ahCpOoEftNsHBe9dFl1KLB6d7VSjFQ4TQpJ1vE9xfEnEB6E8yCrrkq9onliADcH yCLIKClPMb+zUtrN90FG9DKXmbdom0t24nHSvIAahmRkNcZF2tTYdjtXo3dZt16uI8dF etQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553579; x=1766158379; 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=OERRRk3y48q4ktL/F5cCy8Sn/Ar6UF3zQz2qyOlFtzY=; b=B1u8FqPlBky8SDpJCCPOwepcDB46yjOScoDGIKY2N8CppLbF+t0I/FfMD8EHdFSG5c Wi65ndgA0gK9WuXfvvGODrS9zeuINmVoPfpdvhmWsh6SQRjFnrV4yuD1meVAi42E+t22 XFgFaYrdU0Ygj/YpD2vDPPzqku0dBj60VO+F7clVdkJzNO7KJ28RBz6LUWaRdvs5HrDL Z2Yefo4dQZZWdYF6z+3VH9e9QXGci5rL4zHvEvnmICKx4hawUpCBfIEcMGelEUVrW+b7 TiSjgOSj89bn73xaQoZq+lJi/d6gr8uExNfxOrSuteyjfNrAaXHvLDFuA+rV+CVDwqtj LzYQ== X-Forwarded-Encrypted: i=1; AJvYcCXLqCIXE0xWDfX4OAbv8OEF1nUlwcS920LjvxpAVLq6M2CNM+wPV1x0ote4F3XXECzni7zhhC8D6ny2Szw=@vger.kernel.org X-Gm-Message-State: AOJu0YxVwZ4BEih1I09pxXzm/NhoawCdcGRPn58F0/nGnY2fmQJYSARF ZDXmLFzpxolRXY4VTCMRG67Muw/DoZELq4TtpKdaS47YUOXwfDD77EFRsmYbZW+Vgqg= X-Gm-Gg: AY/fxX6D5UJ6JmxzCQWngrfM1KX9Xjv4tLJZkFfiZ6kqGaAbex8HM52NPDFEcfQCD20 p38GFRVactQkZsjP/Tmue53Ii9+PjpmfJfv5BNhrbDd+FNQKxpqux/Wyb9IYtPscA4sUS0HW/6V miTUK9fruqU8njYWz63wkKYAvOZthVs8rR/KucuyG/VX1TBS5OqREpwI0qT3CAsYAy2xLJrYq2/ mGPyxOse+UvwoZv/eE3WeYxEfTVcSWDoVbXjI3dxKI4ywimAPQgoT8xCi22i94SnwuXWbhW6AUG EyXsyn4PqGsa/bAN83NtPBKHfwrvYd5OWe82lahXkHLakSAY6LGMUXlkxqi3bBpjv1bf7/wnWzI Zvia2F1abKsFHStGOXU+YGTidmMRF4DKrYIbqz9o2gHNSs0F51qkIRum85KCncC4M/brn2t1Fbd p4TCNFCBTw5IsdlU44r9EY X-Google-Smtp-Source: AGHT+IGKOsI6qPk5daX8P1jxmI9pL8L+QcZ2sUXB0l9hmBt0/lTf0xmqKtrLbY0Q9t9jSG5KaAnb6w== X-Received: by 2002:a05:6402:35ce:b0:63c:3c63:75ed with SMTP id 4fb4d7f45d1cf-6499b1c6ab0mr2342038a12.22.1765553578761; Fri, 12 Dec 2025 07:32:58 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:32:58 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:25 +0200 Subject: [PATCH v3 08/12] perf cs-etm: Make a helper to find the Coresight evsel Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-8-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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 , Leo Yan X-Mailer: b4 0.14.2 This pattern occurs a few times and we'll add another one later, so add a helper function for it. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 50 +++++++++++++++++++++--------------= ---- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index ea891d12f8f40beebf8dee1d3db71cad701f5666..22c6272e8c367e5671809771b84= 1c5babe2d5282 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -302,6 +302,19 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, return 0; } =20 +static struct evsel *cs_etm_get_evsel(struct evlist *evlist, + struct perf_pmu *cs_etm_pmu) +{ + struct evsel *evsel; + + evlist__for_each_entry(evlist, evsel) { + if (evsel->core.attr.type =3D=3D cs_etm_pmu->type) + return evsel; + } + + return NULL; +} + static int cs_etm_recording_options(struct auxtrace_record *itr, struct evlist *evlist, struct record_opts *opts) @@ -476,29 +489,21 @@ static int cs_etm_recording_options(struct auxtrace_r= ecord *itr, =20 static u64 cs_etm_get_config(struct auxtrace_record *itr) { - u64 config =3D 0; struct cs_etm_recording *ptr =3D container_of(itr, struct cs_etm_recording, itr); struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; struct evlist *evlist =3D ptr->evlist; - struct evsel *evsel; + struct evsel *evsel =3D cs_etm_get_evsel(evlist, cs_etm_pmu); =20 - evlist__for_each_entry(evlist, evsel) { - if (evsel->core.attr.type =3D=3D cs_etm_pmu->type) { - /* - * Variable perf_event_attr::config is assigned to - * ETMv3/PTM. The bit fields have been made to match - * the ETMv3.5 ETRMCR register specification. See the - * PMU_FORMAT_ATTR() declarations in - * drivers/hwtracing/coresight/coresight-perf.c for - * details. - */ - config =3D evsel->core.attr.config; - break; - } - } - - return config; + /* + * Variable perf_event_attr::config is assigned to + * ETMv3/PTM. The bit fields have been made to match + * the ETMv3.5 ETRMCR register specification. See the + * PMU_FORMAT_ATTR() declarations in + * drivers/hwtracing/coresight/coresight-perf.c for + * details. + */ + return evsel ? evsel->core.attr.config : 0; } =20 #ifndef BIT @@ -832,12 +837,11 @@ static int cs_etm_snapshot_start(struct auxtrace_reco= rd *itr) { struct cs_etm_recording *ptr =3D container_of(itr, struct cs_etm_recording, itr); - struct evsel *evsel; + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, ptr->cs_etm_pmu); + + if (evsel) + return evsel__disable(evsel); =20 - evlist__for_each_entry(ptr->evlist, evsel) { - if (evsel->core.attr.type =3D=3D ptr->cs_etm_pmu->type) - return evsel__disable(evsel); - } return -EINVAL; } =20 --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) (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 388EB31BC95 for ; Fri, 12 Dec 2025 15:33:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553584; cv=none; b=eYUdXwILoT+54s2MVZTfQgIuOD1JtbtGQLDST/uKoiD2nYsyntdmk/HQGqdL7UWaJFYvLQsC/Pri6KrZmToqgYmcmD3R6oS4vq5aV1r5aj3DZP+b8ej3bkLevrGTqusEsssLssREuzKAOoJrR/v56RVSPk4Ycxrv/NNjsLQCHh8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553584; c=relaxed/simple; bh=2fTL8UEB9CZOHe2mxY7U8rV3O2XcV9Rl69OFhNOOOs4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oS6qf/ZZrSrDMp4wwuVj/xA4cwKlXiMFJYC3ST58cT8nfir+XsZJju+O9AXW4wBEdmgjEPfrzwS+BxjcEJzjOnb/g5Ve4oLXDDrM+dQs9MmHJCiOHAllU8IYdy6Z4dAS05k6aaoSbJIgED5huuyp5t0fWh7daKGg96BnEIRqwnk= 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=ua8WsznG; arc=none smtp.client-ip=209.85.208.68 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="ua8WsznG" Received: by mail-ed1-f68.google.com with SMTP id 4fb4d7f45d1cf-6495e5265c9so2078182a12.0 for ; Fri, 12 Dec 2025 07:33:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553580; x=1766158380; 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=Pzt6Jr/+wkfmociJhlECu3e99FFKHyiFhWTKLOnLQI0=; b=ua8WsznGsxFEBawqlauw/cL92YaKPZvSDKmI1pMQQ9CIkFn0CJhDDGJ8+lqGMMJMp3 OEYVUMyHDWCgQziA7mex+4av6dLQmA15JZh5HUnQk0umEc1N6Fylfa5X7L+b2sn5jIRv mrx7x3SiojFqH2APwtW2+FRXVRjByGTYxwW+VvTWPjQBot4QoophzROU6qGARmYLP9Tj u77q16qA1czu6WqVvHnjoMxvgkuyAkSws5zDStxH2G6SUYvIDiL6OoVI9PHqKQaW1Ub/ V0UHv6v0hC95225HyEmcAJLIoUVsKQFpIv8U8J3XlWbe6kuN2INbumrWgtuVpdClrh3u Nhmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553580; x=1766158380; 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=Pzt6Jr/+wkfmociJhlECu3e99FFKHyiFhWTKLOnLQI0=; b=B9tM600GtEfzyrS5ZCBsJq4NOltbze1wxHV8QhPdZakDGKyy+H5if7T54sV7R7ZPXJ H8vjtgCf0Pt6JtD6epFWOckFr5wu97coSsplr2oZLD1lErbOG9ATlrTOs6+iiTbDaRIu OFfR0HhRffrEJW/ZnAlA2w1CX0Fwl5ad601e3XQQRieHLxS3O1UWy4SQwQCxuTc3m0Oh 0jsu9d1e1IzKV5R2bPznL+JyfUp5EMeuYdVzzacy87DXwDcFqDUP9gzYomM0xvERQOHi /T7nxMz6rnzIA6eh4Nm8r2xoQXmy+3+bRKJhKcr1UMVUGs2zKdYhnfST1NJrBHiKXEtA HZQQ== X-Forwarded-Encrypted: i=1; AJvYcCVx0/kbv4l/Srq2inHU2QKRdqteEegX/P2hXpci0DR6N6XZ087w9iyAzhdpjj6pkspSJaP2bdvqyr74wfg=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+SHYD4Tj7r5Zy80pBgSGdH0ahbm7QNQhr9xdXfMTy9lwf8IoB ra3qoSd/a9TaVssWF6OGHt+evt81BV80RmCtsPatX1Ksl9P7BGU97QYMNQMh60zjzns= X-Gm-Gg: AY/fxX6ZOA95XIVp9DKcUAfYHmnr0FNpcwr+lNToXjuoLvP0l5bvRNnZ53ACRSVgkb0 BLvAZ1srkfoFDQMAHbYK9tHmNObuhn4nxqvDfUtQX8yTGvqNTKXC0LFPpDuoEqHRBE3WkoNZPd2 bcMiHmUa/yfJf5NBPeZr19mAPGWc+AvpMUAHOt5gEQAQtOofVPoQGq3xzHBjDy0njy9tT9OmCmN 4fhxFAslFssCCChKbO8L1CwzyJjZbiMe3RHnhDhKJhV8MqGZiATzo62b4efrcmLwNFu+HR9zzAK 37OnNNdDdp1Nt7xx0DWeMrSG7zdaqr5WF807plpJum3FUhop6pVuIFad2YCoAIZR43VSrNHV1o0 qQzS8uWbVbEh/JWDFdBZ3aYWx3HIjXX1WMEMWkkev4+TAqk6v6esEX5vna0/LSATPeJYmqdkRNU 6ZfK/LQNhC9nRQlCi6N7qh X-Google-Smtp-Source: AGHT+IHuJrYzbGSy3G76dO6PcCNRHA+ZNmNldDx24ULUjiT5Wo9EMki68zi3Oygn9G+PH2eBroytyA== X-Received: by 2002:a05:6402:35ca:b0:640:9993:3cb8 with SMTP id 4fb4d7f45d1cf-6499b16e779mr2529095a12.5.1765553580465; Fri, 12 Dec 2025 07:33:00 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.32.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:33:00 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:26 +0200 Subject: [PATCH v3 09/12] perf cs-etm: Don't use hard coded config bits when setting up ETMCR Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-9-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Perf only looks at attr.config when determining what was programmed into ETMCR. These bits could theoretically be in any of the config fields. Add a generic helper to find the value of any named format field in any config field and then use it to get the attributes relevant to ETMCR. The kernel will also stop publishing the ETMCR register bits in a header [1] so preempt that by defining them here. Move field_prep() to util.h so we can define it along side field_get(). Unfortunately FIELD_PREP() and FIELD_GET() from the kernel can't be used as they require the mask to be a compile time constant. [1]: https://lore.kernel.org/linux-arm-kernel/20251128-james-cs-syncfreq-v8= -10-4d319764cc58@linaro.org/ Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index 22c6272e8c367e5671809771b841c5babe2d5282..a5135b743e6f18789026323ea75= b2a78d6495d73 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -68,6 +68,12 @@ static const char * const metadata_ete_ro[] =3D { =20 enum cs_etm_version { CS_NOT_PRESENT, CS_ETMV3, CS_ETMV4, CS_ETE }; =20 + +/* ETMv3 ETMCR register bits */ +#define ETMCR_CYC_ACC BIT(12) +#define ETMCR_TIMESTAMP_EN BIT(28) +#define ETMCR_RETURN_STACK BIT(29) + static bool cs_etm_is_ete(struct perf_pmu *cs_etm_pmu, struct perf_cpu cpu= ); static int cs_etm_get_ro(struct perf_pmu *pmu, struct perf_cpu cpu, const = char *path, __u64 *val); static bool cs_etm_pmu_path_exists(struct perf_pmu *pmu, struct perf_cpu c= pu, const char *path); @@ -487,6 +493,33 @@ static int cs_etm_recording_options(struct auxtrace_re= cord *itr, return err; } =20 +static u64 cs_etm_synth_etmcr(struct auxtrace_record *itr) +{ + struct cs_etm_recording *ptr =3D + container_of(itr, struct cs_etm_recording, itr); + struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, cs_etm_pmu); + u64 etmcr =3D 0; + u64 val; + + if (!evsel) + return 0; + + /* + * Synthesize what the kernel programmed into ETMCR based on + * what options the event was opened with. This doesn't have to be + * complete or 100% accurate, not all bits used by OpenCSD anyway. + */ + if (!evsel__get_config_val(cs_etm_pmu, evsel, "cycacc", &val) && val) + etmcr |=3D ETMCR_CYC_ACC; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val) && val) + etmcr |=3D ETMCR_TIMESTAMP_EN; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "retstack", &val) && val) + etmcr |=3D ETMCR_RETURN_STACK; + + return etmcr; +} + static u64 cs_etm_get_config(struct auxtrace_record *itr) { struct cs_etm_recording *ptr =3D @@ -746,7 +779,7 @@ static void cs_etm_get_metadata(struct perf_cpu cpu, u3= 2 *offset, case CS_ETMV3: magic =3D __perf_cs_etmv3_magic; /* Get configuration register */ - info->priv[*offset + CS_ETM_ETMCR] =3D cs_etm_get_config(itr); + info->priv[*offset + CS_ETM_ETMCR] =3D cs_etm_synth_etmcr(itr); /* traceID set to legacy value in case new perf running on old system */ info->priv[*offset + CS_ETM_ETMTRACEIDR] =3D cs_etm_get_legacy_trace_id(= cpu); /* Get read-only information from sysFS */ --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) (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 D746B322B9E for ; Fri, 12 Dec 2025 15:33:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553586; cv=none; b=hPfjGZ1WP2Gw29DcqiIvkJUTxKfa5aVt2sr+9VBhg8CfkXfDrc/11pC0WBCU/GsZ/j3ge0bvknr+hzRuLQR0ybUcAEEOsTO7abx0M+Z0zR+R7HCXvufMXUDAmy0nKLCdGXgDCYcmT9H96cJOWuH17jHrLJz3h+WfiFLAKU02XM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553586; c=relaxed/simple; bh=CnG0U9L2o0XGUE2E9XPt0sxgf+zgqbEhTP9i+gzCgnM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DY9asAhjF03uo/2/3ZTtFTGLj5X3A8BaDix5Dmu8UPxQjd5xoLLIpw7lYYbE8/O6twRGybGZXobyRHawrCfhj7UcWSGkmw/ttauQuqCzCJtJSw/rqVqxODFK0CWTRw8PTFlEFHEtkSvVBCmoyhyinhy1/VeTFNMWH2O5NwGbXwE= 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=Ro0A0d//; arc=none smtp.client-ip=209.85.208.68 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="Ro0A0d//" Received: by mail-ed1-f68.google.com with SMTP id 4fb4d7f45d1cf-6419aaced59so2124347a12.0 for ; Fri, 12 Dec 2025 07:33:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553582; x=1766158382; 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=kIyylrKuVnmfqhBbx84gIScsHXdr4noRfgmns9UOCBc=; b=Ro0A0d//Lb61kONtE/ao7WV4yefPMrlMnNuZL6WrJtlx02MCnpxCRX2OcBy+vWiBzW gQio1NBk2goVVz2zPsNJ8E9b/nkZp75jxbUXrZqMm1KfMA3TvOZExN7qwFeatUH4hQBM 4eRvA4zQK9O4pa8pXNTl34Y8Je1Eju8dBJXKO31Y4zsFvwRwU0vzaWEModQaLzIgZ3Pf 7NABhCaR0emphM1+3EbXjTXsaLXt8mk4JIvQEMIxVUPsnG9FWuYPJkBoAAfheg7Ss4Sm o7olm6TG7GTdN0vFw4ETWvpAoLz8J/dbl3V6T8mBuAUkvBmBVNwnkXisEbCC3viTNxbb 0j/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553582; x=1766158382; 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=kIyylrKuVnmfqhBbx84gIScsHXdr4noRfgmns9UOCBc=; b=ecc0fRLNwj8jYL67tTRp7iFOUkuDSgykk7cAC7u83p3WrfdyjBfRCvbaJwSM75UGMU fajwXItYmprgxafjdokE2+pvSTpCg6/t5PRrrMI4rdD8uiEURMZR+OyW9DzJtgXWhcNV ZFNducwB9GAcYqOp68X//kqOlpATmy8wwUcaEH9/2wnHcfvCNqZt0zquAAULFZ1HllzT 1plba9QN2cDDbeS/Vj/It1krIPHJSSeUtpuqi1poD40giCaKunKK8Z/a9K06b1lLmxMT X0W6t/0A75EOegZ30EbxIjZPvMMWad7s3JM79GgMjMx6u3frTgc0UNy6WX5rc1/37P8n /yKg== X-Forwarded-Encrypted: i=1; AJvYcCWK0CPyVCTUoGdSE6G85DXnNPjs4bCf9e+7XdW5Ptfi3qbyb3q+oZaKjwQIdYk/n+wGfErbbhoMjpEkwlg=@vger.kernel.org X-Gm-Message-State: AOJu0YzwJ2XhxtP+OrqwZvNBFLOBI0CUiWAKt8FlE+0pwOAu1po1Ijcz /hJOU9Mk+SiCi4kdLjBvOZaALbgzaDBTIbW4q++pglX1FsH/A3ogl972q7INcjxpDkY= X-Gm-Gg: AY/fxX5IHlvqh8m4z06lPu9NPvVctNwwMKFeaRfULILDrZrRyMIGR4J+q4MsZQQPAkW o9UKgQGefvU4YrlcfKaO42zaa9GTWFMSnpYWjbbJaBX8xxpVOGeTOTZKMEjXQ1t9JZ5no9GeD0b v5mBhbLeznh0ANm512T/ab0AVyDewfkwTz13pPx+8hE9fl4cLbPkmXWb9yaSV94qcNhM3oHWbOH uiOpZwC+RdHse3ckFXfYkWWxHqgP3Ms3kz+VKQMXLmAviNSJsy6fmaMKhL5rvkq+hmjJg6hccOS hUanf+4bxK1jyxVAOZppUYIueCV7I+lFmDqB1r4ue4n5o9PgbwDTuEx1OxmeUh5IRrAR6TcsNLs dCxdKroGTpQ91CLbkV7RsHpIU2/EjRJFn8QjBigkkJ/MzxDUeWCqBFDz97di4K2K/yD9z1CHSwl 4ac10coZiEoc+qQhwA+5Jv X-Google-Smtp-Source: AGHT+IGnR0gQMQNB1+wHObkuQkoO/WDhs9GeM7GP+ll44IR076qgwRjFu3Xp62OThbWfaYmyOQtqjA== X-Received: by 2002:a05:6402:518b:b0:63c:690d:6a46 with SMTP id 4fb4d7f45d1cf-6499b190338mr2329332a12.13.1765553582073; Fri, 12 Dec 2025 07:33:02 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.33.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:33:01 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:27 +0200 Subject: [PATCH v3 10/12] perf cs-etm: Don't use hard coded config bits when setting up TRCCONFIGR Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-10-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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 , Leo Yan X-Mailer: b4 0.14.2 Perf only looks at attr.config when determining what was programmed into TRCCONFIGR. These bits could theoretically be in any of the config fields. Use the evsel__get_config_val() helper so it's agnostic to which config field they are in. The kernel will also stop publishing the TRCCONFIGR register bits in a header [1] so preempt that by defining them here. [1]: https://lore.kernel.org/linux-arm-kernel/20251128-james-cs-syncfreq-v8= -10-4d319764cc58@linaro.org/ Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 79 +++++++++++++++++------------------= ---- 1 file changed, 34 insertions(+), 45 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index a5135b743e6f18789026323ea75b2a78d6495d73..4a606b1e90f227aef9915e90439= b2a024eeabcfe 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -68,6 +68,14 @@ static const char * const metadata_ete_ro[] =3D { =20 enum cs_etm_version { CS_NOT_PRESENT, CS_ETMV3, CS_ETMV4, CS_ETE }; =20 +/* ETMv4 CONFIGR register bits */ +#define TRCCONFIGR_BB BIT(3) +#define TRCCONFIGR_CCI BIT(4) +#define TRCCONFIGR_CID BIT(6) +#define TRCCONFIGR_VMID BIT(7) +#define TRCCONFIGR_TS BIT(11) +#define TRCCONFIGR_RS BIT(12) +#define TRCCONFIGR_VMIDOPT BIT(15) =20 /* ETMv3 ETMCR register bits */ #define ETMCR_CYC_ACC BIT(12) @@ -520,56 +528,37 @@ static u64 cs_etm_synth_etmcr(struct auxtrace_record = *itr) return etmcr; } =20 -static u64 cs_etm_get_config(struct auxtrace_record *itr) +static u64 cs_etmv4_synth_trcconfigr(struct auxtrace_record *itr) { + u64 trcconfigr =3D 0; struct cs_etm_recording *ptr =3D - container_of(itr, struct cs_etm_recording, itr); + container_of(itr, struct cs_etm_recording, itr); struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; - struct evlist *evlist =3D ptr->evlist; - struct evsel *evsel =3D cs_etm_get_evsel(evlist, cs_etm_pmu); - - /* - * Variable perf_event_attr::config is assigned to - * ETMv3/PTM. The bit fields have been made to match - * the ETMv3.5 ETRMCR register specification. See the - * PMU_FORMAT_ATTR() declarations in - * drivers/hwtracing/coresight/coresight-perf.c for - * details. - */ - return evsel ? evsel->core.attr.config : 0; -} - -#ifndef BIT -#define BIT(N) (1UL << (N)) -#endif + struct evsel *evsel =3D cs_etm_get_evsel(ptr->evlist, cs_etm_pmu); + u64 val; =20 -static u64 cs_etmv4_get_config(struct auxtrace_record *itr) -{ - u64 config =3D 0; - u64 config_opts =3D 0; + if (!evsel) + return 0; =20 /* - * The perf event variable config bits represent both - * the command line options and register programming - * bits in ETMv3/PTM. For ETMv4 we must remap options - * to real bits + * Synthesize what the kernel programmed into TRCCONFIGR based on + * what options the event was opened with. This doesn't have to be + * complete or 100% accurate, not all bits used by OpenCSD anyway. */ - config_opts =3D cs_etm_get_config(itr); - if (config_opts & BIT(ETM_OPT_CYCACC)) - config |=3D BIT(ETM4_CFG_BIT_CYCACC); - if (config_opts & BIT(ETM_OPT_CTXTID)) - config |=3D BIT(ETM4_CFG_BIT_CTXTID); - if (config_opts & BIT(ETM_OPT_TS)) - config |=3D BIT(ETM4_CFG_BIT_TS); - if (config_opts & BIT(ETM_OPT_RETSTK)) - config |=3D BIT(ETM4_CFG_BIT_RETSTK); - if (config_opts & BIT(ETM_OPT_CTXTID2)) - config |=3D BIT(ETM4_CFG_BIT_VMID) | - BIT(ETM4_CFG_BIT_VMID_OPT); - if (config_opts & BIT(ETM_OPT_BRANCH_BROADCAST)) - config |=3D BIT(ETM4_CFG_BIT_BB); - - return config; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "cycacc", &val) && val) + trcconfigr |=3D TRCCONFIGR_CCI; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "contextid1", &val) && val) + trcconfigr |=3D TRCCONFIGR_CID; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val) && val) + trcconfigr |=3D TRCCONFIGR_TS; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "retstack", &val) && val) + trcconfigr |=3D TRCCONFIGR_RS; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "contextid2", &val) && val) + trcconfigr |=3D TRCCONFIGR_VMID | TRCCONFIGR_VMIDOPT; + if (!evsel__get_config_val(cs_etm_pmu, evsel, "branch_broadcast", &val) &= & val) + trcconfigr |=3D TRCCONFIGR_BB; + + return trcconfigr; } =20 static size_t @@ -691,7 +680,7 @@ static void cs_etm_save_etmv4_header(__u64 data[], stru= ct auxtrace_record *itr, struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; =20 /* Get trace configuration register */ - data[CS_ETMV4_TRCCONFIGR] =3D cs_etmv4_get_config(itr); + data[CS_ETMV4_TRCCONFIGR] =3D cs_etmv4_synth_trcconfigr(itr); /* traceID set to legacy version, in case new perf running on older syste= m */ data[CS_ETMV4_TRCTRACEIDR] =3D cs_etm_get_legacy_trace_id(cpu); =20 @@ -723,7 +712,7 @@ static void cs_etm_save_ete_header(__u64 data[], struct= auxtrace_record *itr, st struct perf_pmu *cs_etm_pmu =3D ptr->cs_etm_pmu; =20 /* Get trace configuration register */ - data[CS_ETE_TRCCONFIGR] =3D cs_etmv4_get_config(itr); + data[CS_ETE_TRCCONFIGR] =3D cs_etmv4_synth_trcconfigr(itr); /* traceID set to legacy version, in case new perf running on older syste= m */ data[CS_ETE_TRCTRACEIDR] =3D cs_etm_get_legacy_trace_id(cpu); =20 --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA9DA2F60A1 for ; Fri, 12 Dec 2025 15:33:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553589; cv=none; b=KOCosiXVVYQcfEvU/atDVVLWpve82SpyL473vpuWlSU6XRQHiMATGx+L4/CqxKoNn+NZY0SXWIto4WPNVjHfeddyc4ILy5k9ISSiPHgMyYV5m/2KbG985e5vKaiSXet3U2vyuB4In5Dzib6WyO/sghb0dm8XVFBx73HIgiV1N5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553589; c=relaxed/simple; bh=+yrQI73Lj/6kyvMP4ZVVuHkJzhmrKrpf7NHGZLhRzg8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bc6xFXRT1TUZtoXOtJwgbvseKP8IXYiNtpod6SE6aYOoIsGEV6vBgCVWevobgNpHy/4MSKkmbUIFGpq5IWCeY66dC6gVqwucfAUDNUBsnNxtbYLChE36jnWINutIUmKNzLgjhZ6wus/XGXyrpEEC1U7ZOUpcba7oOKBbjlzQc7s= 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=W1ZbJUyw; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="W1ZbJUyw" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b76b5afdf04so250747566b.1 for ; Fri, 12 Dec 2025 07:33:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553585; x=1766158385; 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=HW9vySL1eLI2H1Kn0+dJzMzzH5Eo6siVgDQRHUDflG4=; b=W1ZbJUywGGe6XrUe9xd1F17131VuF0RZK5XaCYtcbgsh9MC2xCc6wYhjB17KFyTXV+ lfVhQs4On/P2uoWVOgX6smZuoi89gPl74L0REB5lM0dpHBSJEfRUxGr9/3FdFUEkwqLG 8X3KQUQcym5nViTwEN7JPFiPFkdlrFgp5/n1cSlBkvRKuIyvGhvueVTllQfCyzY8nGWr 7k1y+2ibzQcEz4nBqNYrjT1Eu9QCQ2HOHkaF67N87RFk6YvNSMrlk8se1BogOE2iyRwi QMVSPJH4yLF1kmg+0JLLT/gXwMIyowK2RHbooESqTH1iOOpYIdMvh01e6Fe9psRye6vC pF+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553585; x=1766158385; 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=HW9vySL1eLI2H1Kn0+dJzMzzH5Eo6siVgDQRHUDflG4=; b=vjoZN+auLbo4rUeQWMls2x67F/yMaO2J4A3ZXA0nysMmlQYhRhrdrtVRsZxol4OSjV dMXdXswuK8YIWmCEVDgrlau+YaQsrXknKZMmegcEpNzHLacy/P8JVmH5WU+6byPKFeGu ZPrVSckwbjDSYVxMysBb2tqULYPLAuFDNdu7+8qf1K7rQ8GR2A2vJEd2hkpDMkH+BFit LwkArY635X1dUhu9mu089nR4nU3Yl491WTmG56hQ2OMhlOKnr3jdJHouIsAZvY5n5tJA +9KmvcrwQDvqiKLW3jI5dilGWQKh28CYlLcamfnSa+kxOfp8BUQayoTvAOrQOedaSGxw 88qw== X-Forwarded-Encrypted: i=1; AJvYcCWFh4Idr+EZK3KKZcLDU7ECxXGkxDUlE7ac1eyFJWpI3KKDuQp7RJeMrPb0zEf0UtWttMrROrh4U1sKbr0=@vger.kernel.org X-Gm-Message-State: AOJu0YwF0XYEdVrnAit4wwJWO/pIXM2q2MYt5KH4lBOnWaEkRmV1XV8C OQnM+t8ncm8C/kkuFKQgVN2DYKXiVpfjJW5r/O0MkTGrInWFg9Guqr7kVPw48pizIP8= X-Gm-Gg: AY/fxX6InCcSwmtHJ04Rs/4xg8a4bfCppD2qtCmiOLo2//Bdk35TPcKIwuuvIt97HGr RQp53933eVkMDdJLu6wXAbJ2DogEktolD+jLb5aXJdaPJunT+kT7AKyB1k2UicfqBBbGlasrZ7t dAFoCehekOyM6K8tCk6898x0j9XS3wY6gg08ca3HHpS6PkgFED6OJkl7lHRx7u/J13UhUPL1e+9 NFm14qOXWIXjxpP0w9XHkKe7td62USbhpQsC5VZ/pD4tC/h59WErD576wfKXzpW1XwovSL4Kz3X qbFByTCrjuqrq8iDSECbV2a6Rit4gkwJ4Hgi4oC74feKoYvSisubG4HtQiVeVxJx6kt9Ujw0mzT 2s3/ni0+W5ys1KuDdc9KLCnqahQoU39J2KCDlOdtzsBpiWxnf/B8nRyjzVUD3oYNjU8nh84uxy4 eynG5p9dYVN8cYoscrct5t X-Google-Smtp-Source: AGHT+IFzKlUxyQ53WXrw5hS/OfPtHid1213GH5FkblCTWns2qdDPxDDyZ/WVIFJPhZGFwV5zxjVgZA== X-Received: by 2002:a17:907:d22:b0:b76:b76e:112a with SMTP id a640c23a62f3a-b7d235c7f18mr229365366b.11.1765553584541; Fri, 12 Dec 2025 07:33:04 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.33.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:33:04 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:28 +0200 Subject: [PATCH v3 11/12] perf cs-etm: Don't hard code config attribute when configuring the event Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-11-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 These instances of hard coded config attributes are used for configuring and validating the event options. Use the config attribute that's published by the driver by replacing the open coded operations with evsel__get_config_val() and evsel__set_config_if_unset(). Signed-off-by: James Clark --- tools/perf/arch/arm/util/cs-etm.c | 57 +++++++++++++++++++----------------= ---- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/c= s-etm.c index 4a606b1e90f227aef9915e90439b2a024eeabcfe..bfb573cb587893b7d91b92fed4c= 61f421392fbcf 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -103,13 +103,14 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel struct perf_cpu cpu) { int err; - __u64 val; - u64 contextid =3D evsel->core.attr.config & - (perf_pmu__format_bits(cs_etm_pmu, "contextid") | - perf_pmu__format_bits(cs_etm_pmu, "contextid1") | - perf_pmu__format_bits(cs_etm_pmu, "contextid2")); + u64 ctxt, ctxt1, ctxt2; + __u64 trcidr2; =20 - if (!contextid) + evsel__get_config_val(cs_etm_pmu, evsel, "contextid", &ctxt); + evsel__get_config_val(cs_etm_pmu, evsel, "contextid1", &ctxt1); + evsel__get_config_val(cs_etm_pmu, evsel, "contextid2", &ctxt2); + + if (!ctxt && !ctxt1 && !ctxt2) return 0; =20 /* Not supported in etmv3 */ @@ -120,12 +121,11 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel } =20 /* Get a handle on TRCIDR2 */ - err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR2= ], &val); + err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR2= ], &trcidr2); if (err) return err; =20 - if (contextid & - perf_pmu__format_bits(cs_etm_pmu, "contextid1")) { + if (ctxt1) { /* * TRCIDR2.CIDSIZE, bit [9-5], indicates whether contextID * tracing is supported: @@ -133,15 +133,14 @@ static int cs_etm_validate_context_id(struct perf_pmu= *cs_etm_pmu, struct evsel * 0b00100 Maximum of 32-bit Context ID size. * All other values are reserved. */ - if (BMVAL(val, 5, 9) !=3D 0x4) { + if (BMVAL(trcidr2, 5, 9) !=3D 0x4) { pr_err("%s: CONTEXTIDR_EL1 isn't supported, disable with %s/contextid1= =3D0/\n", CORESIGHT_ETM_PMU_NAME, CORESIGHT_ETM_PMU_NAME); return -EINVAL; } } =20 - if (contextid & - perf_pmu__format_bits(cs_etm_pmu, "contextid2")) { + if (ctxt2) { /* * TRCIDR2.VMIDOPT[30:29] !=3D 0 and * TRCIDR2.VMIDSIZE[14:10] =3D=3D 0b00100 (32bit virtual contextid) @@ -149,7 +148,7 @@ static int cs_etm_validate_context_id(struct perf_pmu *= cs_etm_pmu, struct evsel * virtual context id is < 32bit. * Any value of VMIDSIZE >=3D 4 (i.e, > 32bit) is fine for us. */ - if (!BMVAL(val, 29, 30) || BMVAL(val, 10, 14) < 4) { + if (!BMVAL(trcidr2, 29, 30) || BMVAL(trcidr2, 10, 14) < 4) { pr_err("%s: CONTEXTIDR_EL2 isn't supported, disable with %s/contextid2= =3D0/\n", CORESIGHT_ETM_PMU_NAME, CORESIGHT_ETM_PMU_NAME); return -EINVAL; @@ -163,10 +162,11 @@ static int cs_etm_validate_timestamp(struct perf_pmu = *cs_etm_pmu, struct evsel * struct perf_cpu cpu) { int err; - __u64 val; + u64 val; + __u64 trcidr0; =20 - if (!(evsel->core.attr.config & - perf_pmu__format_bits(cs_etm_pmu, "timestamp"))) + evsel__get_config_val(cs_etm_pmu, evsel, "timestamp", &val); + if (!val) return 0; =20 if (cs_etm_get_version(cs_etm_pmu, cpu) =3D=3D CS_ETMV3) { @@ -176,7 +176,7 @@ static int cs_etm_validate_timestamp(struct perf_pmu *c= s_etm_pmu, struct evsel * } =20 /* Get a handle on TRCIRD0 */ - err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR0= ], &val); + err =3D cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETMV4_TRCIDR0= ], &trcidr0); if (err) return err; =20 @@ -187,10 +187,9 @@ static int cs_etm_validate_timestamp(struct perf_pmu *= cs_etm_pmu, struct evsel * * 0b00110 Implementation supports a maximum timestamp of 48bits. * 0b01000 Implementation supports a maximum timestamp of 64bits. */ - val &=3D GENMASK(28, 24); - if (!val) { + trcidr0 &=3D GENMASK(28, 24); + if (!trcidr0) return -EINVAL; - } =20 return 0; } @@ -273,16 +272,20 @@ static int cs_etm_parse_snapshot_options(struct auxtr= ace_record *itr, return 0; } =20 +/* + * The sink name format "@sink_name" is used, lookup the sink by name to c= onvert + * to "sinkid=3Dsink_hash" format. + * + * If the user has already manually provided a hash then "sinkid" isn't + * overwritten. If neither are provided then the driver will pick the best= sink. + */ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, struct evsel *evsel) { char msg[BUFSIZ], path[PATH_MAX], *sink; struct evsel_config_term *term; - int ret =3D -EINVAL; u32 hash; - - if (evsel->core.attr.config2 & GENMASK(31, 0)) - return 0; + int ret; =20 list_for_each_entry(term, &evsel->config_terms, list) { if (term->type !=3D EVSEL__CONFIG_TERM_DRV_CFG) @@ -305,14 +308,10 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu, return ret; } =20 - evsel->core.attr.config2 |=3D hash; + evsel__set_config_if_unset(pmu, evsel, "sinkid", hash); return 0; } =20 - /* - * No sink was provided on the command line - allow the CoreSight - * system to look for a default - */ return 0; } =20 --=20 2.34.1 From nobody Sun Dec 14 06:34:18 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.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 1A38C3233FA for ; Fri, 12 Dec 2025 15:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553591; cv=none; b=OvWCEz9V8F7wKQzVcoVEYqUPaXIkI0hqXETEaquWa/ecVROvJlLSJEPuHWLSnwuYCXdoIT5Nag5msad7hz5oK6iFXxNim6Rw51LVxuff1ai7cHTEbtrsYO3P5IxRA/vJbNjdy3X2Gip+/qd8cH+dcpCL1u32iIV1w4/RAobacGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765553591; c=relaxed/simple; bh=+3Y3lcxZMqFLbNOWqAJ1uO9Sw58KGFuwnvIdXYYIXjs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eZw65EeuxBjOs0FKdkWeAGTQNhKA7A2I4mBAdAZyxpvSYcLXueuNNDgTD4CTHlnsD8KG9LMzWwn8e66BI3pjrLuj4L8f4Otz18d3qJ9/QJfwCf4GtzWSNWDL02wDGoqphugX34pXEhnWF4WS/7l4BlJQPa76Bvv3Bv4d8hDs4nM= 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=lXjTv0nr; arc=none smtp.client-ip=209.85.218.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="lXjTv0nr" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b7636c96b9aso223177366b.2 for ; Fri, 12 Dec 2025 07:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765553586; x=1766158386; 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=40w1+RpiFWn7cLTaBFnZfKV4QslzhNGDu3cnJiEGNGY=; b=lXjTv0nrAbJPl9W3BvxIeEVMca+rsYwaijKtXfThOzay2EKojwvB3HihiRzMU1HwN7 5Co2ACZgtieBQYy43tKg5bJ+XVFAiBCmDEMJx24daizO+n8mSqpmeU4vHcKdMS+2ug2Q 6UNsn4IqXFUxB47yWHHiXi4DjynO5l3bX4MAHqMQuVp2OHROgd41p6rU/aDBFDSC0MIK 1BC91E01Mb+X5VDrn+WWHEYK4FHMML5C2UVLYKT67J9mLBh8oMXn1UiOraLeqoVJays0 hwGhad8bKnwJvx7qVI68C0DCJ841mMmRfZPtzozd7ZrhWXTlbO7CZvfQi8ZKJe1IStrJ s4Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765553586; x=1766158386; 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=40w1+RpiFWn7cLTaBFnZfKV4QslzhNGDu3cnJiEGNGY=; b=v6uTle0kQWmok/Qy6Fexl2Qcaa31NQMSCi5e/p58YvYz/U9Eg4FBvOA+SFqNhd8Oq+ HYzOJqIQyyFZUgVx8Gwi5ejKagmoHPjJN/KnVeK5/6P26y4V1gejAdKR0BzfiglfeElK 8E7lIzsjRkVqPKvsCYU4kIYFMkH1NwkRZXDViqWoOzEgsN7WBwBYlma1NLr4+pryLZ3K 9E4kKTHdaeJB7UlcCi0Q4390mE8N0zblthnQLIXnHLHwSeSMEL0bpJ498bIrdjdvqNP4 GJ8sc/S2Y4cULDsbd7z/awN+zvhPkulHy3eZu1jhf2h/v75HmFcdjTYPJw9CJnRugmzf Q3Ug== X-Forwarded-Encrypted: i=1; AJvYcCUtkqj65/qBBZbCUAYaqFtCDtSB6BXKF2KHltkDlB4vXG7MpB0A4XGQJB5JQ9uAdftDpbTA/45Xd5H3Sz4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4Dictgz202kBOVXu11LyVgKjD1yNyf2fqFNMeWQgorSrIC9ee N9vGOt4RFxtkQ6u+Gv1B42sP64zYmB79jHv232/CEzTsCsSF6A8mJc+kfHvO6RwUgDU= X-Gm-Gg: AY/fxX5tK694ZnRvCwC4groXJIva2OVo3LvePuOMDVXE/P9c+C2sdUwhfMBTjZutpBC 0fbZUUQvdqDDNELbkUSgxqyny7fYJ5yzUcnMk6gPQwzzl1rEy0UExYkFIrTmEvfTQdEEKMQkOP1 Ow3J4sXlnF2+9IrPNTr+Qqr8GbdakylUcwyWb2ZzBicqRKgNl5z18kUoQFpC8Br+pBJjAMNiUJQ MQZjUuUc6OWRlHq1ke07OaefRV0TfoY5WrRo2FhYwIg7Hmo+3ywhHpWIiOgdoUzUKaV5eVRpvFu MvjKGRSTOvcwVaImxvpVRiEfk/9gTqUKzVuTIY51+OnnlFdESli5pPUAuYeP/66DTSRPJmo6NT8 /8C5CUsG0iiH30hZQuDzARzozAswoR9nz+c+PCPuWydHgmTw52HXj9iOH/6uJXE53xlPi1RPZTm Lgn+mgiSHazwpf+PMAi/Jt X-Google-Smtp-Source: AGHT+IGymdzTOhM5jbelcMXcQ4KMKi4yIZCo10XakrCUVGapuKUtwGCZXcqj0byfMgnvUtzZVv51aQ== X-Received: by 2002:a17:907:1ca1:b0:b76:bfa9:5ae7 with SMTP id a640c23a62f3a-b7d236bcc17mr232174966b.29.1765553586158; Fri, 12 Dec 2025 07:33:06 -0800 (PST) Received: from e133063.arm.com ([130.185.218.160]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210ed32sm5433234a12.29.2025.12.12.07.33.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 07:33:05 -0800 (PST) From: James Clark Date: Fri, 12 Dec 2025 17:32:29 +0200 Subject: [PATCH v3 12/12] perf arm-spe: Don't hard code config attribute Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251212-james-perf-config-bits-v3-12-aa36a4846776@linaro.org> References: <20251212-james-perf-config-bits-v3-0-aa36a4846776@linaro.org> In-Reply-To: <20251212-james-perf-config-bits-v3-0-aa36a4846776@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.2 Use the config attribute that's published by the driver instead of hard coding "attr.config". Signed-off-by: James Clark --- tools/perf/arch/arm64/util/arm-spe.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/u= til/arm-spe.c index d5ec1408d0aec7e0d39a2cae7ad73694950ab67b..6c3dc97fde308cf4a1f289fab51= 01ead2765b140 100644 --- a/tools/perf/arch/arm64/util/arm-spe.c +++ b/tools/perf/arch/arm64/util/arm-spe.c @@ -256,7 +256,7 @@ static __u64 arm_spe_pmu__sample_period(const struct pe= rf_pmu *arm_spe_pmu) =20 static void arm_spe_setup_evsel(struct evsel *evsel, struct perf_cpu_map *= cpus) { - u64 bit; + u64 pa_enable_bit; =20 evsel->core.attr.freq =3D 0; evsel->core.attr.sample_period =3D arm_spe_pmu__sample_period(evsel->pmu); @@ -288,9 +288,10 @@ static void arm_spe_setup_evsel(struct evsel *evsel, s= truct perf_cpu_map *cpus) * inform that the resulting output's SPE samples contain physical addres= ses * where applicable. */ - bit =3D perf_pmu__format_bits(evsel->pmu, "pa_enable"); - if (evsel->core.attr.config & bit) - evsel__set_sample_bit(evsel, PHYS_ADDR); + + if (!evsel__get_config_val(evsel->pmu, evsel, "pa_enable", &pa_enable_bit= )) + if (pa_enable_bit) + evsel__set_sample_bit(evsel, PHYS_ADDR); } =20 static int arm_spe_setup_aux_buffer(struct record_opts *opts) @@ -397,6 +398,7 @@ static int arm_spe_recording_options(struct auxtrace_re= cord *itr, struct perf_cpu_map *cpus =3D evlist->core.user_requested_cpus; bool discard =3D false; int err; + u64 discard_bit; =20 sper->evlist =3D evlist; =20 @@ -425,9 +427,8 @@ static int arm_spe_recording_options(struct auxtrace_re= cord *itr, evlist__for_each_entry_safe(evlist, tmp, evsel) { if (evsel__is_aux_event(evsel)) { arm_spe_setup_evsel(evsel, cpus); - if (evsel->core.attr.config & - perf_pmu__format_bits(evsel->pmu, "discard")) - discard =3D true; + if (!evsel__get_config_val(evsel->pmu, evsel, "discard", &discard_bit)) + discard =3D !!discard_bit; } } =20 --=20 2.34.1