mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-17 03:57:28 -04:00
perf/x86/rapl: Move the cntr_mask to rapl_pmus struct
Prepare for the addition of RAPL core energy counter support. Move cntr_mask to rapl_pmus struct instead of adding a new global cntr_mask for the new RAPL power_core PMU. This will also ensure that the second "core_cntr_mask" is only created if needed (i.e. in case of AMD CPUs). Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: "Gautham R. Shenoy" <gautham.shenoy@amd.com> Reviewed-by: Zhang Rui <rui.zhang@intel.com> Tested-by: Zhang Rui <rui.zhang@intel.com> Link: https://lore.kernel.org/r/20241115060805.447565-10-Dhananjay.Ugwekar@amd.com
This commit is contained in:
committed by
Peter Zijlstra
parent
bdc57ec705
commit
54d2759778
@@ -129,6 +129,7 @@ struct rapl_pmu {
|
||||
struct rapl_pmus {
|
||||
struct pmu pmu;
|
||||
unsigned int nr_rapl_pmu;
|
||||
unsigned int cntr_mask;
|
||||
struct rapl_pmu *rapl_pmu[] __counted_by(nr_rapl_pmu);
|
||||
};
|
||||
|
||||
@@ -148,7 +149,6 @@ struct rapl_model {
|
||||
/* 1/2^hw_unit Joule */
|
||||
static int rapl_pkg_hw_unit[NR_RAPL_PKG_DOMAINS] __read_mostly;
|
||||
static struct rapl_pmus *rapl_pmus_pkg;
|
||||
static unsigned int rapl_pkg_cntr_mask;
|
||||
static u64 rapl_timer_ms;
|
||||
static struct rapl_model *rapl_model;
|
||||
|
||||
@@ -364,7 +364,7 @@ static int rapl_pmu_event_init(struct perf_event *event)
|
||||
bit = cfg - 1;
|
||||
|
||||
/* check event supported */
|
||||
if (!(rapl_pkg_cntr_mask & (1 << bit)))
|
||||
if (!(rapl_pmus_pkg->cntr_mask & (1 << bit)))
|
||||
return -EINVAL;
|
||||
|
||||
/* unsupported modes and filters */
|
||||
@@ -592,10 +592,10 @@ static void __init rapl_advertise(void)
|
||||
int i;
|
||||
|
||||
pr_info("API unit is 2^-32 Joules, %d fixed counters, %llu ms ovfl timer\n",
|
||||
hweight32(rapl_pkg_cntr_mask), rapl_timer_ms);
|
||||
hweight32(rapl_pmus_pkg->cntr_mask), rapl_timer_ms);
|
||||
|
||||
for (i = 0; i < NR_RAPL_PKG_DOMAINS; i++) {
|
||||
if (rapl_pkg_cntr_mask & (1 << i)) {
|
||||
if (rapl_pmus_pkg->cntr_mask & (1 << i)) {
|
||||
pr_info("hw unit of domain %s 2^-%d Joules\n",
|
||||
rapl_pkg_domain_names[i], rapl_pkg_hw_unit[i]);
|
||||
}
|
||||
@@ -810,9 +810,6 @@ static int __init rapl_pmu_init(void)
|
||||
|
||||
rapl_model = (struct rapl_model *) id->driver_data;
|
||||
|
||||
rapl_pkg_cntr_mask = perf_msr_probe(rapl_model->rapl_pkg_msrs, PERF_RAPL_PKG_EVENTS_MAX,
|
||||
false, (void *) &rapl_model->pkg_events);
|
||||
|
||||
ret = rapl_check_hw_unit();
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -821,6 +818,10 @@ static int __init rapl_pmu_init(void)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
rapl_pmus_pkg->cntr_mask = perf_msr_probe(rapl_model->rapl_pkg_msrs,
|
||||
PERF_RAPL_PKG_EVENTS_MAX, false,
|
||||
(void *) &rapl_model->pkg_events);
|
||||
|
||||
ret = perf_pmu_register(&rapl_pmus_pkg->pmu, "power", -1);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
Reference in New Issue
Block a user