git: 2154db222027 - stable/13 - hwpmc: Correct selection of Intel fixed counters.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 04 Jul 2022 18:09:19 UTC
The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=2154db2220272cfdb1cc5f88482d6ea02a4aa1f6 commit 2154db2220272cfdb1cc5f88482d6ea02a4aa1f6 Author: Alexander Motin <mav@FreeBSD.org> AuthorDate: 2022-05-30 23:46:48 +0000 Commit: Alexander Motin <mav@FreeBSD.org> CommitDate: 2022-07-04 17:48:09 +0000 hwpmc: Correct selection of Intel fixed counters. Intel json's use event=0 to specify fixed counter number via umask. Alternatively fixed counters have equivalent programmable event/umask. MFC after: 1 month (cherry picked from commit c1e813d1230915e19a236ec687cadc1051841e56) --- sys/dev/hwpmc/hwpmc_core.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/sys/dev/hwpmc/hwpmc_core.c b/sys/dev/hwpmc/hwpmc_core.c index 1581c28da78f..7d359e732291 100644 --- a/sys/dev/hwpmc/hwpmc_core.c +++ b/sys/dev/hwpmc/hwpmc_core.c @@ -248,15 +248,31 @@ iaf_allocate_pmc(int cpu, int ri, struct pmc *pm, ev = IAP_EVSEL_GET(config); umask = IAP_UMASK_GET(config); - /* INST_RETIRED.ANY */ - if (ev == 0xC0 && ri != 0) - return (EINVAL); - /* CPU_CLK_UNHALTED.THREAD */ - if (ev == 0x3C && ri != 1) - return (EINVAL); - /* CPU_CLK_UNHALTED.REF */ - if (ev == 0x0 && umask == 0x3 && ri != 2) - return (EINVAL); + if (ev == 0x0) { + if (umask != ri + 1) + return (EINVAL); + } else { + switch (ri) { + case 0: /* INST_RETIRED.ANY */ + if (ev != 0xC0 || umask != 0x00) + return (EINVAL); + break; + case 1: /* CPU_CLK_UNHALTED.THREAD */ + if (ev != 0x3C || umask != 0x00) + return (EINVAL); + break; + case 2: /* CPU_CLK_UNHALTED.REF */ + if (ev != 0x3C || umask != 0x01) + return (EINVAL); + break; + case 3: /* TOPDOWN.SLOTS */ + if (ev != 0xA4 || umask != 0x01) + return (EINVAL); + break; + default: + return (EINVAL); + } + } pmc_alloc_refs++; if ((cpu_stdext_feature3 & CPUID_STDEXT3_TSXFA) != 0 &&