[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1623783824-13395-5-git-send-email-sidgup@codeaurora.org>
Date: Tue, 15 Jun 2021 12:03:44 -0700
From: Siddharth Gupta <sidgup@...eaurora.org>
To: bjorn.andersson@...aro.org, ohad@...ery.com,
linux-remoteproc@...r.kernel.org
Cc: Siddharth Gupta <sidgup@...eaurora.org>,
linux-kernel@...r.kernel.org, linux-arm-msm@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, psodagud@...eaurora.org,
stable@...r.kernel.org
Subject: [PATCH v4 4/4] remoteproc: core: Cleanup device in case of failure
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@...eaurora.org>
Cc: stable@...r.kernel.org
---
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 b874280..d823f70 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -2343,8 +2343,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);
@@ -2355,7 +2357,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 */
@@ -2364,6 +2366,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
Powered by blists - more mailing lists