summaryrefslogtreecommitdiff
path: root/arch/s390
diff options
context:
space:
mode:
authorThomas Richter <tmricht@linux.ibm.com>2024-01-26 15:32:03 +0300
committerHeiko Carstens <hca@linux.ibm.com>2024-02-20 16:37:32 +0300
commit82cb9b618531109824eb8e25b6a3da28d33178ac (patch)
treecc695ff65ef627df733195c6e2ba5de0a4388dac /arch/s390
parentfe861b0c8d0693cb65fd45b7e8c756937b5182ae (diff)
downloadlinux-82cb9b618531109824eb8e25b6a3da28d33178ac.tar.xz
s390/pai: simplify event start function for perf stat
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>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kernel/perf_pai_crypto.c12
-rw-r--r--arch/s390/kernel/perf_pai_ext.c7
2 files changed, 4 insertions, 15 deletions
diff --git a/arch/s390/kernel/perf_pai_crypto.c b/arch/s390/kernel/perf_pai_crypto.c
index 8c98bd493707..61fb4e716476 100644
--- a/arch/s390/kernel/perf_pai_crypto.c
+++ b/arch/s390/kernel/perf_pai_crypto.c
@@ -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);
}
diff --git a/arch/s390/kernel/perf_pai_ext.c b/arch/s390/kernel/perf_pai_ext.c
index 21a18eafb576..dd84c4d6fbe9 100644
--- a/arch/s390/kernel/perf_pai_ext.c
+++ b/arch/s390/kernel/perf_pai_ext.c
@@ -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);
}