On Mon, Nov 09, 2020 at 10:14:22AM +0100, Arnaud POULIQUEN wrote: > > > On 10/30/20 8:57 PM, Mathieu Poirier wrote: > > Add a return value to function rproc_shutdown() in order to > > properly deal with error conditions that may occur. > > > > Signed-off-by: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx> > > Reviewed-by: Peng Fan <peng.fan@xxxxxxx> > > --- > > drivers/remoteproc/remoteproc_core.c | 13 +++++++++---- > > include/linux/remoteproc.h | 2 +- > > 2 files changed, 10 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > > index de5a5720d1e8..f58475f6dcab 100644 > > --- a/drivers/remoteproc/remoteproc_core.c > > +++ b/drivers/remoteproc/remoteproc_core.c > > @@ -1869,7 +1869,7 @@ EXPORT_SYMBOL(rproc_boot); > > * returns, and users can still use it with a subsequent rproc_boot(), if > > * needed. > > */ > > -void rproc_shutdown(struct rproc *rproc) > > +int rproc_shutdown(struct rproc *rproc) > > { > > struct device *dev = &rproc->dev; > > int ret; > > @@ -1877,15 +1877,19 @@ void rproc_shutdown(struct rproc *rproc) > > ret = mutex_lock_interruptible(&rproc->lock); > > if (ret) { > > dev_err(dev, "can't lock rproc %s: %d\n", rproc->name, ret); > > - return; > > + return ret; > > } > > > > - if (rproc->state != RPROC_RUNNING) > > + if (rproc->state != RPROC_RUNNING) { > > + ret = -EPERM; > > goto out; > > + } > > > > /* if the remote proc is still needed, bail out */ > > - if (!atomic_dec_and_test(&rproc->power)) > > + if (!atomic_dec_and_test(&rproc->power)) { > > + ret = -EBUSY; > > goto out; > > + } > > > > ret = rproc_stop(rproc, false); > > if (ret) { > > Few lines after in source code rproc_unprepare_device could also be tested You are correct > > Regards, > Arnaud > > > @@ -1907,6 +1911,7 @@ void rproc_shutdown(struct rproc *rproc) > > rproc->table_ptr = NULL; > > out: > > mutex_unlock(&rproc->lock); > > + return ret; > > } > > EXPORT_SYMBOL(rproc_shutdown); > > > > diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h > > index 6713faab6959..71d4d4873164 100644 > > --- a/include/linux/remoteproc.h > > +++ b/include/linux/remoteproc.h > > @@ -655,7 +655,7 @@ rproc_of_resm_mem_entry_init(struct device *dev, u32 of_resm_idx, size_t len, > > u32 da, const char *name, ...); > > > > int rproc_boot(struct rproc *rproc); > > -void rproc_shutdown(struct rproc *rproc); > > +int rproc_shutdown(struct rproc *rproc); > > int rproc_detach(struct rproc *rproc); > > void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type); > > int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size); > >