lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
 <GV1PR08MB1052186F99D5BFCF9169DD90FFB122@GV1PR08MB10521.eurprd08.prod.outlook.com>
Date: Wed, 8 Jan 2025 20:16:03 +0000
From: Yeo Reum Yun <YeoReum.Yun@....com>
To: James Clark <james.clark@...aro.org>,
	"linux-arm-kernel@...ts.infradead.org"
	<linux-arm-kernel@...ts.infradead.org>, "linux-perf-users@...r.kernel.org"
	<linux-perf-users@...r.kernel.org>, "irogers@...gle.com"
	<irogers@...gle.com>, "will@...nel.org" <will@...nel.org>, Mark Rutland
	<Mark.Rutland@....com>, "namhyung@...nel.org" <namhyung@...nel.org>,
	"acme@...nel.org" <acme@...nel.org>
CC: "robh@...nel.org" <robh@...nel.org>, Peter Zijlstra
	<peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>, Alexander Shishkin
	<alexander.shishkin@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>, Adrian
 Hunter <adrian.hunter@...el.com>, "Liang, Kan" <kan.liang@...ux.intel.com>,
	John Garry <john.g.garry@...cle.com>, Mike Leach <mike.leach@...aro.org>, Leo
 Yan <leo.yan@...ux.dev>, Graham Woodward <Graham.Woodward@....com>, Michael
 Petlan <mpetlan@...hat.com>, Veronika Molnarova <vmolnaro@...hat.com>, Athira
 Rajeev <atrajeev@...ux.vnet.ibm.com>, Thomas Richter <tmricht@...ux.ibm.com>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	"bpf@...r.kernel.org" <bpf@...r.kernel.org>
Subject: Re: [PATCH v3 1/5] perf: arm_spe: Add format option for discard mode

Reviewd-by: Yeoreum Yun <yeoreum.yun@....com>

________________________________________
From: James Clark <james.clark@...aro.org>
Sent: 08 January 2025 14:28
To: linux-arm-kernel@...ts.infradead.org; linux-perf-users@...r.kernel.org; irogers@...gle.com; Yeo Reum Yun; will@...nel.org; Mark Rutland; namhyung@...nel.org; acme@...nel.org
Cc: robh@...nel.org; James Clark; Peter Zijlstra; Ingo Molnar; Alexander Shishkin; Jiri Olsa; Adrian Hunter; Liang, Kan; John Garry; Mike Leach; Leo Yan; Graham Woodward; Michael Petlan; Veronika Molnarova; Athira Rajeev; Thomas Richter; linux-kernel@...r.kernel.org; bpf@...r.kernel.org
Subject: [PATCH v3 1/5] perf: arm_spe: Add format option for discard mode

FEAT_SPEv1p2 (optional from Armv8.6) adds a discard mode that allows all
SPE data to be discarded rather than written to memory. Add a format
bit for this mode.

If the mode isn't supported, the format bit isn't published and attempts
to use it will result in -EOPNOTSUPP. Allocating an aux buffer is still
allowed even though it won't be written to so that old tools continue to
work, but updated tools can choose to skip this step.

Signed-off-by: James Clark <james.clark@...aro.org>
---
 drivers/perf/arm_spe_pmu.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c
