Linux-remoteproc Archive on lore.kernel.org
 help / color / Atom feed
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: bjorn.andersson@linaro.org, ohad@wizery.com
Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 10/13] remoteproc: Properly deal with a stop request when attached
Date: Wed, 26 Aug 2020 10:45:26 -0600
Message-ID: <20200826164529.224476-11-mathieu.poirier@linaro.org> (raw)
In-Reply-To: <20200826164529.224476-1-mathieu.poirier@linaro.org>

This patch introduces the capability to stop a remote processor
that has been attached to by the remoteproc core.  For that to
happen a rproc::ops::stop() operation need to be available.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
---
 drivers/remoteproc/remoteproc_cdev.c  | 5 +++--
 drivers/remoteproc/remoteproc_core.c  | 6 +++++-
 drivers/remoteproc/remoteproc_sysfs.c | 5 +++--
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_cdev.c b/drivers/remoteproc/remoteproc_cdev.c
index b19ea3057bde..d06f8d4919c7 100644
--- a/drivers/remoteproc/remoteproc_cdev.c
+++ b/drivers/remoteproc/remoteproc_cdev.c
@@ -37,10 +37,11 @@ static ssize_t rproc_cdev_write(struct file *filp, const char __user *buf, size_
 
 		ret = rproc_boot(rproc);
 	} else if (!strncmp(cmd, "stop", len)) {
-		if (rproc->state != RPROC_RUNNING)
+		if (rproc->state != RPROC_RUNNING &&
+		    rproc->state != RPROC_ATTACHED)
 			return -EINVAL;
 
-		rproc_shutdown(rproc);
+		ret = rproc_shutdown(rproc);
 	} else {
 		dev_err(&rproc->dev, "Unrecognized option\n");
 		ret = -EINVAL;
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index c6c6aba66098..95bb40b4ebb3 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -1619,6 +1619,10 @@ static int rproc_stop(struct rproc *rproc, bool crashed)
 	struct device *dev = &rproc->dev;
 	int ret;
 
+	/* No need to continue if a stop() operation has not been provided */
+	if (!rproc->ops->stop)
+		return -EINVAL;
+
 	/* Stop any subdevices for the remote processor */
 	rproc_stop_subdevices(rproc, crashed);
 
@@ -1857,7 +1861,7 @@ int rproc_shutdown(struct rproc *rproc)
 		return ret;
 	}
 
-	if (rproc->state != RPROC_RUNNING) {
+	if (rproc->state != RPROC_RUNNING && rproc->state != RPROC_ATTACHED) {
 		ret = -EPERM;
 		goto out;
 	}
diff --git a/drivers/remoteproc/remoteproc_sysfs.c b/drivers/remoteproc/remoteproc_sysfs.c
index c152d11a4d3c..6134d2f083ce 100644
--- a/drivers/remoteproc/remoteproc_sysfs.c
+++ b/drivers/remoteproc/remoteproc_sysfs.c
@@ -113,10 +113,11 @@ static ssize_t state_store(struct device *dev,
 		if (ret)
 			dev_err(&rproc->dev, "Boot failed: %d\n", ret);
 	} else if (sysfs_streq(buf, "stop")) {
-		if (rproc->state != RPROC_RUNNING)
+		if (rproc->state != RPROC_RUNNING &&
+		    rproc->state != RPROC_ATTACHED)
 			return -EINVAL;
 
-		rproc_shutdown(rproc);
+		ret = rproc_shutdown(rproc);
 	} else {
 		dev_err(&rproc->dev, "Unrecognised option: %s\n", buf);
 		ret = -EINVAL;
-- 
2.25.1


  parent reply index

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-26 16:45 [PATCH 00/13] remoteproc: Add support for detaching from rproc Mathieu Poirier
2020-08-26 16:45 ` [PATCH 01/13] remoteproc: Re-check state in rproc_shutdown() Mathieu Poirier
2020-10-15  1:28   ` Peng Fan
2020-08-26 16:45 ` [PATCH 02/13] remoteproc: Remove useless check in rproc_del() Mathieu Poirier
2020-10-15  1:29   ` Peng Fan
2020-08-26 16:45 ` [PATCH 03/13] remoteproc: Add new RPROC_ATTACHED state Mathieu Poirier
2020-10-15  1:31   ` Peng Fan
2020-08-26 16:45 ` [PATCH 04/13] remoteproc: Properly represent the attached state Mathieu Poirier
2020-10-15  1:33   ` Peng Fan
2020-08-26 16:45 ` [PATCH 05/13] remoteproc: Add new detach() remoteproc operation Mathieu Poirier
2020-10-15  1:37   ` Peng Fan
2020-10-22 21:51     ` Mathieu Poirier
2020-08-26 16:45 ` [PATCH 06/13] remoteproc: Introduce function __rproc_detach() Mathieu Poirier
2020-10-15  1:39   ` Peng Fan
2020-08-26 16:45 ` [PATCH 07/13] remoteproc: Introduce function rproc_detach() Mathieu Poirier
2020-10-15  1:52   ` Peng Fan
2020-10-22 21:55     ` Mathieu Poirier
2020-08-26 16:45 ` [PATCH 08/13] remoteproc: Rename function rproc_actuate() Mathieu Poirier
2020-10-15  2:15   ` Peng Fan
2020-08-26 16:45 ` [PATCH 09/13] remoteproc: Add return value to function rproc_shutdown() Mathieu Poirier
2020-10-15  2:21   ` Peng Fan
2020-08-26 16:45 ` Mathieu Poirier [this message]
2020-10-15  2:29   ` [PATCH 10/13] remoteproc: Properly deal with a stop request when attached Peng Fan
2020-08-26 16:45 ` [PATCH 11/13] remoteproc: Properly deal with detach request Mathieu Poirier
2020-10-15  2:30   ` Peng Fan
2020-08-26 16:45 ` [PATCH 12/13] remoteproc: Refactor rproc delete and cdev release path Mathieu Poirier
2020-10-15  2:31   ` Peng Fan
2020-08-26 16:45 ` [PATCH 13/13] remoteproc: Properly deal with a kernel panic when attached Mathieu Poirier
2020-10-15  2:28   ` Peng Fan
2020-09-01 16:55 ` [PATCH 00/13] remoteproc: Add support for detaching from rproc Arnaud POULIQUEN
2020-09-01 18:02   ` Mathieu Poirier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200826164529.224476-11-mathieu.poirier@linaro.org \
    --to=mathieu.poirier@linaro.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=ohad@wizery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-remoteproc Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-remoteproc/0 linux-remoteproc/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-remoteproc linux-remoteproc/ https://lore.kernel.org/linux-remoteproc \
		linux-remoteproc@vger.kernel.org
	public-inbox-index linux-remoteproc

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-remoteproc


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git