git: 8cc3815f02be - main - hwpmc_arm64: accept raw event codes for PMC_OP_PMCALLOCATE
Mitchell Horne
mhorne at FreeBSD.org
Wed Jun 30 19:49:15 UTC 2021
The branch main has been updated by mhorne:
URL: https://cgit.FreeBSD.org/src/commit/?id=8cc3815f02be9fa2a96e47713ad989e6d787e12a
commit 8cc3815f02be9fa2a96e47713ad989e6d787e12a
Author: Mitchell Horne <mhorne at FreeBSD.org>
AuthorDate: 2021-05-19 16:11:33 +0000
Commit: Mitchell Horne <mhorne at FreeBSD.org>
CommitDate: 2021-06-30 19:47:09 +0000
hwpmc_arm64: accept raw event codes for PMC_OP_PMCALLOCATE
Make it possible to specify event codes without an offset of
PMC_EV_ARMV8_FIRST, by setting a machine-dependent flag. This is
required to make use of event definitions from pmu-events.
Reviewed by: ray (slightly earlier version)
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30602
---
sys/arm64/include/pmc_mdep.h | 5 ++++-
sys/dev/hwpmc/hwpmc_arm64.c | 11 +++++++----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/sys/arm64/include/pmc_mdep.h b/sys/arm64/include/pmc_mdep.h
index bcf08a7f9551..f4f31aba6305 100644
--- a/sys/arm64/include/pmc_mdep.h
+++ b/sys/arm64/include/pmc_mdep.h
@@ -38,7 +38,10 @@
#include <dev/hwpmc/hwpmc_arm64.h>
union pmc_md_op_pmcallocate {
- uint64_t __pad[4];
+ uint32_t pm_md_flags;
+#define PM_MD_RAW_EVENT 0x1
+ uint32_t __pad32;
+ uint64_t __pad[3];
};
/* Logging */
diff --git a/sys/dev/hwpmc/hwpmc_arm64.c b/sys/dev/hwpmc/hwpmc_arm64.c
index be26605bad51..6b98fb46e7f1 100644
--- a/sys/dev/hwpmc/hwpmc_arm64.c
+++ b/sys/dev/hwpmc/hwpmc_arm64.c
@@ -181,11 +181,14 @@ arm64_allocate_pmc(int cpu, int ri, struct pmc *pm,
}
pe = a->pm_ev;
- config = (uint32_t)pe - PMC_EV_ARMV8_FIRST;
- if (config > (PMC_EV_ARMV8_LAST - PMC_EV_ARMV8_FIRST))
- return (EINVAL);
+ /* Adjust the config value if needed. */
+ config = (uint32_t)pe;
+ if ((a->pm_md.pm_md_flags & PM_MD_RAW_EVENT) == 0) {
+ config -= 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);
return (0);
More information about the dev-commits-src-all
mailing list