From: Kai-Heng Feng Date: Mon, 30 Mar 2026 09:41:55 +0000 (+0800) Subject: ACPI: APEI: GHES: Add devm_ghes_register_vendor_record_notifier() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=441fa10a5a1978e7a2f751f2d6f6a9194056262e;p=thirdparty%2Flinux.git ACPI: APEI: GHES: Add devm_ghes_register_vendor_record_notifier() Add a device-managed wrapper around ghes_register_vendor_record_notifier() so drivers can avoid manual cleanup on device removal or probe failure. Signed-off-by: Kai-Heng Feng Reviewed-by: Breno Leitao Reviewed-by: Shiju Jose Reviewed-by: Shuai Xue Link: https://patch.msgid.link/20260330094203.38022-2-kaihengf@nvidia.com Signed-off-by: Rafael J. Wysocki --- diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 8acd2742bb27d..3236a3ce79d6b 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -689,6 +689,24 @@ void ghes_unregister_vendor_record_notifier(struct notifier_block *nb) } EXPORT_SYMBOL_GPL(ghes_unregister_vendor_record_notifier); +static void ghes_vendor_record_notifier_destroy(void *nb) +{ + ghes_unregister_vendor_record_notifier(nb); +} + +int devm_ghes_register_vendor_record_notifier(struct device *dev, + struct notifier_block *nb) +{ + int ret; + + ret = ghes_register_vendor_record_notifier(nb); + if (ret) + return ret; + + return devm_add_action_or_reset(dev, ghes_vendor_record_notifier_destroy, nb); +} +EXPORT_SYMBOL_GPL(devm_ghes_register_vendor_record_notifier); + static void ghes_vendor_record_work_func(struct work_struct *work) { struct ghes_vendor_record_entry *entry; diff --git a/include/acpi/ghes.h b/include/acpi/ghes.h index 7bea522c06575..8d7e5caef3f18 100644 --- a/include/acpi/ghes.h +++ b/include/acpi/ghes.h @@ -71,6 +71,17 @@ int ghes_register_vendor_record_notifier(struct notifier_block *nb); */ void ghes_unregister_vendor_record_notifier(struct notifier_block *nb); +/** + * devm_ghes_register_vendor_record_notifier - device-managed vendor + * record notifier registration. + * @dev: device that owns the notifier lifetime + * @nb: pointer to the notifier_block structure of the vendor record handler + * + * Return: 0 on success, negative errno on failure. + */ +int devm_ghes_register_vendor_record_notifier(struct device *dev, + struct notifier_block *nb); + struct list_head *ghes_get_devices(void); void ghes_estatus_pool_region_free(unsigned long addr, u32 size);