[PATCH 3/3] remoteproc: core: Cleanup device in case of failure

From: Siddharth Gupta
Date: Mon May 17 2021 - 16:46:47 EST


When a failure occurs in rproc_add() it returns an error, but does
not cleanup after itself. This change adds the failure path in such
cases.

Signed-off-by: Siddharth Gupta <sidgup@xxxxxxxxxxxxxx>
---
drivers/remoteproc/remoteproc_core.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index 45d09bf..6f5fa81 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -2326,8 +2326,10 @@ int rproc_add(struct rproc *rproc)
return ret;

ret = device_add(dev);
- if (ret < 0)
- return ret;
+ if (ret < 0) {
+ put_device(dev);
+ goto rproc_remove_cdev;
+ }

dev_info(dev, "%s is available\n", rproc->name);

@@ -2338,7 +2340,7 @@ int rproc_add(struct rproc *rproc)
if (rproc->auto_boot) {
ret = rproc_trigger_auto_boot(rproc);
if (ret < 0)
- return ret;
+ goto rproc_remove_dev;
}

/* expose to rproc_get_by_phandle users */
@@ -2347,6 +2349,13 @@ int rproc_add(struct rproc *rproc)
mutex_unlock(&rproc_list_mutex);

return 0;
+
+rproc_remove_dev:
+ rproc_delete_debug_dir(rproc);
+ device_del(dev);
+rproc_remove_cdev:
+ rproc_char_device_remove(rproc);
+ return ret;
}
EXPORT_SYMBOL(rproc_add);

--
Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project