Skip to content

Commit 1eefa4f

Browse files
Thomas Richterhcahca
authored andcommitted
s390/cpumf: move counter set size calculation to common place
The function to calculate the size of counter sets is renamed from cf_diag_ctrset_size() to cpum_cf_ctrset_size() and moved to the file containing common functions for the CPU Measurement Counter Facility. No functional change. Signed-off-by: Thomas Richter <[email protected]> Acked-by : Sumanth Korikkar <[email protected]> Signed-off-by: Heiko Carstens <[email protected]>
1 parent 0cceeab commit 1eefa4f

File tree

3 files changed

+52
-50
lines changed

3 files changed

+52
-50
lines changed

arch/s390/include/asm/cpu_mcf.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,6 @@ static inline int stccm_avail(void)
123123
return test_facility(142);
124124
}
125125

126+
size_t cpum_cf_ctrset_size(enum cpumf_ctr_set ctrset,
127+
struct cpumf_ctr_info *info);
126128
#endif /* _ASM_S390_CPU_MCF_H */

arch/s390/kernel/perf_cpum_cf_common.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,52 @@ static int cpum_cf_offline_cpu(unsigned int cpu)
170170
return cpum_cf_setup(cpu, PMC_RELEASE);
171171
}
172172

173+
/* Return the maximum possible counter set size (in number of 8 byte counters)
174+
* depending on type and model number.
175+
*/
176+
size_t cpum_cf_ctrset_size(enum cpumf_ctr_set ctrset,
177+
struct cpumf_ctr_info *info)
178+
{
179+
size_t ctrset_size = 0;
180+
181+
switch (ctrset) {
182+
case CPUMF_CTR_SET_BASIC:
183+
if (info->cfvn >= 1)
184+
ctrset_size = 6;
185+
break;
186+
case CPUMF_CTR_SET_USER:
187+
if (info->cfvn == 1)
188+
ctrset_size = 6;
189+
else if (info->cfvn >= 3)
190+
ctrset_size = 2;
191+
break;
192+
case CPUMF_CTR_SET_CRYPTO:
193+
if (info->csvn >= 1 && info->csvn <= 5)
194+
ctrset_size = 16;
195+
else if (info->csvn == 6)
196+
ctrset_size = 20;
197+
break;
198+
case CPUMF_CTR_SET_EXT:
199+
if (info->csvn == 1)
200+
ctrset_size = 32;
201+
else if (info->csvn == 2)
202+
ctrset_size = 48;
203+
else if (info->csvn >= 3 && info->csvn <= 5)
204+
ctrset_size = 128;
205+
else if (info->csvn == 6)
206+
ctrset_size = 160;
207+
break;
208+
case CPUMF_CTR_SET_MT_DIAG:
209+
if (info->csvn > 3)
210+
ctrset_size = 48;
211+
break;
212+
case CPUMF_CTR_SET_MAX:
213+
break;
214+
}
215+
216+
return ctrset_size;
217+
}
218+
173219
static int __init cpum_cf_init(void)
174220
{
175221
int rc;

arch/s390/kernel/perf_cpum_cf_diag.c

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -316,52 +316,6 @@ static void cf_diag_read(struct perf_event *event)
316316
debug_sprintf_event(cf_diag_dbg, 5, "%s event %p\n", __func__, event);
317317
}
318318

319-
/* Return the maximum possible counter set size (in number of 8 byte counters)
320-
* depending on type and model number.
321-
*/
322-
static size_t cf_diag_ctrset_size(enum cpumf_ctr_set ctrset,
323-
struct cpumf_ctr_info *info)
324-
{
325-
size_t ctrset_size = 0;
326-
327-
switch (ctrset) {
328-
case CPUMF_CTR_SET_BASIC:
329-
if (info->cfvn >= 1)
330-
ctrset_size = 6;
331-
break;
332-
case CPUMF_CTR_SET_USER:
333-
if (info->cfvn == 1)
334-
ctrset_size = 6;
335-
else if (info->cfvn >= 3)
336-
ctrset_size = 2;
337-
break;
338-
case CPUMF_CTR_SET_CRYPTO:
339-
if (info->csvn >= 1 && info->csvn <= 5)
340-
ctrset_size = 16;
341-
else if (info->csvn == 6)
342-
ctrset_size = 20;
343-
break;
344-
case CPUMF_CTR_SET_EXT:
345-
if (info->csvn == 1)
346-
ctrset_size = 32;
347-
else if (info->csvn == 2)
348-
ctrset_size = 48;
349-
else if (info->csvn >= 3 && info->csvn <= 5)
350-
ctrset_size = 128;
351-
else if (info->csvn == 6)
352-
ctrset_size = 160;
353-
break;
354-
case CPUMF_CTR_SET_MT_DIAG:
355-
if (info->csvn > 3)
356-
ctrset_size = 48;
357-
break;
358-
case CPUMF_CTR_SET_MAX:
359-
break;
360-
}
361-
362-
return ctrset_size;
363-
}
364-
365319
/* Calculate memory needed to store all counter sets together with header and
366320
* trailer data. This is independend of the counter set authorization which
367321
* can vary depending on the configuration.
@@ -372,7 +326,7 @@ static size_t cf_diag_ctrset_maxsize(struct cpumf_ctr_info *info)
372326
enum cpumf_ctr_set i;
373327

374328
for (i = CPUMF_CTR_SET_BASIC; i < CPUMF_CTR_SET_MAX; ++i) {
375-
size_t size = cf_diag_ctrset_size(i, info);
329+
size_t size = cpum_cf_ctrset_size(i, info);
376330

377331
if (size)
378332
max_size += size * sizeof(u64) +
@@ -405,7 +359,7 @@ static size_t cf_diag_getctrset(struct cf_ctrset_entry *ctrdata, int ctrset,
405359
ctrdata->def = CF_DIAG_CTRSET_DEF;
406360
ctrdata->set = ctrset;
407361
ctrdata->res1 = 0;
408-
ctrset_size = cf_diag_ctrset_size(ctrset, &cpuhw->info);
362+
ctrset_size = cpum_cf_ctrset_size(ctrset, &cpuhw->info);
409363

410364
if (ctrset_size) { /* Save data */
411365
need = ctrset_size * sizeof(u64) + sizeof(*ctrdata);
@@ -845,7 +799,7 @@ static void cf_diag_cpu_read(void *parm)
845799

846800
if (!(p->sets & cpumf_ctr_ctl[set]))
847801
continue; /* Counter set not in list */
848-
set_size = cf_diag_ctrset_size(set, &cpuhw->info);
802+
set_size = cpum_cf_ctrset_size(set, &cpuhw->info);
849803
space = sizeof(csd->data) - csd->used;
850804
space = cf_diag_cpuset_read(sp, set, set_size, space);
851805
if (space) {
@@ -975,7 +929,7 @@ static size_t cf_diag_needspace(unsigned int sets)
975929
for (i = CPUMF_CTR_SET_BASIC; i < CPUMF_CTR_SET_MAX; ++i) {
976930
if (!(sets & cpumf_ctr_ctl[i]))
977931
continue;
978-
bytes += cf_diag_ctrset_size(i, &cpuhw->info) * sizeof(u64) +
932+
bytes += cpum_cf_ctrset_size(i, &cpuhw->info) * sizeof(u64) +
979933
sizeof(((struct s390_ctrset_setdata *)0)->set) +
980934
sizeof(((struct s390_ctrset_setdata *)0)->no_cnts);
981935
}

0 commit comments

Comments
 (0)