Skip to content

Commit

Permalink
s390/pai: simplify event start function for perf stat
Browse files Browse the repository at this point in the history
When an event is started, read the current value of the
PAI counter. This value is saved in event::hw.prev_count.
When an event is stopped, this value is subtracted from the current
value read out at event stop time. The difference is the delta
of this counter.

Simplify the logic and read the event value every time the event is
started. This scheme is identical to other device drivers.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
  • Loading branch information
Thomas Richter authored and Heiko Carstens committed Feb 20, 2024
1 parent fe861b0 commit 82cb9b6
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 15 deletions.
12 changes: 2 additions & 10 deletions arch/s390/kernel/perf_pai_crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,17 +326,9 @@ static void paicrypt_start(struct perf_event *event, int flags)
{
u64 sum;

/* Event initialization sets last_tag to 0. When later on the events
* are deleted and re-added, do not reset the event count value to zero.
* Events are added, deleted and re-added when 2 or more events
* are active at the same time.
*/
if (!event->attr.sample_period) { /* Counting */
if (!event->hw.last_tag) {
event->hw.last_tag = 1;
sum = paicrypt_getall(event); /* Get current value */
local64_set(&event->hw.prev_count, sum);
}
sum = paicrypt_getall(event); /* Get current value */
local64_set(&event->hw.prev_count, sum);
} else { /* Sampling */
perf_sched_cb_inc(event->pmu);
}
Expand Down
7 changes: 2 additions & 5 deletions arch/s390/kernel/perf_pai_ext.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,11 +331,8 @@ static void paiext_start(struct perf_event *event, int flags)
u64 sum;

if (!event->attr.sample_period) { /* Counting */
if (!event->hw.last_tag) {
event->hw.last_tag = 1;
sum = paiext_getall(event); /* Get current value */
local64_set(&event->hw.prev_count, sum);
}
sum = paiext_getall(event); /* Get current value */
local64_set(&event->hw.prev_count, sum);
} else { /* Sampling */
perf_sched_cb_inc(event->pmu);
}
Expand Down

0 comments on commit 82cb9b6

Please sign in to comment.