]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/video/fb/video_fb.c (grub_video_fb_get_info_and_fini):
authorColin Watson <cjwatson@ubuntu.com>
Fri, 25 Mar 2011 00:03:54 +0000 (00:03 +0000)
committerColin Watson <cjwatson@ubuntu.com>
Fri, 25 Mar 2011 00:03:54 +0000 (00:03 +0000)
Switch back to page zero before loading a kernel, since some kernel
drivers expect that.
Thanks to: Felix Kuehling.

ChangeLog
grub-core/video/fb/video_fb.c

index 8744dbff32bb8c9342158132a29c6174db5de68b..b556c77e87c71a0e54f4ca427bdd78d75b89eb3a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-03-24  Colin Watson  <cjwatson@ubuntu.com>
+
+       * 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.
+
 2011-03-24  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_addr)
index 69626be5ce471cd7316bbb67a67318b942d91074..768b6332884c11368655ab7037b6c5f30a80a65b 100644 (file)
@@ -1505,6 +1505,20 @@ grub_video_fb_get_info_and_fini (struct grub_video_mode_info *mode_info,
 {
   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 ();