From c996fa11ce8616aa3e8f5ebc34aa31a73dafac60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ezequiel=20Rodriguez?= Date: Mon, 31 Aug 2026 12:53:36 -0300 Subject: [PATCH] power: supply: restore hwmon if extension update fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit power_supply_update_sysfs_and_hwmon() removes the existing hwmon group before recreating it. If recreation fails, register_extension() rolled back the extension but left hwmon absent. After tearing down the failed extension, best-effort recreate hwmon so the supply keeps its previous monitoring attributes when possible. Signed-off-by: Iván Ezequiel Rodriguez Link: https://patch.msgid.link/20260831155339.181487-3-ivanrwcm25@gmail.com Signed-off-by: Sebastian Reichel --- drivers/power/supply/power_supply_core.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c index 15dcbae82b3d..191cb50c2088 100644 --- a/drivers/power/supply/power_supply_core.c +++ b/drivers/power/supply/power_supply_core.c @@ -1595,6 +1595,16 @@ int power_supply_register_extension(struct power_supply *psy, const struct power sysfs_hwmon_failed: power_supply_sysfs_remove_extension(psy, ext); + list_del(®->list_head); + kfree(reg); + /* + * update_sysfs_and_hwmon() may have already torn down hwmon before + * failing to recreate it. Recreate without the failed extension. + */ + if (power_supply_add_hwmon_sysfs(psy)) + dev_warn(&psy->dev, "failed to restore hwmon after extension error\n"); + return ret; + sysfs_add_failed: list_del(®->list_head); kfree(reg);