Skip to content

Commit

Permalink
drivers/video/ep93xx-fb.c: clean up error-handling code
Browse files Browse the repository at this point in the history
There were two problems in this code: failure of the setup function should
free locally allocated resources like other nearby failures, and the test
if (&info->cmap) can never be false.  To generally clean things up, this
patch reorders the error handling code at the failed label and adds labels
so that the conditionals are not necessary.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ryan Mallon <rmallon@gmail.com>
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
  • Loading branch information
Julia Lawall authored and Florian Tobias Schandinat committed Apr 21, 2012
1 parent 49a8ee8 commit 045dfdb
Showing 1 changed file with 17 additions and 15 deletions.
32 changes: 17 additions & 15 deletions drivers/video/ep93xx-fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,16 +507,16 @@ static int __devinit ep93xxfb_probe(struct platform_device *pdev)

err = fb_alloc_cmap(&info->cmap, 256, 0);
if (err)
goto failed;
goto failed_cmap;

err = ep93xxfb_alloc_videomem(info);
if (err)
goto failed;
goto failed_videomem;

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
err = -ENXIO;
goto failed;
goto failed_resource;
}

/*
Expand All @@ -532,7 +532,7 @@ static int __devinit ep93xxfb_probe(struct platform_device *pdev)
fbi->mmio_base = ioremap(res->start, resource_size(res));
if (!fbi->mmio_base) {
err = -ENXIO;
goto failed;
goto failed_resource;
}

strcpy(info->fix.id, pdev->name);
Expand All @@ -553,24 +553,24 @@ static int __devinit ep93xxfb_probe(struct platform_device *pdev)
if (err == 0) {
dev_err(info->dev, "No suitable video mode found\n");
err = -EINVAL;
goto failed;
goto failed_mode;
}

if (mach_info->setup) {
err = mach_info->setup(pdev);
if (err)
return err;
goto failed_mode;
}

err = ep93xxfb_check_var(&info->var, info);
if (err)
goto failed;
goto failed_check;

fbi->clk = clk_get(info->dev, NULL);
if (IS_ERR(fbi->clk)) {
err = PTR_ERR(fbi->clk);
fbi->clk = NULL;
goto failed;
goto failed_check;
}

ep93xxfb_set_par(info);
Expand All @@ -585,15 +585,17 @@ static int __devinit ep93xxfb_probe(struct platform_device *pdev)
return 0;

failed:
if (fbi->clk)
clk_put(fbi->clk);
if (fbi->mmio_base)
iounmap(fbi->mmio_base);
ep93xxfb_dealloc_videomem(info);
if (&info->cmap)
fb_dealloc_cmap(&info->cmap);
clk_put(fbi->clk);
failed_check:
if (fbi->mach_info->teardown)
fbi->mach_info->teardown(pdev);
failed_mode:
iounmap(fbi->mmio_base);
failed_resource:
ep93xxfb_dealloc_videomem(info);
failed_videomem:
fb_dealloc_cmap(&info->cmap);
failed_cmap:
kfree(info);
platform_set_drvdata(pdev, NULL);

Expand Down

0 comments on commit 045dfdb

Please sign in to comment.