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