Skip to content

Commit b083c22

Browse files
Uwe Kleine-Könighdeller
authored andcommitted
video: fbdev: imxfb: Convert request_mem_region + ioremap to devm_ioremap_resource
This has several advantages: - No need for manual undo of the two functions in the error path and the remove function. - Drops error handling in .remove() Note that returning early in .remove() yields resource leaks that often result in access of freed memory or unmapped registers later. - Fixes a resource leak request_mem_region allocates memory for the returned pointer that was never freed. Signed-off-by: Uwe Kleine-König <[email protected]> Signed-off-by: Helge Deller <[email protected]>
1 parent ded77a7 commit b083c22

File tree

1 file changed

+1
-17
lines changed

1 file changed

+1
-17
lines changed

drivers/video/fbdev/imxfb.c

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -937,13 +937,6 @@ static int imxfb_probe(struct platform_device *pdev)
937937
info->fix.smem_len = max_t(size_t, info->fix.smem_len,
938938
m->mode.xres * m->mode.yres * bytes_per_pixel);
939939

940-
res = request_mem_region(res->start, resource_size(res),
941-
DRIVER_NAME);
942-
if (!res) {
943-
ret = -EBUSY;
944-
goto failed_req;
945-
}
946-
947940
fbi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
948941
if (IS_ERR(fbi->clk_ipg)) {
949942
ret = PTR_ERR(fbi->clk_ipg);
@@ -977,7 +970,7 @@ static int imxfb_probe(struct platform_device *pdev)
977970
goto failed_getclock;
978971
}
979972

980-
fbi->regs = ioremap(res->start, resource_size(res));
973+
fbi->regs = devm_ioremap_resource(&pdev->dev, res);
981974
if (fbi->regs == NULL) {
982975
dev_err(&pdev->dev, "Cannot map frame buffer registers\n");
983976
ret = -ENOMEM;
@@ -1049,11 +1042,9 @@ static int imxfb_probe(struct platform_device *pdev)
10491042
dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
10501043
fbi->map_dma);
10511044
failed_map:
1052-
iounmap(fbi->regs);
10531045
failed_ioremap:
10541046
failed_getclock:
10551047
release_mem_region(res->start, resource_size(res));
1056-
failed_req:
10571048
failed_of_parse:
10581049
kfree(info->pseudo_palette);
10591050
failed_init:
@@ -1065,20 +1056,13 @@ static int imxfb_remove(struct platform_device *pdev)
10651056
{
10661057
struct fb_info *info = platform_get_drvdata(pdev);
10671058
struct imxfb_info *fbi = info->par;
1068-
struct resource *res;
1069-
1070-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1071-
if (!res)
1072-
return -EINVAL;
10731059

10741060
imxfb_disable_controller(fbi);
10751061

10761062
unregister_framebuffer(info);
10771063
fb_dealloc_cmap(&info->cmap);
10781064
dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
10791065
fbi->map_dma);
1080-
iounmap(fbi->regs);
1081-
release_mem_region(res->start, resource_size(res));
10821066
kfree(info->pseudo_palette);
10831067
framebuffer_release(info);
10841068

0 commit comments

Comments
 (0)