Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Apr 2021 10:18:05 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 24b2f4ea4922 - main - arm64: Fix finding the pmc event ID
Message-ID:  <202104081018.138AI5IP012727@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=24b2f4ea49229618c5608846acfc10be2eb0d567

commit 24b2f4ea49229618c5608846acfc10be2eb0d567
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2021-04-01 14:38:09 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2021-04-08 07:52:21 +0000

    arm64: Fix finding the pmc event ID
    
    The lower pmc event bits were masked off to find the PMC event ID.
    The doesn't work when there are more events. Switch it to use the
    offser relative to the first event while also checking the ID is
    in the expected range.
    
    Reviewed by:    gnn, ray
    Sponsored by:   Innovate UK
    Differential Revision:  https://reviews.freebsd.org/D29600
---
 sys/dev/hwpmc/hwpmc_arm64.c | 4 +++-
 sys/dev/hwpmc/hwpmc_arm64.h | 1 -
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/sys/dev/hwpmc/hwpmc_arm64.c b/sys/dev/hwpmc/hwpmc_arm64.c
index 49375219a485..050f861a74fe 100644
--- a/sys/dev/hwpmc/hwpmc_arm64.c
+++ b/sys/dev/hwpmc/hwpmc_arm64.c
@@ -181,7 +181,9 @@ arm64_allocate_pmc(int cpu, int ri, struct pmc *pm,
 	}
 	pe = a->pm_ev;
 
-	config = (pe & EVENT_ID_MASK);
+	config = (uint32_t)pe - PMC_EV_ARMV8_FIRST;
+	if (config > (PMC_EV_ARMV8_LAST - PMC_EV_ARMV8_FIRST))
+		return (EINVAL);
 	pm->pm_md.pm_arm64.pm_arm64_evsel = config;
 
 	PMCDBG2(MDP, ALL, 2, "arm64-allocate ri=%d -> config=0x%x", ri, config);
diff --git a/sys/dev/hwpmc/hwpmc_arm64.h b/sys/dev/hwpmc/hwpmc_arm64.h
index f0d43aa58ef8..fb7637a39c60 100644
--- a/sys/dev/hwpmc/hwpmc_arm64.h
+++ b/sys/dev/hwpmc/hwpmc_arm64.h
@@ -40,7 +40,6 @@
 
 #define	ARMV8_RELOAD_COUNT_TO_PERFCTR_VALUE(R)	(-(R))
 #define	ARMV8_PERFCTR_VALUE_TO_RELOAD_COUNT(P)	(-(P))
-#define	EVENT_ID_MASK	0xFF
 
 #ifdef _KERNEL
 /* MD extension for 'struct pmc' */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104081018.138AI5IP012727>