On Mon 17 May 15:45 CDT 2021, Siddharth Gupta wrote:
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@codeaurora.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 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);
I'm confused, shouldn't this function just do cdev_del()? __unregister_chrdev() seems to do more than unroll what cdev_add() did...
Apart from this, I think the patch looks good. Really nice to see you tidy this up!
Regards, Bjorn
- return ret;
} EXPORT_SYMBOL(rproc_add); -- Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project