Re: git: c1e813d12309 - main - hwpmc: Correct selection of Intel fixed counters.
Date: Wed, 19 Apr 2023 20:06:38 UTC
On Mon, May 30, 2022 at 7:05 PM Alexander Motin <mav@freebsd.org> wrote: > > The branch main has been updated by mav: > > URL: https://cgit.FreeBSD.org/src/commit/?id=c1e813d1230915e19a236ec687cadc1051841e56 > > commit c1e813d1230915e19a236ec687cadc1051841e56 > Author: Alexander Motin <mav@FreeBSD.org> > AuthorDate: 2022-05-30 23:46:48 +0000 > Commit: Alexander Motin <mav@FreeBSD.org> > CommitDate: 2022-05-31 00:05:15 +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 > --- > 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 fce97cbd5b8e..73cfee0b3975 100644 > --- a/sys/dev/hwpmc/hwpmc_core.c > +++ b/sys/dev/hwpmc/hwpmc_core.c > @@ -245,15 +245,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); Hey Alexander, This seems to break system-mode sampling of fixed-mode counters; e.g., from the manpage, `pmcstat -S instructions`, and I'm not at all familiar with these parts of pmc. We come in once with umask=1, ri=0; then again with umask=1, ri=1. The latter fails and we try umask=1, ri=2, which again fails, and the PMCALLOCATE op ultimately fails. Is `umask != ri + 1` correct, or should this be reverted back to `umask == 0x3 && ri != 2` or something else? I've no idea what the `umask` values represent in this context. Thanks, Kyle Evans