msm: msm_bus: Fix error handling in msm_bus_device_init
Correctly free pointers allocated by kzalloc. Remove devm_kfree in error handling as device associated memory is automatically freed upon destruction of device. Always use put_device instead of kfree on initialized device. Change-Id: Icbd88e9ccd42fedb4fbce5eff69248c3fceffc02 Signed-off-by: David Dai <daidavid1@codeaurora.org> Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
This commit is contained in:
parent
f30dbf425a
commit
dfc2fac0fb
|
@ -944,10 +944,8 @@ static struct device *msm_bus_device_init(
|
|||
|
||||
bus_node = kzalloc(sizeof(struct msm_bus_node_device_type), GFP_KERNEL);
|
||||
if (!bus_node) {
|
||||
MSM_BUS_ERR("%s:Bus node alloc failed\n", __func__);
|
||||
kfree(bus_dev);
|
||||
bus_dev = NULL;
|
||||
goto exit_device_init;
|
||||
ret = -ENOMEM;
|
||||
goto err_device_init;
|
||||
}
|
||||
bus_dev = &bus_node->dev;
|
||||
device_initialize(bus_dev);
|
||||
|
@ -955,47 +953,37 @@ static struct device *msm_bus_device_init(
|
|||
node_info = devm_kzalloc(bus_dev,
|
||||
sizeof(struct msm_bus_node_info_type), GFP_KERNEL);
|
||||
if (!node_info) {
|
||||
MSM_BUS_ERR("%s:Bus node info alloc failed\n", __func__);
|
||||
devm_kfree(bus_dev, bus_node);
|
||||
kfree(bus_dev);
|
||||
bus_dev = NULL;
|
||||
goto exit_device_init;
|
||||
ret = -ENOMEM;
|
||||
goto err_put_device;
|
||||
}
|
||||
|
||||
bus_node->node_info = node_info;
|
||||
bus_node->ap_owned = pdata->ap_owned;
|
||||
bus_dev->of_node = pdata->of_node;
|
||||
|
||||
if (msm_bus_copy_node_info(pdata, bus_dev) < 0) {
|
||||
devm_kfree(bus_dev, bus_node);
|
||||
devm_kfree(bus_dev, node_info);
|
||||
kfree(bus_dev);
|
||||
bus_dev = NULL;
|
||||
goto exit_device_init;
|
||||
}
|
||||
ret = msm_bus_copy_node_info(pdata, bus_dev);
|
||||
if (ret)
|
||||
goto err_put_device;
|
||||
|
||||
bus_dev->bus = &msm_bus_type;
|
||||
dev_set_name(bus_dev, bus_node->node_info->name);
|
||||
|
||||
ret = device_add(bus_dev);
|
||||
if (ret < 0) {
|
||||
if (ret) {
|
||||
MSM_BUS_ERR("%s: Error registering device %d",
|
||||
__func__, pdata->node_info->id);
|
||||
devm_kfree(bus_dev, bus_node);
|
||||
devm_kfree(bus_dev, node_info->dev_connections);
|
||||
devm_kfree(bus_dev, node_info->connections);
|
||||
devm_kfree(bus_dev, node_info->black_connections);
|
||||
devm_kfree(bus_dev, node_info->black_listed_connections);
|
||||
devm_kfree(bus_dev, node_info);
|
||||
kfree(bus_dev);
|
||||
bus_dev = NULL;
|
||||
goto exit_device_init;
|
||||
goto err_put_device;
|
||||
}
|
||||
device_create_file(bus_dev, &dev_attr_bw);
|
||||
INIT_LIST_HEAD(&bus_node->devlist);
|
||||
|
||||
exit_device_init:
|
||||
return bus_dev;
|
||||
|
||||
err_put_device:
|
||||
put_device(bus_dev);
|
||||
bus_dev = NULL;
|
||||
kfree(bus_node);
|
||||
err_device_init:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
static int msm_bus_setup_dev_conn(struct device *bus_dev, void *data)
|
||||
|
@ -1142,10 +1130,10 @@ static int msm_bus_device_probe(struct platform_device *pdev)
|
|||
|
||||
node_dev = msm_bus_device_init(&pdata->info[i]);
|
||||
|
||||
if (!node_dev) {
|
||||
if (IS_ERR(node_dev)) {
|
||||
MSM_BUS_ERR("%s: Error during dev init for %d",
|
||||
__func__, pdata->info[i].node_info->id);
|
||||
ret = -ENXIO;
|
||||
ret = PTR_ERR(node_dev);
|
||||
goto exit_device_probe;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue