mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 09:43:59 +08:00
video: vt8500: fix error handling in probe()
We shouldn't kfree(fbi) because that was allocated with devm_kzalloc(). There were several error paths which returned directly instead of releasing resources. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
5a0973f33b
commit
46ac29568e
@ -293,8 +293,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
|
||||
+ sizeof(u32) * 16, GFP_KERNEL);
|
||||
if (!fbi) {
|
||||
dev_err(&pdev->dev, "Failed to initialize framebuffer device\n");
|
||||
ret = -ENOMEM;
|
||||
goto failed;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
strcpy(fbi->fb.fix.id, "VT8500 LCD");
|
||||
@ -327,15 +326,13 @@ static int vt8500lcd_probe(struct platform_device *pdev)
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (res == NULL) {
|
||||
dev_err(&pdev->dev, "no I/O memory resource defined\n");
|
||||
ret = -ENODEV;
|
||||
goto failed_fbi;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
res = request_mem_region(res->start, resource_size(res), "vt8500lcd");
|
||||
if (res == NULL) {
|
||||
dev_err(&pdev->dev, "failed to request I/O memory\n");
|
||||
ret = -EBUSY;
|
||||
goto failed_fbi;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
fbi->regbase = ioremap(res->start, resource_size(res));
|
||||
@ -346,17 +343,19 @@ static int vt8500lcd_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
disp_timing = of_get_display_timings(pdev->dev.of_node);
|
||||
if (!disp_timing)
|
||||
return -EINVAL;
|
||||
if (!disp_timing) {
|
||||
ret = -EINVAL;
|
||||
goto failed_free_io;
|
||||
}
|
||||
|
||||
ret = of_get_fb_videomode(pdev->dev.of_node, &of_mode,
|
||||
OF_USE_NATIVE_MODE);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto failed_free_io;
|
||||
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "bits-per-pixel", &bpp);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto failed_free_io;
|
||||
|
||||
/* try allocating the framebuffer */
|
||||
fb_mem_len = of_mode.xres * of_mode.yres * 2 * (bpp / 8);
|
||||
@ -364,7 +363,8 @@ static int vt8500lcd_probe(struct platform_device *pdev)
|
||||
GFP_KERNEL);
|
||||
if (!fb_mem_virt) {
|
||||
pr_err("%s: Failed to allocate framebuffer\n", __func__);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto failed_free_io;
|
||||
}
|
||||
|
||||
fbi->fb.fix.smem_start = fb_mem_phys;
|
||||
@ -447,9 +447,6 @@ failed_free_io:
|
||||
iounmap(fbi->regbase);
|
||||
failed_free_res:
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
failed_fbi:
|
||||
kfree(fbi);
|
||||
failed:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user