From: Thomas Richter Date: Wed, 5 Nov 2025 14:38:54 +0000 (+0100) Subject: s390/pai_crypto: Add common pai_start() function X-Git-Tag: v6.19-rc1~206^2~21^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6fe66b21570f138017ee493b72cd4f724c8f1df1;p=thirdparty%2Flinux.git s390/pai_crypto: Add common pai_start() function To support one common PAI PMU device driver which handles both PMUs pai_crypto and pai_ext, use a common naming scheme for structures and variables suitable for both device drivers. Add a common usable function pai_start() to the event on a CPU. The function expects a PAI PMU specific read function as second parameter to read out the start value for an event. Signed-off-by: Thomas Richter Reviewed-by: Jan Polensky Signed-off-by: Heiko Carstens --- diff --git a/arch/s390/kernel/perf_pai_crypto.c b/arch/s390/kernel/perf_pai_crypto.c index 4eb1a09c36bd2..e7f2257641261 100644 --- a/arch/s390/kernel/perf_pai_crypto.c +++ b/arch/s390/kernel/perf_pai_crypto.c @@ -382,17 +382,20 @@ static void paicrypt_read(struct perf_event *event) pai_read(event, paicrypt_getall); } -static void paicrypt_start(struct perf_event *event, int flags) +static void pai_start(struct perf_event *event, int flags, + u64 (*fct)(struct perf_event *event)) { + int idx = PAI_PMU_IDX(event); + struct pai_pmu *pp = &pai_pmu[idx]; struct pai_mapptr *mp = this_cpu_ptr(pai_root.mapptr); struct pai_map *cpump = mp->mapptr; u64 sum; if (!event->attr.sample_period) { /* Counting */ - sum = paicrypt_getall(event); /* Get current value */ + sum = fct(event); /* Get current value */ local64_set(&event->hw.prev_count, sum); } else { /* Sampling */ - memcpy((void *)PAI_SAVE_AREA(event), cpump->area, PAGE_SIZE); + memcpy((void *)PAI_SAVE_AREA(event), cpump->area, pp->area_size); /* Enable context switch callback for system-wide sampling */ if (!(event->attach_state & PERF_ATTACH_TASK)) { list_add_tail(PAI_SWLIST(event), &cpump->syswide_list); @@ -403,6 +406,11 @@ static void paicrypt_start(struct perf_event *event, int flags) } } +static void paicrypt_start(struct perf_event *event, int flags) +{ + pai_start(event, flags, paicrypt_getall); +} + static int paicrypt_add(struct perf_event *event, int flags) { struct pai_mapptr *mp = this_cpu_ptr(pai_root.mapptr);