Commit 441fa10a authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by Rafael J. Wysocki
Browse files

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: default avatarKai-Heng Feng <kaihengf@nvidia.com>
Reviewed-by: default avatarBreno Leitao <leitao@debian.org>
Reviewed-by: default avatarShiju Jose <shiju.jose@huawei.com>
Reviewed-by: default avatarShuai Xue <xueshuai@linux.alibaba.com>
Link: https://patch.msgid.link/20260330094203.38022-2-kaihengf@nvidia.com


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 591cd656
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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;
+11 −0
Original line number Diff line number Diff line
@@ -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);