index fd5b78732603..f5e6878db9d6 100644
--- a/drivers/perf/arm_spe_pmu.c
+++ b/drivers/perf/arm_spe_pmu.c
@@ -85,6 +85,7 @@ struct arm_spe_pmu {
 #define SPE_PMU_FEAT_LDS                       (1UL << 4)
 #define SPE_PMU_FEAT_ERND                      (1UL << 5)
 #define SPE_PMU_FEAT_INV_FILT_EVT              (1UL << 6)
+#define SPE_PMU_FEAT_DISCARD                   (1UL << 7)
 #define SPE_PMU_FEAT_DEV_PROBED                        (1UL << 63)
        u64                                     features;

@@ -193,6 +194,9 @@ static const struct attribute_group arm_spe_pmu_cap_group = {
 #define ATTR_CFG_FLD_store_filter_CFG          config  /* PMSFCR_EL1.ST */
 #define ATTR_CFG_FLD_store_filter_LO           34
 #define ATTR_CFG_FLD_store_filter_HI           34
+#define ATTR_CFG_FLD_discard_CFG               config  /* PMBLIMITR_EL1.FM = DISCARD */
+#define ATTR_CFG_FLD_discard_LO                        35
+#define ATTR_CFG_FLD_discard_HI                        35

 #define ATTR_CFG_FLD_event_filter_CFG          config1 /* PMSEVFR_EL1 */
 #define ATTR_CFG_FLD_event_filter_LO           0
@@ -216,6 +220,7 @@ GEN_PMU_FORMAT_ATTR(store_filter);
 GEN_PMU_FORMAT_ATTR(event_filter);
 GEN_PMU_FORMAT_ATTR(inv_event_filter);
 GEN_PMU_FORMAT_ATTR(min_latency);
+GEN_PMU_FORMAT_ATTR(discard);

 static struct attribute *arm_spe_pmu_formats_attr[] = {
        &format_attr_ts_enable.attr,
@@ -228,6 +233,7 @@ static struct attribute *arm_spe_pmu_formats_attr[] = {
        &format_attr_event_filter.attr,
        &format_attr_inv_event_filter.attr,
        &format_attr_min_latency.attr,
+       &format_attr_discard.attr,
        NULL,
 };

@@ -238,6 +244,9 @@ static umode_t arm_spe_pmu_format_attr_is_visible(struct kobject *kobj,
        struct device *dev = kobj_to_dev(kobj);
        struct arm_spe_pmu *spe_pmu = dev_get_drvdata(dev);

+       if (attr == &format_attr_discard.attr && !(spe_pmu->features & SPE_PMU_FEAT_DISCARD))
+               return 0;
+
        if (attr == &format_attr_inv_event_filter.attr && !(spe_pmu->features & SPE_PMU_FEAT_INV_FILT_EVT))
                return 0;

@@ -502,6 +511,12 @@ static void arm_spe_perf_aux_output_begin(struct perf_output_handle *handle,
        u64 base, limit;
        struct arm_spe_pmu_buf *buf;

+       if (ATTR_CFG_GET_FLD(&event->attr, discard)) {
+               limit = FIELD_PREP(PMBLIMITR_EL1_FM, PMBLIMITR_EL1_FM_DISCARD);
+               limit |= PMBLIMITR_EL1_E;
+               goto out_write_limit;
+       }
+
        /* Start a new aux session */
        buf = perf_aux_output_begin(handle, event);
        if (!buf) {
@@ -743,6 +758,10 @@ static int arm_spe_pmu_event_init(struct perf_event *event)
            !(spe_pmu->features & SPE_PMU_FEAT_FILT_LAT))
                return -EOPNOTSUPP;

+       if (ATTR_CFG_GET_FLD(&event->attr, discard) &&
+           !(spe_pmu->features & SPE_PMU_FEAT_DISCARD))
+               return -EOPNOTSUPP;
+
        set_spe_event_has_cx(event);
        reg = arm_spe_event_to_pmscr(event);
        if (reg & (PMSCR_EL1_PA | PMSCR_EL1_PCT))
@@ -1027,6 +1046,9 @@ static void __arm_spe_pmu_dev_probe(void *info)
        if (FIELD_GET(PMSIDR_EL1_ERND, reg))
                spe_pmu->features |= SPE_PMU_FEAT_ERND;

+       if (spe_pmu->pmsver >= ID_AA64DFR0_EL1_PMSVer_V1P2)
+               spe_pmu->features |= SPE_PMU_FEAT_DISCARD;
+
        /* This field has a spaced out encoding, so just use a look-up */
        fld = FIELD_GET(PMSIDR_EL1_INTERVAL, reg);
        switch (fld) {
--
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