Skip to content

Commit 94249eb

Browse files
Fabien Dessennefourmone
authored andcommitted
perf: stm32: support the pmu ".read" ops
Implement the "event read" ops which is called, for example, when "perf stat" is called with the "-I" option. Signed-off-by: Fabien Dessenne <fabien.dessenne@foss.st.com> Change-Id: Ia0a1e16a117b580103bd8f14c72c11471d753488 Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/linux-stm32/+/225339 Reviewed-by: CITOOLS <MDG-smet-aci-reviews@list.st.com> Reviewed-by: CIBUILD <MDG-smet-aci-builds@list.st.com> Reviewed-by: Gerald BAEZA <gerald.baeza@foss.st.com>
1 parent bf42f0b commit 94249eb

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

drivers/perf/stm32_ddr_pmu.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ static void stm32_ddr_pmu_event_configure(struct perf_event *event)
8787
}
8888
}
8989

90-
static void stm32_ddr_pmu_event_read(struct perf_event *event)
90+
static void stm32_ddr_pmu_event_update(struct perf_event *event)
9191
{
9292
struct stm32_ddr_pmu *stm32_ddr_pmu = pmu_to_stm32_ddr_pmu(event->pmu);
9393
unsigned long config_base = event->hw.config_base;
@@ -120,6 +120,16 @@ static void stm32_ddr_pmu_event_read(struct perf_event *event)
120120
local64_add(val & mask, &event->count);
121121
}
122122

123+
static void stm32_ddr_pmu_event_read(struct perf_event *event)
124+
{
125+
struct stm32_ddr_pmu *stm32_ddr_pmu = pmu_to_stm32_ddr_pmu(event->pmu);
126+
127+
hrtimer_start(&stm32_ddr_pmu->hrtimer, stm32_ddr_pmu->poll_period,
128+
HRTIMER_MODE_REL_PINNED);
129+
130+
stm32_ddr_pmu_event_update(event);
131+
}
132+
123133
static void stm32_ddr_pmu_event_start(struct perf_event *event, int flags)
124134
{
125135
struct stm32_ddr_pmu *stm32_ddr_pmu = pmu_to_stm32_ddr_pmu(event->pmu);
@@ -165,7 +175,7 @@ static void stm32_ddr_pmu_event_stop(struct perf_event *event, int flags)
165175
hw->state |= PERF_HES_STOPPED;
166176

167177
if (flags & PERF_EF_UPDATE) {
168-
stm32_ddr_pmu_event_read(event);
178+
stm32_ddr_pmu_event_update(event);
169179
hw->state |= PERF_HES_UPTODATE;
170180
}
171181
}
@@ -260,7 +270,7 @@ static enum hrtimer_restart stm32_ddr_pmu_poll(struct hrtimer *hrtimer)
260270

261271
for (i = 0; i < PMU_NR_COUNTERS; i++)
262272
if (stm32_ddr_pmu->events[i])
263-
stm32_ddr_pmu_event_read(stm32_ddr_pmu->events[i]);
273+
stm32_ddr_pmu_event_update(stm32_ddr_pmu->events[i]);
264274

265275
hrtimer_forward_now(hrtimer, stm32_ddr_pmu->poll_period);
266276

@@ -362,6 +372,7 @@ static int stm32_ddr_pmu_device_probe(struct platform_device *pdev)
362372
.stop = stm32_ddr_pmu_event_stop,
363373
.add = stm32_ddr_pmu_event_add,
364374
.del = stm32_ddr_pmu_event_del,
375+
.read = stm32_ddr_pmu_event_read,
365376
.event_init = stm32_ddr_pmu_event_init,
366377
.attr_groups = stm32_ddr_pmu_attr_groups,
367378
};

0 commit comments

Comments
 (0)