From: Mathieu Poirier <mathieu.poirier@linaro.org> To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: arnaud.pouliquen@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v8 12/17] remoteproc: Properly deal with the resource table when stopping Date: Fri, 12 Mar 2021 09:24:48 -0700 [thread overview] Message-ID: <20210312162453.1234145-13-mathieu.poirier@linaro.org> (raw) In-Reply-To: <20210312162453.1234145-1-mathieu.poirier@linaro.org> When a remote processor that was attached to is stopped, special care must be taken to make sure the shutdown process is similar to what it would be had it been started by the remoteproc core. This patch takes care of that by making a copy of the resource table currently used by the remote processor. From that point on the copy is used, as if the remote processor had been started by the remoteproc core. Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Reported-by: kernel test robot <lkp@intel.com> --- New for V8: - Removed variable @table_ptr as it served no purpose. --- drivers/remoteproc/remoteproc_core.c | 48 +++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 0f151dbcdc36..37b3b7d494e5 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1634,6 +1634,47 @@ static int rproc_reset_rsc_table_on_detach(struct rproc *rproc) return 0; } +static int rproc_reset_rsc_table_on_stop(struct rproc *rproc) +{ + /* A resource table was never retrieved, nothing to do here */ + if (!rproc->table_ptr) + return 0; + + /* + * If a cache table exists the remote processor was started by + * the remoteproc core. That cache table should be used for + * the rest of the shutdown process. + */ + if (rproc->cached_table) + goto out; + + /* + * If we made it here the remote processor was started by another + * entity and a cache table doesn't exist. As such make a copy of + * the resource table currently used by the remote processor and + * use that for the rest of the shutdown process. The memory + * allocated here is free'd in rproc_shutdown(). + */ + rproc->cached_table = kmemdup(rproc->table_ptr, + rproc->table_sz, GFP_KERNEL); + if (!rproc->cached_table) + return -ENOMEM; + + /* + * Since the remote processor is being switched off the clean table + * won't be needed. Allocated in rproc_set_rsc_table(). + */ + kfree(rproc->clean_table); + +out: + /* + * Use a copy of the resource table for the remainder of the + * shutdown process. + */ + rproc->table_ptr = rproc->cached_table; + return 0; +} + /* * Attach to remote processor - similar to rproc_fw_boot() but without * the steps that deal with the firmware image. @@ -1759,7 +1800,12 @@ static int rproc_stop(struct rproc *rproc, bool crashed) rproc_stop_subdevices(rproc, crashed); /* the installed resource table is no longer accessible */ - rproc->table_ptr = rproc->cached_table; + ret = rproc_reset_rsc_table_on_stop(rproc); + if (ret) { + dev_err(dev, "can't reset resource table: %d\n", ret); + return ret; + } + /* power off the remote processor */ ret = rproc->ops->stop(rproc); -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org> To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: arnaud.pouliquen@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v8 12/17] remoteproc: Properly deal with the resource table when stopping Date: Fri, 12 Mar 2021 09:24:48 -0700 [thread overview] Message-ID: <20210312162453.1234145-13-mathieu.poirier@linaro.org> (raw) In-Reply-To: <20210312162453.1234145-1-mathieu.poirier@linaro.org> When a remote processor that was attached to is stopped, special care must be taken to make sure the shutdown process is similar to what it would be had it been started by the remoteproc core. This patch takes care of that by making a copy of the resource table currently used by the remote processor. From that point on the copy is used, as if the remote processor had been started by the remoteproc core. Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Reported-by: kernel test robot <lkp@intel.com> --- New for V8: - Removed variable @table_ptr as it served no purpose. --- drivers/remoteproc/remoteproc_core.c | 48 +++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 0f151dbcdc36..37b3b7d494e5 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1634,6 +1634,47 @@ static int rproc_reset_rsc_table_on_detach(struct rproc *rproc) return 0; } +static int rproc_reset_rsc_table_on_stop(struct rproc *rproc) +{ + /* A resource table was never retrieved, nothing to do here */ + if (!rproc->table_ptr) + return 0; + + /* + * If a cache table exists the remote processor was started by + * the remoteproc core. That cache table should be used for + * the rest of the shutdown process. + */ + if (rproc->cached_table) + goto out; + + /* + * If we made it here the remote processor was started by another + * entity and a cache table doesn't exist. As such make a copy of + * the resource table currently used by the remote processor and + * use that for the rest of the shutdown process. The memory + * allocated here is free'd in rproc_shutdown(). + */ + rproc->cached_table = kmemdup(rproc->table_ptr, + rproc->table_sz, GFP_KERNEL); + if (!rproc->cached_table) + return -ENOMEM; + + /* + * Since the remote processor is being switched off the clean table + * won't be needed. Allocated in rproc_set_rsc_table(). + */ + kfree(rproc->clean_table); + +out: + /* + * Use a copy of the resource table for the remainder of the + * shutdown process. + */ + rproc->table_ptr = rproc->cached_table; + return 0; +} + /* * Attach to remote processor - similar to rproc_fw_boot() but without * the steps that deal with the firmware image. @@ -1759,7 +1800,12 @@ static int rproc_stop(struct rproc *rproc, bool crashed) rproc_stop_subdevices(rproc, crashed); /* the installed resource table is no longer accessible */ - rproc->table_ptr = rproc->cached_table; + ret = rproc_reset_rsc_table_on_stop(rproc); + if (ret) { + dev_err(dev, "can't reset resource table: %d\n", ret); + return ret; + } + /* power off the remote processor */ ret = rproc->ops->stop(rproc); -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-03-12 16:26 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-12 16:24 [PATCH v8 00/17] remoteproc: Add support for detaching a remote processor Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 01/17] remoteproc: Remove useless check in rproc_del() Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 02/17] remoteproc: Rename function rproc_actuate() Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 03/17] remoteproc: Add new RPROC_ATTACHED state Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 04/17] remoteproc: Properly represent the attached state Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 05/17] remoteproc: Add new get_loaded_rsc_table() to rproc_ops Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 06/17] remoteproc: stm32: Move resource table setup " Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 07/17] remoteproc: stm32: Move memory parsing " Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 08/17] remoteproc: Add new detach() remoteproc operation Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 09/17] remoteproc: Introduce function __rproc_detach() Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 10/17] remoteproc: Introduce function rproc_detach() Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 11/17] remoteproc: Properly deal with the resource table when detaching Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier [this message] 2021-03-12 16:24 ` [PATCH v8 12/17] remoteproc: Properly deal with the resource table when stopping Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 13/17] remoteproc: Properly deal with a kernel panic when attached Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 14/17] remoteproc: Properly deal with a start request " Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 15/17] remoteproc: Properly deal with a stop " Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 16/17] remoteproc: Properly deal with a detach " Mathieu Poirier 2021-03-12 16:24 ` Mathieu Poirier 2021-03-12 16:24 ` [PATCH v8 17/17] remoteproc: Refactor function rproc_cdev_release() Mathieu Poirier 2021-03-12 16:24 ` 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=20210312162453.1234145-13-mathieu.poirier@linaro.org \ --to=mathieu.poirier@linaro.org \ --cc=alexandre.torgue@st.com \ --cc=arnaud.pouliquen@st.com \ --cc=bjorn.andersson@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=mcoquelin.stm32@gmail.com \ --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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.