git: 28dd6730a5d6 - main - libpmc: enable pmu_utils on arm64

Mitchell Horne mhorne at FreeBSD.org
Wed Jun 30 19:49:16 UTC 2021


The branch main has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=28dd6730a5d6bc73aca4c015c0ff875a9def25ac

commit 28dd6730a5d6bc73aca4c015c0ff875a9def25ac
Author:     Mitchell Horne <mhorne at FreeBSD.org>
AuthorDate: 2021-05-27 20:02:04 +0000
Commit:     Mitchell Horne <mhorne at FreeBSD.org>
CommitDate: 2021-06-30 19:47:18 +0000

    libpmc: enable pmu_utils on arm64
    
    This allows supported libpmc to query/select from the pmu-events table,
    which may have a more complete set of events than what we define
    manually. A future update to these definitions should greatly improve
    this support. The alias table is empty for now, until this future import
    is complete.
    
    Add the Foundation's copyright for recent work on this file.
    
    Reviewed by:    ray (slightly earlier version)
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D30603
---
 lib/libpmc/libpmc_pmu_util.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/lib/libpmc/libpmc_pmu_util.c b/lib/libpmc/libpmc_pmu_util.c
index 81320a3dc954..d33abdb50acc 100644
--- a/lib/libpmc/libpmc_pmu_util.c
+++ b/lib/libpmc/libpmc_pmu_util.c
@@ -2,6 +2,10 @@
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
  * Copyright (c) 2018, Matthew Macy
+ * Copyright (c) 2021, The FreeBSD Foundation
+ *
+ * Portions of this software were developed by Mitchell Horne
+ * under sponsorship from the FreeBSD Foundation.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -139,6 +143,24 @@ pmu_alias_get(const char *name)
 	return (name);
 }
 
+#elif defined(__aarch64__)
+
+static struct pmu_alias pmu_armv8_alias_table[] = {
+	{NULL, NULL},
+};
+
+static const char *
+pmu_alias_get(const char *name)
+{
+	struct pmu_alias *pa;
+
+	for (pa = pmu_armv8_alias_table; pa->pa_alias != NULL; pa++)
+		if (strcasecmp(name, pa->pa_alias) == 0)
+			return (pa->pa_name);
+
+	return (name);
+}
+
 #else
 
 static const char *
@@ -549,6 +571,28 @@ pmc_pmu_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm)
 		return (pmc_pmu_amd_pmcallocate(event_name, pm, &ped));
 }
 
+#elif defined(__aarch64__)
+
+int
+pmc_pmu_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm)
+{
+	const struct pmu_event *pe;
+	int idx = -1;
+
+	event_name = pmu_alias_get(event_name);
+	if ((pe = pmu_event_get(NULL, event_name, &idx)) == NULL)
+		return (ENOENT);
+	if (pe->event == NULL)
+		return (ENOENT);
+
+	assert(idx >= 0);
+	pm->pm_md.pm_md_flags |= PM_MD_RAW_EVENT;
+	pm->pm_class = PMC_CLASS_ARMV8;
+	pm->pm_caps |= (PMC_CAP_READ | PMC_CAP_WRITE);
+
+	return (0);
+}
+
 #else
 
 int


More information about the dev-commits-src-all mailing list