mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
remoteproc: Allow shutdown of crashed processors
rproc_shutdown() rejects a remoteproc in RPROC_CRASHED state, and
rproc_del() ignores that error. The result of these two decisions is
that a user cannot stop a remoteproc that with recovery disabled that
has entered a crash state, and removal of an associated remoteproc
driver will release resources without first stopping the remoteproc.
Allow rproc_shutdown() to stop crashed processors. Propagate the crash
state to subdevice teardown, to allow subdevices to dismantle things
appropriately.
Assisted-by: OpenCode:GPT-5.5
Fixes: 5e6a0e0527 ("remoteproc: core: Move state checking to remoteproc_core")
Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20260723-rproc-rmmod-not-crashing-v1-1-546dfd5de0e6@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
This commit is contained in:
parent
3db03f63ab
commit
2482ca875e
|
|
@ -2002,6 +2002,7 @@ EXPORT_SYMBOL(rproc_boot);
|
|||
int rproc_shutdown(struct rproc *rproc)
|
||||
{
|
||||
struct device *dev = &rproc->dev;
|
||||
bool crashed;
|
||||
int ret;
|
||||
|
||||
ret = mutex_lock_interruptible(&rproc->lock);
|
||||
|
|
@ -2011,16 +2012,18 @@ int rproc_shutdown(struct rproc *rproc)
|
|||
}
|
||||
|
||||
if (rproc->state != RPROC_RUNNING &&
|
||||
rproc->state != RPROC_ATTACHED) {
|
||||
rproc->state != RPROC_ATTACHED &&
|
||||
rproc->state != RPROC_CRASHED) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
crashed = rproc->state == RPROC_CRASHED;
|
||||
|
||||
/* if the remote proc is still needed, bail out */
|
||||
if (!atomic_dec_and_test(&rproc->power))
|
||||
goto out;
|
||||
|
||||
ret = rproc_stop(rproc, false);
|
||||
ret = rproc_stop(rproc, crashed);
|
||||
if (ret) {
|
||||
atomic_inc(&rproc->power);
|
||||
goto out;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user