Commit df67699c authored by Thomas Zimmermann's avatar Thomas Zimmermann Committed by Helge Deller
Browse files

firmware/sysfb: Clear screen_info state after consuming it



After consuming the global screen_info_state in sysfb_init(), the
created platform device maintains the firmware framebuffer. Clear
screen_info to avoid conflicting access. Subsequent kexec reboots
now ignore the firmware framebuffer.

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 0aa0838c
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ EXPORT_SYMBOL_GPL(sysfb_disable);

static __init int sysfb_init(void)
{
	struct screen_info *si = &screen_info;
	const struct screen_info *si = &screen_info;
	struct simplefb_platform_data mode;
	const char *name;
	bool compatible;
@@ -119,6 +119,18 @@ static __init int sysfb_init(void)
	if (ret)
		goto err;

	/*
	 * The firmware framebuffer is now maintained by the created
	 * device. Disable screen_info after we've consumed it. Prevents
	 * invalid access during kexec reboots.
	 *
	 * TODO: Vgacon still relies on the global screen_info. Make
	 *       vgacon work with the platform device, so we can clear
	 *       the screen_info unconditionally.
	 */
	if (strcmp(name, "platform-framebuffer"))
		screen_info.orig_video_isVGA = 0;

	goto unlock_mutex;
err:
	platform_device_put(pd);