[SeaBIOS] [PATCH] vgabios: Reorder video modes to work around a Windows bug

Ladi Prosek lprosek at redhat.com
Wed Oct 19 10:06:01 CEST 2016


On Wed, Oct 19, 2016 at 1:29 AM, Kevin O'Connor <kevin at koconnor.net> wrote:
> On Mon, Oct 17, 2016 at 05:53:04PM +0200, Ladi Prosek wrote:
>> 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.
>>
>> Signed-off-by: Ladi Prosek <lprosek at 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 } },
>
> Thanks.  Instead of moving all of the 32bit modes to the top of the
> list, can the 32bit modes be kept next to the other modes with the
> same resolution, just above the 24bpp mode?

Yes, that would work too. As long as 32 bpp come before 24 bpp for the
same resolution, it will be fine.

> Also, all of the mode numbers above 0x11b are arbitrary, so it would
> be preferable to renumber the mode numbers as lines are moved.

Will do.

> We were about to make a SeaBIOS release - does this need to go into
> that release?

It would be highly desired as the problematic Windows builds have
already RTM'ed.

I'll send a v2 with the changes as suggested above.

Thanks!
Ladi



More information about the SeaBIOS mailing list