This patch takes into account scenarios where a remote processor
has been attached to when receiving a "start" command from sysfs.

As with the case with the running state, the command can't be
carried out if the remote processor is already in operation.

Signed-off-by: Mathieu Poirier <mathieu.poir...@linaro.org>
Reviewed-by: Arnaud Pouliquen <arnaud.pouliq...@st.com>
---
 drivers/remoteproc/remoteproc_cdev.c  | 3 ++-
 drivers/remoteproc/remoteproc_sysfs.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_cdev.c 
b/drivers/remoteproc/remoteproc_cdev.c
index b19ea3057bde..b2cee9afb41b 100644
--- a/drivers/remoteproc/remoteproc_cdev.c
+++ b/drivers/remoteproc/remoteproc_cdev.c
@@ -32,7 +32,8 @@ static ssize_t rproc_cdev_write(struct file *filp, const char 
__user *buf, size_
                return -EFAULT;
 
        if (!strncmp(cmd, "start", len)) {
-               if (rproc->state == RPROC_RUNNING)
+               if (rproc->state == RPROC_RUNNING ||
+                   rproc->state == RPROC_ATTACHED)
                        return -EBUSY;
 
                ret = rproc_boot(rproc);
diff --git a/drivers/remoteproc/remoteproc_sysfs.c 
b/drivers/remoteproc/remoteproc_sysfs.c
index f9694def9b54..66801e6fe5cd 100644
--- a/drivers/remoteproc/remoteproc_sysfs.c
+++ b/drivers/remoteproc/remoteproc_sysfs.c
@@ -194,7 +194,8 @@ static ssize_t state_store(struct device *dev,
        int ret = 0;
 
        if (sysfs_streq(buf, "start")) {
-               if (rproc->state == RPROC_RUNNING)
+               if (rproc->state == RPROC_RUNNING ||
+                   rproc->state == RPROC_ATTACHED)
                        return -EBUSY;
 
                ret = rproc_boot(rproc);
-- 
2.25.1

Reply via email to