aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBojan Novković <bnovkov@FreeBSD.org>2026-03-21 14:37:44 +0000
committerBojan Novković <bnovkov@FreeBSD.org>2026-03-24 10:34:12 +0000
commit6ad94d549eb2286d791abd5634400d8ef36d8259 (patch)
treeb0258fa68fe3f509e8f20bfc9998d971952f95c8
parentcb9e24221672a7f77c858518c292c1eac09b3740 (diff)
libpmc/pmu-events: Add support for new json fields
This change adds support for three new Intel fields to jevents.c: - MetricThreshold - MetricgroupNoGroup - DefaultMetricgroupName Reviewed by: ali_mashtizadeh.com, mhorne Differential Revision: https://reviews.freebsd.org/D56017 MFC after: 1 week
-rw-r--r--lib/libpmc/pmu-events/jevents.c24
-rw-r--r--lib/libpmc/pmu-events/pmu-events.h3
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/libpmc/pmu-events/jevents.c b/lib/libpmc/pmu-events/jevents.c
index b129b3706832..facec3361c70 100644
--- a/lib/libpmc/pmu-events/jevents.c
+++ b/lib/libpmc/pmu-events/jevents.c
@@ -71,8 +71,11 @@ struct json_event {
char *perpkg;
char *aggr_mode;
char *metric_expr;
+ char *metric_threshold;
char *metric_name;
char *metric_group;
+ char *metric_group_nogroup;
+ char *default_metric_group;
char *deprecated;
char *metric_constraint;
};
@@ -379,10 +382,16 @@ static int print_events_table_entry(void *data, struct json_event *je)
fprintf(outfp, "\t.aggr_mode = \"%d\",\n", convert(je->aggr_mode));
if (je->metric_expr)
fprintf(outfp, "\t.metric_expr = \"%s\",\n", je->metric_expr);
+ if (je->metric_threshold)
+ fprintf(outfp, "\t.metric_threshold = \"%s\",\n", je->metric_threshold);
if (je->metric_name)
fprintf(outfp, "\t.metric_name = \"%s\",\n", je->metric_name);
if (je->metric_group)
fprintf(outfp, "\t.metric_group = \"%s\",\n", je->metric_group);
+ if (je->metric_group_nogroup)
+ fprintf(outfp, "\t.metric_group_nogroup = \"%s\",\n", je->metric_group_nogroup);
+ if (je->default_metric_group)
+ fprintf(outfp, "\t.default_metric_group = \"%s\",\n", je->default_metric_group);
if (je->deprecated)
fprintf(outfp, "\t.deprecated = \"%s\",\n", je->deprecated);
if (je->metric_constraint)
@@ -404,8 +413,11 @@ struct event_struct {
char *perpkg;
char *aggr_mode;
char *metric_expr;
+ char *metric_threshold;
char *metric_name;
char *metric_group;
+ char *metric_group_nogroup;
+ char *default_metric_group;
char *deprecated;
char *metric_constraint;
};
@@ -434,8 +446,11 @@ struct event_struct {
op(perpkg); \
op(aggr_mode); \
op(metric_expr); \
+ op(metric_threshold); \
op(metric_name); \
op(metric_group); \
+ op(metric_group_nogroup); \
+ op(default_metric_group); \
op(deprecated); \
} while (0)
@@ -711,10 +726,16 @@ static int json_events(const char *fn,
addfield(map, &je.metric_name, "", "", val);
} else if (json_streq(map, field, "MetricGroup")) {
addfield(map, &je.metric_group, "", "", val);
+ } else if (json_streq(map, field, "MetricgroupNoGroup")) {
+ addfield(map, &je.metric_group_nogroup, "", "", val);
+ } else if (json_streq(map, field, "DefaultMetricgroupName")) {
+ addfield(map, &je.default_metric_group, "", "", val);
} else if (json_streq(map, field, "MetricConstraint")) {
addfield(map, &je.metric_constraint, "", "", val);
} else if (json_streq(map, field, "MetricExpr")) {
addfield(map, &je.metric_expr, "", "", val);
+ } else if (json_streq(map, field, "MetricThreshold")) {
+ addfield(map, &je.metric_threshold, "", "", val);
} else if (json_streq(map, field, "ArchStdEvent")) {
addfield(map, &arch_std, "", "", val);
for (s = arch_std; *s; s++)
@@ -866,8 +887,11 @@ free_strings:
free(je.deprecated);
free(je.unit);
free(je.metric_expr);
+ free(je.metric_threshold);
free(je.metric_name);
free(je.metric_group);
+ free(je.metric_group_nogroup);
+ free(je.default_metric_group);
free(je.metric_constraint);
free(arch_std);
diff --git a/lib/libpmc/pmu-events/pmu-events.h b/lib/libpmc/pmu-events/pmu-events.h
index d9edbfba7ceb..1a158a5f16f2 100644
--- a/lib/libpmc/pmu-events/pmu-events.h
+++ b/lib/libpmc/pmu-events/pmu-events.h
@@ -24,8 +24,11 @@ struct pmu_event {
const char *perpkg;
const char *aggr_mode;
const char *metric_expr;
+ const char *metric_threshold;
const char *metric_name;
const char *metric_group;
+ const char *metric_group_nogroup;
+ const char *default_metric_group;
const char *deprecated;
const char *metric_constraint;
};