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