From 964baf9d35d5f88d8422f96d8a82c672042e7064 Mon Sep 17 00:00:00 2001 From: Thomas Richter Date: Tue, 18 Jun 2024 11:56:18 +0200 Subject: [PATCH] s390: Add counter definition for IBM z17 Add the libpfm4 s390 counter definitions for IBM z17 according to documentation: SA23-2261-09:The CPU-Measurement Facility Extended Counters Definition for z10, z196/z114, zEC12/zBC12, z13/z13s, z14, z15, z16 and z17 April 2025 https://www.ibm.com/docs/en/module_1678991624569/pdf/SA23-2261-09.pdf Signed-off-by: Thomas Richter --- lib/events/s390x_cpumf_events.h | 635 ++++++++++++++++++++++++++++++++ lib/pfmlib_s390x_cpumf.c | 7 +- 2 files changed, 641 insertions(+), 1 deletion(-) diff --git a/lib/events/s390x_cpumf_events.h b/lib/events/s390x_cpumf_events.h index 0eeeb7e..5a0b457 100644 --- a/lib/events/s390x_cpumf_events.h +++ b/lib/events/s390x_cpumf_events.h @@ -2843,6 +2843,641 @@ static const pme_cpumf_ctr_t cpumcf_z16_counters[] = { }, }; +static const pme_cpumf_ctr_t cpumcf_z17_counters[] = { + { + .ctrnum = 128, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "L1D_RO_EXCL_WRITES", + .desc = "A directory write to the Level-1 Data cache where" + " the line was originally in a Read-Only state in the" + " cache but has been updated to be in the Exclusive" + " state that allows stores to the cache line.", + }, + { + .ctrnum = 129, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DTLB2_WRITES", + .desc = "A translation has been written into The Translation" + " Lookaside Buffer 2 (TLB2) and the request was made" + " by the Level-1 Data cache. This is a replacement" + " for what was provided for the DTLB on z13 and prior" + " machines.", + }, + { + .ctrnum = 130, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DTLB2_MISSES", + .desc = "A TLB2 miss is in progress for a request made by" + " the Level-1 Data cache. Incremented by one for" + " every TLB2 miss in progress for the Level-1 Data" + " cache on this cycle. This is a replacement for what" + " was provided for the DTLB on z13 and prior" + " machines.", + }, + { + .ctrnum = 131, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "CRSTE_1MB_WRITES", + .desc = "A translation entry was written into the Combined" + " Region and Segment Table Entry array in the Level-2" + " TLB for a one-megabyte page.", + }, + { + .ctrnum = 132, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DTLB2_GPAGE_WRITES", + .desc = "A translation entry for a two-gigabyte page was" + " written into the Level-2 TLB.", + }, + { + .ctrnum = 134, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ITLB2_WRITES", + .desc = "A translation entry has been written into the" + " Translation Lookaside Buffer 2 (TLB2) and the" + " request was made by the Level-1 Instruction cache." + " This is a replacement for what was provided for the" + " ITLB on z13 and prior machines.", + }, + { + .ctrnum = 135, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ITLB2_MISSES", + .desc = "A TLB2 miss is in progress for a request made by" + " the Level-1 Instruction cache. Incremented by one" + " for every TLB2 miss in progress for the Level-1" + " Instruction cache in a cycle. This is a replacement" + " for what was provided for the ITLB on z13 and prior" + " machines.", + }, + { + .ctrnum = 137, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TLB2_PTE_WRITES", + .desc = "A translation entry was written into the Page Table" + " Entry array in the Level-2 TLB.", + }, + { + .ctrnum = 138, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TLB2_CRSTE_WRITES", + .desc = "Translation entries were written into the Combined" + " Region and Segment Table Entry array and the Page" + " Table Entry array in the Level-2 TLB.", + }, + { + .ctrnum = 139, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TLB2_ENGINES_BUSY", + .desc = "The number of Level-2 TLB translation engines busy" + " in a cycle.", + }, + { + .ctrnum = 140, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TX_C_TEND", + .desc = "A TEND instruction has completed in a constrained" + " transactional-execution mode.", + }, + { + .ctrnum = 141, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TX_NC_TEND", + .desc = "A TEND instruction has completed in a non-" + " constrained transactional-execution mode.", + }, + { + .ctrnum = 143, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "L1C_TLB2_MISSES", + .desc = "Increments by one for any cycle where a Level-1" + " cache or Level-2 TLB miss is in progress.", + }, + { + .ctrnum = 145, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_REQ", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache.", + }, + { + .ctrnum = 146, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_REQ_IV", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache with" + " intervention.", + }, + { + .ctrnum = 147, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_REQ_CHIP_HIT", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache after using" + " chip level horizontal persistence, Chip-HP hit.", + }, + { + .ctrnum = 148, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_REQ_DRAWER_HIT", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache after using" + " drawer level horizontal persistence, Drawer-HP hit.", + }, + { + .ctrnum = 149, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_CHIP", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache.", + }, + { + .ctrnum = 150, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_CHIP_IV", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache with intervention.", + }, + { + .ctrnum = 151, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_CHIP_CHIP_HIT", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache after using chip" + " level horizontal persistence, Chip-HP hit.", + }, + { + .ctrnum = 152, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_CHIP_DRAWER_HIT", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache after using drawer" + " level horizontal persistence, Drawer-HP hit.", + }, + { + .ctrnum = 153, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_MODULE", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Module Level-2 cache.", + }, + { + .ctrnum = 154, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_DRAWER", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an On-Drawer Level-2 cache.", + }, + { + .ctrnum = 155, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_OFF_DRAWER", + .desc = "A directory write to the Level-1 Data cache" + " directory where the returned cache line was sourced" + " from an Off-Drawer Level-2 cache.", + }, + { + .ctrnum = 156, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_CHIP_MEMORY", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from On-Chip memory.", + }, + { + .ctrnum = 157, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_MODULE_MEMORY", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from On-Module memory.", + }, + { + .ctrnum = 158, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_ON_DRAWER_MEMORY", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from On-Drawer memory.", + }, + { + .ctrnum = 159, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DCW_OFF_DRAWER_MEMORY", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from Off-Drawer memory.", + }, + { + .ctrnum = 160, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_MODULE_IV", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from an On-Module Level-2" + " cache with intervention.", + }, + { + .ctrnum = 161, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_MODULE_CHIP_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from an On-Module Level-2" + " cache after using chip level horizontal" + " persistence, Chip-HP hit.", + }, + { + .ctrnum = 162, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_MODULE_DRAWER_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from an On-Module Level-2" + " cache after using drawer level horizontal" + " persistence, Drawer-HP hit.", + }, + { + .ctrnum = 163, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_DRAWER_IV", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from an On-Drawer Level-2" + " cache with intervention.", + }, + { + .ctrnum = 164, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_DRAWER_CHIP_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " instruction cache directory where the returned" + " cache line was sourced from an On-Drawer Level-2" + " cache after using chip level horizontal" + " persistence, Chip-HP hit.", + }, + { + .ctrnum = 165, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_ON_DRAWER_DRAWER_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " instruction cache directory where the returned" + " cache line was sourced from an On-Drawer Level-2" + " cache after using drawer level horizontal" + " persistence, Drawer-HP hit.", + }, + { + .ctrnum = 166, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_OFF_DRAWER_IV", + .desc = "A directory write to the Level-1 Data or Level-1" + " instruction cache directory where the returned" + " cache line was sourced from an Off-Drawer Level-2" + " cache with intervention.", + }, + { + .ctrnum = 167, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_OFF_DRAWER_CHIP_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " instruction cache directory where the returned" + " cache line was sourced from an Off-Drawer Level-2" + " cache after using chip level horizontal" + " persistence, Chip-HP hit.", + }, + { + .ctrnum = 168, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "IDCW_OFF_DRAWER_DRAWER_HIT", + .desc = "A directory write to the Level-1 Data or Level-1" + " Instruction cache directory where the returned" + " cache line was sourced from an Off-Drawer Level-2" + " cache after using drawer level horizontal" + " persistence, Drawer-HP hit.", + }, + { + .ctrnum = 169, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_REQ", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " the requestors Level-2 cache.", + }, + { + .ctrnum = 170, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_REQ_IV", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache with" + " intervention.", + }, + { + .ctrnum = 171, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_REQ_CHIP_HIT", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache after using" + " chip level horizontal persistence, Chip-HP hit.", + }, + { + .ctrnum = 172, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_REQ_DRAWER_HIT", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from the requestors Level-2 cache after using" + " drawer level horizontal persistence, Drawer-HP hit.", + }, + { + .ctrnum = 173, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_CHIP", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache.", + }, + { + .ctrnum = 174, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_CHIP_IV", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache with intervention.", + }, + { + .ctrnum = 175, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_CHIP_CHIP_HIT", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Chip Level-2 cache after using chip" + " level horizontal persistence, Chip-HP hit.", + }, + { + .ctrnum = 176, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_CHIP_DRAWER_HIT", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Chip level 2 cache after using drawer" + " level horizontal persistence, Drawer-HP hit.", + }, + { + .ctrnum = 177, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_MODULE", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Module Level-2 cache.", + }, + { + .ctrnum = 178, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_ON_DRAWER", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an On-Drawer Level-2 cache.", + }, + { + .ctrnum = 179, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "ICW_OFF_DRAWER", + .desc = "A directory write to the Level-1 Instruction cache" + " directory where the returned cache line was sourced" + " from an Off-Drawer Level-2 cache.", + }, + { + .ctrnum = 202, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "CYCLES_SAMETHRD", + .desc = "The number of cycles the CPU is not in wait state" + " and the CPU is running by itself on the Core.", + }, + { + .ctrnum = 203, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "CYCLES_DIFFTHRD", + .desc = "The number of cycles the CPU is not in wait state" + " and the CPU is running with another thread on the" + " Core.", + }, + { + .ctrnum = 204, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "INST_SAMETHRD", + .desc = "The number of instructions executed on the CPU and" + " the CPU is running by itself on the Core.", + }, + { + .ctrnum = 205, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "INST_DIFFTHRD", + .desc = "The number of instructions executed on the CPU and" + " the CPU is running with another thread on the Core.", + }, + { + .ctrnum = 206, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "WRONG_BRANCH_PREDICTION", + .desc = "A count of the number of branches that were" + " predicted incorrectly by the branch prediction" + " logic in the Core. This includes incorrectly" + " predicted branches that are executed in Firmware." + " Examples of instructions implemented in Firmware" + " are complicated instructions like MVCL (Move" + " Character Long) and PC (Program Call).", + }, + { + .ctrnum = 225, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "VX_BCD_EXECUTION_SLOTS", + .desc = "Count of floating point execution slots used for" + " finished vector arithmetic Binary Coded Decimal" + " instructions. Instructions: VAP, VSP, VMP, VMSP," + " VDP, VSDP, VRP, VLIP, VSRP, VPSOP, VCP, VTP, VPKZ," + " VUPKZ, VCVB, VCVBG, VCVD, VCVDG, VSCHP, VSCSHP," + " VCSPH, VCLZDP, VPKZR, VSRPR, VUPKZH, VUPKZL, VTZ," + " VUPH, VUPL, VCVBX, VCVDX.", + }, + { + .ctrnum = 226, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DECIMAL_INSTRUCTIONS", + .desc = "Decimal instruction dispatched. Instructions: CVB," + " CVD, AP, CP, DP, ED, EDMK, MP, SRP, SP, ZAP, TP.", + }, + { + .ctrnum = 232, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "LAST_HOST_TRANSLATIONS", + .desc = "Last Host Translation done.", + }, + { + .ctrnum = 244, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TX_NC_TABORT", + .desc = "A transaction abort has occurred in a non-" + " constrained transactional-execution mode.", + }, + { + .ctrnum = 245, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TX_C_TABORT_NO_SPECIAL", + .desc = "A transaction abort has occurred in a constrained" + " transactional-execution mode and the CPU is not" + " using any special logic to allow the transaction to" + " complete.", + }, + { + .ctrnum = 246, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "TX_C_TABORT_SPECIAL", + .desc = "A transaction abort has occurred in a constrained" + " transactional-execution mode and the CPU is using" + " special logic to allow the transaction to complete.", + }, + { + .ctrnum = 248, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DFLT_ACCESS", + .desc = "Cycles CPU spent obtaining access to Deflate unit.", + }, + { + .ctrnum = 253, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DFLT_CYCLES", + .desc = "Cycles CPU is using Deflate unit.", + }, + { + .ctrnum = 256, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "SORTL", + .desc = "Increments by one for every SORT LISTS (SORTL)" + " instruction executed.", + }, + { + .ctrnum = 265, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DFLT_CC", + .desc = "Increments by one for every DEFLATE CONVERSION CALL" + " (DFLTCC) instruction executed.", + }, + { + .ctrnum = 266, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "DFLT_CCFINISH", + .desc = "Increments by one for every DEFLATE CONVERSION CALL" + " (DFLTCC) instruction executed that ended in" + " Condition Codes 0, 1 or 2.", + }, + { + .ctrnum = 267, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_INVOCATIONS", + .desc = "Increments by one for every NEURAL NETWORK" + " PROCESSING ASSIST (NNPA) instruction executed.", + }, + { + .ctrnum = 268, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_COMPLETIONS", + .desc = "Increments by one for every NEURAL NETWORK" + " PROCESSING ASSIST (NNPA) instruction executed that" + " ended in Condition Code 0.", + }, + { + .ctrnum = 269, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_WAIT_LOCK", + .desc = "Cycles CPU spent obtaining access to IBM Z" + " Integrated Accelerator for AI.", + }, + { + .ctrnum = 270, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_HOLD_LOCK", + .desc = "Cycles CPU is using IBM Z Integrated Accelerator" + " for AI.", + }, + { + .ctrnum = 272, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_INST_ONCHIP", + .desc = "A NEURAL NETWORK PROCESSING ASSIST (NNPA)" + " instruction has used the Local On-Chip IBM Z" + " Integrated Accelerator for AI during its execution", + }, + { + .ctrnum = 273, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_INST_OFFCHIP", + .desc = "A NEURAL NETWORK PROCESSING ASSIST (NNPA)" + " instruction has used an Off-Chip IBM Z Integrated" + " Accelerator for AI during its execution.", + }, + { + .ctrnum = 274, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_INST_DIFF", + .desc = "A NEURAL NETWORK PROCESSING ASSIST (NNPA)" + " instruction has used a different IBM Z Integrated" + " Accelerator for AI since it was last executed.", + }, + { + .ctrnum = 276, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_4K_PREFETCH", + .desc = "Number of 4K prefetches done for a remote IBM Z" + " Integated Accelerator for AI.", + }, + { + .ctrnum = 277, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_COMPL_LOCK", + .desc = "A PERFORM LOCKED OPERATION (PLO) has completed.", + }, + { + .ctrnum = 278, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_RETRY_LOCK", + .desc = "A PERFORM LOCKED OPERATION (PLO) has been retried and" + " the CPU did not use any special logic to allow the" + " PLO to complete.", + }, + { + .ctrnum = 279, + .ctrset = CPUMF_CTRSET_EXTENDED, + .name = "NNPA_RETRY_LOCK_WITH_PLO", + .desc = "A PERFORM LOCKED OPERATION (PLO) has been retried and" + " the CPU is using special logic to allow PLO to" + " complete.", + }, + { + .ctrnum = 448, + .ctrset = CPUMF_CTRSET_MT_DIAG, + .name = "MT_DIAG_CYCLES_ONE_THR_ACTIVE", + .desc = "Cycle count with one thread active", + }, + { + .ctrnum = 449, + .ctrset = CPUMF_CTRSET_MT_DIAG, + .name = "MT_DIAG_CYCLES_TWO_THR_ACTIVE", + .desc = "Cycle count with two threads active", + }, +}; + static const pme_cpumf_ctr_t cpumsf_counters[] = { { .ctrnum = 720896, diff --git a/lib/pfmlib_s390x_cpumf.c b/lib/pfmlib_s390x_cpumf.c index 718f5f8..35c1853 100644 --- a/lib/pfmlib_s390x_cpumf.c +++ b/lib/pfmlib_s390x_cpumf.c @@ -168,7 +168,7 @@ static int pfm_cpumcf_init(void *this) /* counters based on second version number */ csvn_set = cpumcf_svn_generic_counters; csvn_set_count = LIBPFM_ARRAY_SIZE(cpumcf_svn_generic_counters); - if (csvn < 6) /* Crypto counter set enlarged for SVN == 6 */ + if (csvn < 6) /* Crypto counter set enlarged for SVN == 6 7 and 8 */ csvn_set_count -= CPUMF_SVN6_ECC; /* check and assign a machine-specific extended counter set */ @@ -208,6 +208,11 @@ static int pfm_cpumcf_init(void *this) ext_set = cpumcf_z16_counters; ext_set_count = LIBPFM_ARRAY_SIZE(cpumcf_z16_counters); break; + case 9175: /* IBM Machine types 9175 and 9176 */ + case 9176: + ext_set = cpumcf_z17_counters; + ext_set_count = LIBPFM_ARRAY_SIZE(cpumcf_z17_counters); + break; default: /* No extended counter set for this machine type or there * was an error retrieving the machine type */ -- 2.52.0