From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966982AbcHBPUm (ORCPT ); Tue, 2 Aug 2016 11:20:42 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:5583 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934995AbcHBPSK (ORCPT ); Tue, 2 Aug 2016 11:18:10 -0400 Subject: Re: [PATCH 3/4] remoteproc: Move vdev handling to boot/shutdown To: Bjorn Andersson , References: <1470077883-7419-1-git-send-email-bjorn.andersson@linaro.org> <1470077883-7419-3-git-send-email-bjorn.andersson@linaro.org> CC: Ohad Ben-Cohen , , Lee Jones From: loic pallardy Message-ID: <57A0B988.50803@st.com> Date: Tue, 2 Aug 2016 17:17:28 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: <1470077883-7419-3-git-send-email-bjorn.andersson@linaro.org> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.201.23.23] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-08-02_11:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Bjorn, On 08/01/2016 08:58 PM, Bjorn Andersson wrote: > The newly introduced "always-on" flag allows us to stop giving the vdevs > special treatment. The ordering of resource allocation and life cycle of > the remote processor is kept intact. > > This allows us to mark a remote processor with vdevs to not boot unless > explicitly requested to do so by a client driver. > > Cc: Lee Jones > Cc: Loic Pallardy > Signed-off-by: Bjorn Andersson > --- > drivers/remoteproc/remoteproc_core.c | 34 ++++++++++++++-------------------- > 1 file changed, 14 insertions(+), 20 deletions(-) > > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > index 084ebffdfc47..9d64409f3839 100644 > --- a/drivers/remoteproc/remoteproc_core.c > +++ b/drivers/remoteproc/remoteproc_core.c > @@ -753,6 +753,7 @@ static int rproc_handle_resources(struct rproc *rproc, int len, > static void rproc_resource_cleanup(struct rproc *rproc) > { > struct rproc_mem_entry *entry, *tmp; > + struct rproc_vdev *rvdev, *rvtmp; > struct device *dev = &rproc->dev; > > /* clean up debugfs trace entries */ > @@ -785,6 +786,10 @@ static void rproc_resource_cleanup(struct rproc *rproc) > list_del(&entry->node); > kfree(entry); > } > + > + /* clean up remote vdev entries */ > + list_for_each_entry_safe(rvdev, rvtmp, &rproc->rvdevs, node) > + rproc_remove_virtio_dev(rvdev); > } > > /* > @@ -835,6 +840,13 @@ static int rproc_fw_boot(struct rproc *rproc, const struct firmware *fw) > /* reset max_notifyid */ > rproc->max_notifyid = -1; > > + /* look for virtio devices and register them */ > + ret = rproc_handle_resources(rproc, tablesz, rproc_vdev_handler); > + if (ret) { > + dev_err(dev, "Failed to handle vdev resources: %d\n", ret); > + goto clean_up; > + } > + > /* handle fw resources which are required to boot rproc */ > ret = rproc_handle_resources(rproc, tablesz, rproc_loading_handlers); > if (ret) { > @@ -898,7 +910,7 @@ static void rproc_fw_config_virtio(const struct firmware *fw, void *context) > { > struct rproc *rproc = context; > struct resource_table *table; > - int ret, tablesz; > + int tablesz; > > if (rproc_fw_sanity_check(rproc, fw) < 0) > goto out; > @@ -922,9 +934,6 @@ static void rproc_fw_config_virtio(const struct firmware *fw, void *context) > > rproc->table_ptr = rproc->cached_table; > > - /* look for virtio devices and register them */ > - ret = rproc_handle_resources(rproc, tablesz, rproc_vdev_handler); > - > /* if rproc is marked always-on, request it to boot */ > if (rproc->always_on) > rproc_boot_nowait(rproc); > @@ -973,9 +982,6 @@ static int rproc_add_virtio_devices(struct rproc *rproc) > */ > int rproc_trigger_recovery(struct rproc *rproc) > { > - struct rproc_vdev *rvdev, *rvtmp; > - int ret; > - > dev_err(&rproc->dev, "recovering %s\n", rproc->name); > > init_completion(&rproc->crash_comp); > @@ -984,23 +990,11 @@ int rproc_trigger_recovery(struct rproc *rproc) > /* TODO: make sure this works with rproc->power > 1 */ > rproc_shutdown(rproc); > > - /* clean up remote vdev entries */ > - list_for_each_entry_safe(rvdev, rvtmp, &rproc->rvdevs, node) > - rproc_remove_virtio_dev(rvdev); > - > /* wait until there is no more rproc users */ > wait_for_completion(&rproc->crash_comp); > > - /* Free the copy of the resource table */ > - kfree(rproc->cached_table); I think this line should be part of patch 4 "Move handling of cached table to boot/shutdown" Regards, Loic > - > - ret = rproc_add_virtio_devices(rproc); > - if (ret) > - return ret; > - > /* > - * boot the remote processor up again, waiting for the async fw load to > - * finish > + * boot the remote processor up again > */ > rproc_boot(rproc); > >