diff options
author | Mathieu Poirier <mathieu.poirier@linaro.org> | 2021-03-12 17:24:53 +0100 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2021-03-18 14:02:10 +0100 |
commit | 6e71d2b2a2b717c3bddbe72cdf48dd07d53f8364 (patch) | |
tree | 999d1f9f934118d6906ae3143671c2d61c103c47 /drivers/remoteproc/remoteproc_cdev.c | |
parent | remoteproc: Properly deal with a detach request when attached (diff) | |
download | linux-6e71d2b2a2b717c3bddbe72cdf48dd07d53f8364.tar.xz linux-6e71d2b2a2b717c3bddbe72cdf48dd07d53f8364.zip |
remoteproc: Refactor function rproc_cdev_release()
Refactor function rproc_cdev_release() to take into account the
current state of the remote processor when choosing the state to
transition to.
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20210312162453.1234145-18-mathieu.poirier@linaro.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Diffstat (limited to 'drivers/remoteproc/remoteproc_cdev.c')
-rw-r--r-- | drivers/remoteproc/remoteproc_cdev.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/remoteproc/remoteproc_cdev.c b/drivers/remoteproc/remoteproc_cdev.c index 2db494816d5f..0b8a84c04f76 100644 --- a/drivers/remoteproc/remoteproc_cdev.c +++ b/drivers/remoteproc/remoteproc_cdev.c @@ -86,11 +86,17 @@ static long rproc_device_ioctl(struct file *filp, unsigned int ioctl, unsigned l static int rproc_cdev_release(struct inode *inode, struct file *filp) { struct rproc *rproc = container_of(inode->i_cdev, struct rproc, cdev); + int ret = 0; + + if (!rproc->cdev_put_on_release) + return 0; - if (rproc->cdev_put_on_release && rproc->state == RPROC_RUNNING) + if (rproc->state == RPROC_RUNNING) rproc_shutdown(rproc); + else if (rproc->state == RPROC_ATTACHED) + ret = rproc_detach(rproc); - return 0; + return ret; } static const struct file_operations rproc_fops = { |