|
@@ -1006,7 +1006,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
|
|
csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
|
|
csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
|
|
if (!csdev) {
|
|
if (!csdev) {
|
|
ret = -ENOMEM;
|
|
ret = -ENOMEM;
|
|
- goto err_kzalloc_csdev;
|
|
|
|
|
|
+ goto err_out;
|
|
}
|
|
}
|
|
|
|
|
|
if (desc->type == CORESIGHT_DEV_TYPE_LINK ||
|
|
if (desc->type == CORESIGHT_DEV_TYPE_LINK ||
|
|
@@ -1022,7 +1022,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
|
|
refcnts = kcalloc(nr_refcnts, sizeof(*refcnts), GFP_KERNEL);
|
|
refcnts = kcalloc(nr_refcnts, sizeof(*refcnts), GFP_KERNEL);
|
|
if (!refcnts) {
|
|
if (!refcnts) {
|
|
ret = -ENOMEM;
|
|
ret = -ENOMEM;
|
|
- goto err_kzalloc_refcnts;
|
|
|
|
|
|
+ goto err_free_csdev;
|
|
}
|
|
}
|
|
|
|
|
|
csdev->refcnt = refcnts;
|
|
csdev->refcnt = refcnts;
|
|
@@ -1035,7 +1035,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
|
|
conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
|
|
conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
|
|
if (!conns) {
|
|
if (!conns) {
|
|
ret = -ENOMEM;
|
|
ret = -ENOMEM;
|
|
- goto err_kzalloc_conns;
|
|
|
|
|
|
+ goto err_free_refcnts;
|
|
}
|
|
}
|
|
|
|
|
|
for (i = 0; i < csdev->nr_outport; i++) {
|
|
for (i = 0; i < csdev->nr_outport; i++) {
|
|
@@ -1062,7 +1062,11 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
|
|
ret = device_register(&csdev->dev);
|
|
ret = device_register(&csdev->dev);
|
|
if (ret) {
|
|
if (ret) {
|
|
put_device(&csdev->dev);
|
|
put_device(&csdev->dev);
|
|
- goto err_kzalloc_csdev;
|
|
|
|
|
|
+ /*
|
|
|
|
+ * All resources are free'd explicitly via
|
|
|
|
+ * coresight_device_release(), triggered from put_device().
|
|
|
|
+ */
|
|
|
|
+ goto err_out;
|
|
}
|
|
}
|
|
|
|
|
|
mutex_lock(&coresight_mutex);
|
|
mutex_lock(&coresight_mutex);
|
|
@@ -1074,11 +1078,11 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
|
|
|
|
|
|
return csdev;
|
|
return csdev;
|
|
|
|
|
|
-err_kzalloc_conns:
|
|
|
|
|
|
+err_free_refcnts:
|
|
kfree(refcnts);
|
|
kfree(refcnts);
|
|
-err_kzalloc_refcnts:
|
|
|
|
|
|
+err_free_csdev:
|
|
kfree(csdev);
|
|
kfree(csdev);
|
|
-err_kzalloc_csdev:
|
|
|
|
|
|
+err_out:
|
|
return ERR_PTR(ret);
|
|
return ERR_PTR(ret);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(coresight_register);
|
|
EXPORT_SYMBOL_GPL(coresight_register);
|