On 7/23/26 5:52 AM, Bjorn Andersson wrote:
> rproc_del() is subjected to the reference counted shutdown path, as such
> a remoteproc with more than one reference will be left running as its
> resources are released underneath it.
>
> Refactor the shutdown path such that the reference count value is
> ignored when called from rproc_del().
>
> Assisted-by: OpenCode:GPT-5.5
> Signed-off-by: Bjorn Andersson <[email protected]>
> ---
[...]
> +static int __rproc_shutdown(struct rproc *rproc, bool force)
> {
> struct device *dev = &rproc->dev;
> bool crashed;
> @@ -2029,9 +2008,10 @@ int rproc_shutdown(struct rproc *rproc)
> }
> crashed = rproc->state == RPROC_CRASHED;
>
> - /* if the remote proc is still needed, bail out */
> - if (!atomic_dec_and_test(&rproc->power))
> + if (!atomic_dec_and_test(&rproc->power) && !force) {
> + /* The remote processor is still needed by another user. */
> goto out;
> + }
GPT makes some unclear suggestions, effectively saying that rproc_shutdown(),
unlike other paths, seems not to first check whether the rproc is deleting
if the shutdown isn't forced. I think it's a valid concern.
Konrad