Blame SOURCES/0006-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch

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