[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20260130182651.1576579-1-n7l8m4@u.northwestern.edu>
Date: Fri, 30 Jan 2026 18:26:51 +0000
From: Ziyi Guo <n7l8m4@...orthwestern.edu>
To: Bartosz Golaszewski <brgl@...nel.org>
Cc: linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org,
Ziyi Guo <n7l8m4@...orthwestern.edu>
Subject: [PATCH] power: pwrseq: fix missing state_lock in pwrseq_power_on() error path
pwrseq_power_on() calls pwrseq_unit_disable() when the
post_enable callback fails. However, this call is outside the
scoped_guard(mutex, &pwrseq->state_lock) block that ends.
pwrseq_unit_disable() has lockdep_assert_held(&pwrseq->state_lock),
which will fail when called from this error path.
Add the scoped_guard block to cover the post_enable callback and its
error handling to ensure the lock is held when pwrseq_unit_disable() is
called.
Signed-off-by: Ziyi Guo <n7l8m4@...orthwestern.edu>
---
drivers/power/sequencing/core.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/core.c
index 190564e55988..1fcf0af7cc0b 100644
--- a/drivers/power/sequencing/core.c
+++ b/drivers/power/sequencing/core.c
@@ -914,8 +914,10 @@ int pwrseq_power_on(struct pwrseq_desc *desc)
if (target->post_enable) {
ret = target->post_enable(pwrseq);
if (ret) {
- pwrseq_unit_disable(pwrseq, unit);
- desc->powered_on = false;
+ scoped_guard(mutex, &pwrseq->state_lock) {
+ pwrseq_unit_disable(pwrseq, unit);
+ desc->powered_on = false;
+ }
}
}
--
2.34.1
Powered by blists - more mailing lists