Current recovery operation does only virtio device reset, but do not
free and re-allocate all the resources. As third-party is booting the
remote processor during attach-detach, it is better to free and
re-allocate resoruces as resource table state might be unknown to linux
when remote processor boots and reports crash.

Signed-off-by: Tanmay Shah <tanmay.s...@amd.com>
---

Note: RFC patch for design discussion. Please do not merge. 

 drivers/remoteproc/remoteproc_core.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/remoteproc/remoteproc_core.c 
b/drivers/remoteproc/remoteproc_core.c
index 825672100528..4971508bc5b2 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -1786,7 +1786,20 @@ static int rproc_attach_recovery(struct rproc *rproc)
        if (ret)
                return ret;
 
-       return __rproc_attach(rproc);
+       /* clean up all acquired resources */
+       rproc_resource_cleanup(rproc);
+
+       /* release HW resources if needed */
+       rproc_unprepare_device(rproc);
+
+       rproc_disable_iommu(rproc);
+
+       /* Free the copy of the resource table */
+       kfree(rproc->cached_table);
+       rproc->cached_table = NULL;
+       rproc->table_ptr = NULL;
+
+       return rproc_attach(rproc);
 }
 
 static int rproc_boot_recovery(struct rproc *rproc)

base-commit: 56d030ea3330ab737fe6c05f89d52f56208b07ac
-- 
2.34.1


Reply via email to