[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Switch back to page 0 before loading kernel
From: |
Colin Watson |
Subject: |
[PATCH] Switch back to page 0 before loading kernel |
Date: |
Thu, 24 Mar 2011 16:27:27 +0000 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
Felix Kuehling reported intermittent black-screen problems when
switching Linux VT on certain configurations. This happens because in
the case where we're using double-buffering we pass a framebuffer base
to the kernel corresponding to whichever page we happened to be using as
the front target when we shut down the video subsystem, and not all
kernel drivers are happy with this. It would be better to consistently
use page zero.
2011-03-24 Colin Watson <address@hidden>
* grub-core/video/fb/video_fb.c (grub_video_fb_get_info_and_fini):
Switch back to page zero before loading a kernel, since some kernel
drivers expect that.
Thanks to: Felix Kuehling.
=== modified file 'grub-core/video/fb/video_fb.c'
--- grub-core/video/fb/video_fb.c 2010-05-16 13:01:54 +0000
+++ grub-core/video/fb/video_fb.c 2011-03-24 16:21:25 +0000
@@ -1505,6 +1505,20 @@ grub_video_fb_get_info_and_fini (struct
{
grub_memcpy (mode_info, &(framebuffer.front_target->mode_info),
sizeof (*mode_info));
+
+ /* We are about to load a kernel. Switch back to page zero, since some
+ kernel drivers expect that. */
+ if ((mode_info->mode_type & GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED)
+ && framebuffer.set_page && framebuffer.displayed_page != 0)
+ {
+ /* Ensure both pages are exactly in sync. */
+ grub_memcpy (framebuffer.back_target->data,
+ framebuffer.front_target->data,
+ framebuffer.back_target->mode_info.pitch
+ * framebuffer.back_target->mode_info.height);
+ grub_video_swap_buffers ();
+ }
+
*framebuf = framebuffer.front_target->data;
grub_video_fb_fini ();
--
Colin Watson address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Switch back to page 0 before loading kernel,
Colin Watson <=