Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bbbb680 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Bartlomiej Zolnierkiewicz
Browse files

video: fbdev: au1200fb: Fix error handling path



Rewrite the exit path based on 'au1200fb_drv_remove()'.
We can safely iterate for all already handled planes. Even if not
completely initialized, the functions that are called will silently accept
the 'fb_info' structure that is passed.

As soon as we find a NULL in the '_au1200fb_infos' array, we know that we
have released all what we needed to release. So we can 'break'.

Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
parent 703a4af4
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -1760,11 +1760,19 @@ static int au1200fb_drv_probe(struct platform_device *dev)
	return 0;

failed:
	/* NOTE: This only does the current plane/window that failed; others are still active */
	if (fbi) {
	for (plane = 0; plane < device_count; ++plane) {
		fbi = _au1200fb_infos[plane];
		if (!fbi)
			break;

		/* Clean up all probe data */
		unregister_framebuffer(fbi);
		if (fbi->cmap.len != 0)
			fb_dealloc_cmap(&fbi->cmap);
		kfree(fbi->pseudo_palette);

		framebuffer_release(fbi);
		_au1200fb_infos[plane] = NULL;
	}
	return ret;
}