mirror of https://gitee.com/openkylin/linux.git
s3c-fb: fix resource releasing on error during probing
All resources are released in s3c_fb_win_release so remove other places of resources releasing. Add releasing of an allocated fb_info structure as well. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
493f139ecf
commit
ddc518d9f8
|
@ -725,9 +725,12 @@ static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win)
|
||||||
*/
|
*/
|
||||||
static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
|
static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
|
||||||
{
|
{
|
||||||
fb_dealloc_cmap(&win->fbinfo->cmap);
|
if (win->fbinfo) {
|
||||||
unregister_framebuffer(win->fbinfo);
|
unregister_framebuffer(win->fbinfo);
|
||||||
s3c_fb_free_memory(sfb, win);
|
fb_dealloc_cmap(&win->fbinfo->cmap);
|
||||||
|
s3c_fb_free_memory(sfb, win);
|
||||||
|
framebuffer_release(win->fbinfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -778,7 +781,7 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
|
||||||
ret = s3c_fb_alloc_memory(sfb, win);
|
ret = s3c_fb_alloc_memory(sfb, win);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(sfb->dev, "failed to allocate display memory\n");
|
dev_err(sfb->dev, "failed to allocate display memory\n");
|
||||||
goto err_framebuffer;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup the r/b/g positions for the window's palette */
|
/* setup the r/b/g positions for the window's palette */
|
||||||
|
@ -801,7 +804,7 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
|
||||||
ret = s3c_fb_check_var(&fbinfo->var, fbinfo);
|
ret = s3c_fb_check_var(&fbinfo->var, fbinfo);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sfb->dev, "check_var failed on initial video params\n");
|
dev_err(sfb->dev, "check_var failed on initial video params\n");
|
||||||
goto err_alloc_mem;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create initial colour map */
|
/* create initial colour map */
|
||||||
|
@ -821,20 +824,13 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
|
||||||
ret = register_framebuffer(fbinfo);
|
ret = register_framebuffer(fbinfo);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sfb->dev, "failed to register framebuffer\n");
|
dev_err(sfb->dev, "failed to register framebuffer\n");
|
||||||
goto err_alloc_mem;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*res = win;
|
*res = win;
|
||||||
dev_info(sfb->dev, "window %d: fb %s\n", win_no, fbinfo->fix.id);
|
dev_info(sfb->dev, "window %d: fb %s\n", win_no, fbinfo->fix.id);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_alloc_mem:
|
|
||||||
s3c_fb_free_memory(sfb, win);
|
|
||||||
|
|
||||||
err_framebuffer:
|
|
||||||
unregister_framebuffer(fbinfo);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue