14f0fd
From 4d08ebd4f8dc19dfc36495473b34c34d53650632 Mon Sep 17 00:00:00 2001
8b00a7
From: Ladi Prosek <lprosek@redhat.com>
8b00a7
Date: Mon, 31 Oct 2016 19:33:05 +0100
3abf7a
Subject: vgabios: Reorder video modes to work around a Windows bug
8b00a7
8b00a7
RH-Author: Ladi Prosek <lprosek@redhat.com>
8b00a7
Message-id: <1477924385-6169-1-git-send-email-lprosek@redhat.com>
8b00a7
Patchwork-id: 72677
8b00a7
O-Subject: [RHEL-7.4/7.3.z seabios PATCH] vgabios: Reorder video modes to work around a Windows bug
8b00a7
Bugzilla: 1392028
8b00a7
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
8b00a7
RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com>
8b00a7
RH-Acked-by: vrozenfe <vrozenfe@redhat.com>
8b00a7
8b00a7
Windows Server 2016 and Windows 10 RS1 come with a bug in its blue screen
8b00a7
of death rendering logic which prevents it from generating crash dumps.
8b00a7
8b00a7
The bug does not manifest if Windows sees a suitable 32 bpp video mode
8b00a7
before a suitable 24 bpp video mode in the list of modes returned from
8b00a7
vgabios. This commit moves all 32 bpp modes to the front of the list to
8b00a7
make sure that this is always the case.
8b00a7
8b00a7
Upstream patch:
8b00a7
https://www.coreboot.org/pipermail/seabios/2016-October/010963.html
8b00a7
8b00a7
There are valid concerns upstream about the breaking nature of the fix
8b00a7
but for the limited set of operating systems supported by RHEL/RHEV we
8b00a7
can easily verify that they are unaffected. So as things stand now, this
8b00a7
is a downstream-only patch which will be reverted in the near future;
8b00a7
the exact time will depend on Windows 10 RS2 schedule and other factors.
8b00a7
The goal is to make sure that our customers running Windows 10 VMs can
8b00a7
generate crash dumps.
8b00a7
8b00a7
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
8b00a7
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
8b00a7
---
8b00a7
 vgasrc/bochsvga.c | 39 ++++++++++++++++++++-------------------
8b00a7
 1 file changed, 20 insertions(+), 19 deletions(-)
8b00a7
8b00a7
diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c
3abf7a
index ec5d101..c5d1511 100644
8b00a7
--- a/vgasrc/bochsvga.c
8b00a7
+++ b/vgasrc/bochsvga.c
3abf7a
@@ -28,6 +28,25 @@ static struct bochsvga_mode
8b00a7
     u16 mode;
8b00a7
     struct vgamode_s info;
8b00a7
 } bochsvga_modes[] VAR16 = {
8b00a7
+    /* 32 bpp BOCHS modes */
8b00a7
+    { 0x140, { MM_DIRECT, 320,  200,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x141, { MM_DIRECT, 640,  400,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x142, { MM_DIRECT, 640,  480,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x143, { MM_DIRECT, 800,  600,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x144, { MM_DIRECT, 1024, 768,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x14c, { MM_DIRECT, 1152, 864,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x177, { MM_DIRECT, 1280, 768,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x17a, { MM_DIRECT, 1280, 800,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x17d, { MM_DIRECT, 1280, 960,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x180, { MM_DIRECT, 1440, 900,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x18f, { MM_DIRECT, 1280, 720,  32, 8, 16, SEG_GRAPH } },
8b00a7
+    { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } },
8b00a7
     /* standard modes */
8b00a7
     { 0x100, { MM_PACKED, 640,  400,  8,  8, 16, SEG_GRAPH } },
8b00a7
     { 0x101, { MM_PACKED, 640,  480,  8,  8, 16, SEG_GRAPH } },
3abf7a
@@ -56,50 +75,32 @@ static struct bochsvga_mode
8b00a7
     { 0x11D, { MM_DIRECT, 1600, 1200, 15, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x11E, { MM_DIRECT, 1600, 1200, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x11F, { MM_DIRECT, 1600, 1200, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    /* BOCHS modes */
8b00a7
-    { 0x140, { MM_DIRECT, 320,  200,  32, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x141, { MM_DIRECT, 640,  400,  32, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x142, { MM_DIRECT, 640,  480,  32, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x143, { MM_DIRECT, 800,  600,  32, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x144, { MM_DIRECT, 1024, 768,  32, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } },
8b00a7
+    /* 8, 15, 16, and 24 bpp BOCHS modes */
8b00a7
     { 0x146, { MM_PACKED, 320,  200,  8,  8, 16, SEG_GRAPH } },
8b00a7
-    { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x148, { MM_PACKED, 1152, 864,  8,  8, 16, SEG_GRAPH } },
8b00a7
     { 0x149, { MM_DIRECT, 1152, 864,  15, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x14a, { MM_DIRECT, 1152, 864,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x14b, { MM_DIRECT, 1152, 864,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x14c, { MM_DIRECT, 1152, 864,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x175, { MM_DIRECT, 1280, 768,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x176, { MM_DIRECT, 1280, 768,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x177, { MM_DIRECT, 1280, 768,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x178, { MM_DIRECT, 1280, 800,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x179, { MM_DIRECT, 1280, 800,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x17a, { MM_DIRECT, 1280, 800,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x17b, { MM_DIRECT, 1280, 960,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x17c, { MM_DIRECT, 1280, 960,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x17d, { MM_DIRECT, 1280, 960,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x17e, { MM_DIRECT, 1440, 900,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x17f, { MM_DIRECT, 1440, 900,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x180, { MM_DIRECT, 1440, 900,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x181, { MM_DIRECT, 1400, 1050, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x182, { MM_DIRECT, 1400, 1050, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x184, { MM_DIRECT, 1680, 1050, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x185, { MM_DIRECT, 1680, 1050, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x187, { MM_DIRECT, 1920, 1200, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x188, { MM_DIRECT, 1920, 1200, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x18a, { MM_DIRECT, 2560, 1600, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x18b, { MM_DIRECT, 2560, 1600, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x18d, { MM_DIRECT, 1280, 720,  16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x18e, { MM_DIRECT, 1280, 720,  24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x18f, { MM_DIRECT, 1280, 720,  32, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x190, { MM_DIRECT, 1920, 1080, 16, 8, 16, SEG_GRAPH } },
8b00a7
     { 0x191, { MM_DIRECT, 1920, 1080, 24, 8, 16, SEG_GRAPH } },
8b00a7
-    { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } },
8b00a7
 };
8b00a7
 
8b00a7
 static int dispi_found VAR16 = 0;
8b00a7
-- 
8b00a7
1.8.3.1
8b00a7