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@codeaurora.org>
Link: https://lore.kernel.org/r/1623723671-5517-5-git-send-email-sidgup@codeaurora.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
Siddharth Gupta 2021-06-14 19:21:11 -07:00 коммит произвёл Bjorn Andersson
Родитель 930eec0be2
Коммит 7dbdb8bd7c
1 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -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);