Skip to content

Commit 654986e

Browse files
captain5050namhyung
authored andcommitted
perf pmu: Add calls enabling the hwmon_pmu
Add the base PMU calls necessary for hwmon_pmu(s) to be created/deleted and events found, listed, opened and read. Signed-off-by: Ian Rogers <[email protected]> Cc: Ravi Bangoria <[email protected]> Cc: Yoshihiro Furudera <[email protected]> Cc: Howard Chu <[email protected]> Cc: Ze Gao <[email protected]> Cc: Changbin Du <[email protected]> Cc: Junhao He <[email protected]> Cc: Weilin Wang <[email protected]> Cc: James Clark <[email protected]> Cc: Oliver Upton <[email protected]> Cc: Athira Jajeev <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Namhyung Kim <[email protected]>
1 parent 53cc0b3 commit 654986e

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

tools/perf/util/evsel.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
#include "off_cpu.h"
5757
#include "pmu.h"
5858
#include "pmus.h"
59+
#include "hwmon_pmu.h"
5960
#include "tool_pmu.h"
6061
#include "rlimit.h"
6162
#include "../perf-sys.h"
@@ -1799,6 +1800,9 @@ int evsel__read_counter(struct evsel *evsel, int cpu_map_idx, int thread)
17991800
if (evsel__is_tool(evsel))
18001801
return evsel__tool_pmu_read(evsel, cpu_map_idx, thread);
18011802

1803+
if (evsel__is_hwmon(evsel))
1804+
return evsel__hwmon_pmu_read(evsel, cpu_map_idx, thread);
1805+
18021806
if (evsel__is_retire_lat(evsel))
18031807
return evsel__read_retire_lat(evsel, cpu_map_idx, thread);
18041808

@@ -2465,6 +2469,11 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
24652469
start_cpu_map_idx,
24662470
end_cpu_map_idx);
24672471
}
2472+
if (evsel__is_hwmon(evsel)) {
2473+
return evsel__hwmon_pmu_open(evsel, threads,
2474+
start_cpu_map_idx,
2475+
end_cpu_map_idx);
2476+
}
24682477

24692478
for (idx = start_cpu_map_idx; idx < end_cpu_map_idx; idx++) {
24702479

tools/perf/util/pmu.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "debug.h"
1919
#include "evsel.h"
2020
#include "pmu.h"
21+
#include "hwmon_pmu.h"
2122
#include "pmus.h"
2223
#include "tool_pmu.h"
2324
#include <util/pmu-bison.h>
@@ -1529,6 +1530,9 @@ int perf_pmu__config_terms(const struct perf_pmu *pmu,
15291530
{
15301531
struct parse_events_term *term;
15311532

1533+
if (perf_pmu__is_hwmon(pmu))
1534+
return hwmon_pmu__config_terms(pmu, attr, terms, err);
1535+
15321536
list_for_each_entry(term, &terms->terms, list) {
15331537
if (pmu_config_term(pmu, attr, term, terms, zero, apply_hardcoded, err))
15341538
return -EINVAL;
@@ -1661,6 +1665,11 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct parse_events_terms *head_
16611665
info->scale = 0.0;
16621666
info->snapshot = false;
16631667

1668+
if (perf_pmu__is_hwmon(pmu)) {
1669+
ret = hwmon_pmu__check_alias(head_terms, info, err);
1670+
goto out;
1671+
}
1672+
16641673
/* Fake PMU doesn't rewrite terms. */
16651674
if (perf_pmu__is_fake(pmu))
16661675
goto out;
@@ -1834,6 +1843,8 @@ bool perf_pmu__have_event(struct perf_pmu *pmu, const char *name)
18341843
return false;
18351844
if (perf_pmu__is_tool(pmu) && tool_pmu__skip_event(name))
18361845
return false;
1846+
if (perf_pmu__is_hwmon(pmu))
1847+
return hwmon_pmu__have_event(pmu, name);
18371848
if (perf_pmu__find_alias(pmu, name, /*load=*/ true) != NULL)
18381849
return true;
18391850
if (pmu->cpu_aliases_added || !pmu->events_table)
@@ -1845,6 +1856,9 @@ size_t perf_pmu__num_events(struct perf_pmu *pmu)
18451856
{
18461857
size_t nr;
18471858

1859+
if (perf_pmu__is_hwmon(pmu))
1860+
return hwmon_pmu__num_events(pmu);
1861+
18481862
pmu_aliases_parse(pmu);
18491863
nr = pmu->sysfs_aliases + pmu->sys_json_aliases;
18501864

@@ -1908,6 +1922,9 @@ int perf_pmu__for_each_event(struct perf_pmu *pmu, bool skip_duplicate_pmus,
19081922
int ret = 0;
19091923
struct strbuf sb;
19101924

1925+
if (perf_pmu__is_hwmon(pmu))
1926+
return hwmon_pmu__for_each_event(pmu, state, cb);
1927+
19111928
strbuf_init(&sb, /*hint=*/ 0);
19121929
pmu_aliases_parse(pmu);
19131930
pmu_add_cpu_aliases(pmu);
@@ -2303,6 +2320,9 @@ int perf_pmu__pathname_fd(int dirfd, const char *pmu_name, const char *filename,
23032320

23042321
void perf_pmu__delete(struct perf_pmu *pmu)
23052322
{
2323+
if (perf_pmu__is_hwmon(pmu))
2324+
hwmon_pmu__exit(pmu);
2325+
23062326
perf_pmu__del_formats(&pmu->format);
23072327
perf_pmu__del_aliases(pmu);
23082328
perf_pmu__del_caps(pmu);

tools/perf/util/pmus.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "evsel.h"
1616
#include "pmus.h"
1717
#include "pmu.h"
18+
#include "hwmon_pmu.h"
1819
#include "tool_pmu.h"
1920
#include "print-events.h"
2021
#include "strbuf.h"
@@ -234,6 +235,7 @@ static void pmu_read_sysfs(bool core_only)
234235
if (!core_only) {
235236
tool_pmu = perf_pmus__tool_pmu();
236237
list_add_tail(&tool_pmu->list, &other_pmus);
238+
perf_pmus__read_hwmon_pmus(&other_pmus);
237239
}
238240
list_sort(NULL, &other_pmus, pmus_cmp);
239241
if (!list_empty(&core_pmus)) {

0 commit comments

Comments
 (0)