misc/st_kim: Free resources in the error path of probe()
Signed-off-by: Matthias Kaehlcke <matthias@kaehlcke.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2cf4e52e27
commit
b2997387c2
@@ -705,9 +705,9 @@ static const struct file_operations list_debugfs_fops = {
|
|||||||
static struct dentry *kim_debugfs_dir;
|
static struct dentry *kim_debugfs_dir;
|
||||||
static int kim_probe(struct platform_device *pdev)
|
static int kim_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
long status;
|
|
||||||
struct kim_data_s *kim_gdata;
|
struct kim_data_s *kim_gdata;
|
||||||
struct ti_st_plat_data *pdata = pdev->dev.platform_data;
|
struct ti_st_plat_data *pdata = pdev->dev.platform_data;
|
||||||
|
int err;
|
||||||
|
|
||||||
if ((pdev->id != -1) && (pdev->id < MAX_ST_DEVICES)) {
|
if ((pdev->id != -1) && (pdev->id < MAX_ST_DEVICES)) {
|
||||||
/* multiple devices could exist */
|
/* multiple devices could exist */
|
||||||
@@ -724,10 +724,11 @@ static int kim_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
dev_set_drvdata(&pdev->dev, kim_gdata);
|
dev_set_drvdata(&pdev->dev, kim_gdata);
|
||||||
|
|
||||||
status = st_core_init(&kim_gdata->core_data);
|
err = st_core_init(&kim_gdata->core_data);
|
||||||
if (status != 0) {
|
if (err != 0) {
|
||||||
pr_err(" ST core init failed");
|
pr_err(" ST core init failed");
|
||||||
return -EIO;
|
err = -EIO;
|
||||||
|
goto err_core_init;
|
||||||
}
|
}
|
||||||
/* refer to itself */
|
/* refer to itself */
|
||||||
kim_gdata->core_data->kim_data = kim_gdata;
|
kim_gdata->core_data->kim_data = kim_gdata;
|
||||||
@@ -738,10 +739,10 @@ static int kim_probe(struct platform_device *pdev)
|
|||||||
init_completion(&kim_gdata->kim_rcvd);
|
init_completion(&kim_gdata->kim_rcvd);
|
||||||
init_completion(&kim_gdata->ldisc_installed);
|
init_completion(&kim_gdata->ldisc_installed);
|
||||||
|
|
||||||
status = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp);
|
err = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp);
|
||||||
if (status) {
|
if (err) {
|
||||||
pr_err("failed to create sysfs entries");
|
pr_err("failed to create sysfs entries");
|
||||||
return status;
|
goto err_sysfs_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copying platform data */
|
/* copying platform data */
|
||||||
@@ -753,8 +754,8 @@ static int kim_probe(struct platform_device *pdev)
|
|||||||
kim_debugfs_dir = debugfs_create_dir("ti-st", NULL);
|
kim_debugfs_dir = debugfs_create_dir("ti-st", NULL);
|
||||||
if (IS_ERR(kim_debugfs_dir)) {
|
if (IS_ERR(kim_debugfs_dir)) {
|
||||||
pr_err(" debugfs entries creation failed ");
|
pr_err(" debugfs entries creation failed ");
|
||||||
kim_debugfs_dir = NULL;
|
err = -EIO;
|
||||||
return -EIO;
|
goto err_debugfs_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
|
debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
|
||||||
@@ -763,6 +764,17 @@ static int kim_probe(struct platform_device *pdev)
|
|||||||
kim_gdata, &list_debugfs_fops);
|
kim_gdata, &list_debugfs_fops);
|
||||||
pr_info(" debugfs entries created ");
|
pr_info(" debugfs entries created ");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_debugfs_dir:
|
||||||
|
sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
|
||||||
|
|
||||||
|
err_sysfs_group:
|
||||||
|
st_core_exit(kim_gdata->core_data);
|
||||||
|
|
||||||
|
err_core_init:
|
||||||
|
kfree(kim_gdata);
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kim_remove(struct platform_device *pdev)
|
static int kim_remove(struct platform_device *pdev)
|
||||||
|
|||||||
Reference in New Issue
Block a user