[PATCH v14 16/24] platform/x86/intel/pmt: Register enumeration functions with resctrl

From: Tony Luck

Date: Mon Oct 19 2026 - 17:00:33 EST


resctrl enumerates Application Energy Telemetry (AET) features by calling
pmt_telemetry functions directly, which requires pmt_telemetry to be built
in. resctrl now provides functions with which pmt_telemetry can register
those enumeration functions instead.

Register the enumeration functions with resctrl when pmt_telemetry is
loaded, in preparation for resctrl calling them through the registration
and for pmt_telemetry being built as a module.

Register only after the driver has probed all telemetry devices so that resctrl
does not enumerate a partial set. Force synchronous probing to avoid issues
if kernel command line or module parameter requests asynchronous operation.

Unregister the enumeration functions before tearing down the telemetry
devices on unload, so that resctrl cannot start enumeration while they are
being removed.

Suggested-by: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx>
---
v14:
New commit message.
---
drivers/platform/x86/intel/pmt/telemetry.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/x86/intel/pmt/telemetry.c b/drivers/platform/x86/intel/pmt/telemetry.c
index 953f35b6daec..57eb2967a4d0 100644
--- a/drivers/platform/x86/intel/pmt/telemetry.c
+++ b/drivers/platform/x86/intel/pmt/telemetry.c
@@ -427,16 +427,29 @@ static struct auxiliary_driver pmt_telem_aux_driver = {
.id_table = pmt_telem_id_table,
.remove = pmt_telem_remove,
.probe = pmt_telem_probe,
+ .driver = {
+ .probe_type = PROBE_FORCE_SYNCHRONOUS,
+ },
};

static int __init pmt_telem_init(void)
{
- return auxiliary_driver_register(&pmt_telem_aux_driver);
+ int ret;
+
+ ret = auxiliary_driver_register(&pmt_telem_aux_driver);
+ if (ret)
+ return ret;
+
+ intel_aet_register_enumeration(THIS_MODULE, intel_pmt_get_regions_by_feature,
+ intel_pmt_put_feature_group);
+
+ return 0;
}
module_init(pmt_telem_init);

static void __exit pmt_telem_exit(void)
{
+ intel_aet_unregister_enumeration();
auxiliary_driver_unregister(&pmt_telem_aux_driver);
xa_destroy(&telem_array);
}
--
2.56.0