Bug 501545

Summary: "qemu-kvm -vga std" broken with vgabios 0.6c
Product: [Fedora] Fedora Reporter: Tom London <selinux>
Component: vgabiosAssignee: Glauber Costa <gcosta>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: low    
Version: rawhideCC: gcosta, markmc, virt-maint
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: vgabios-0.6b-2.fc12 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2009-06-22 08:00:27 EDT Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Bug Depends On:    
Bug Blocks: 498969    

Description Tom London 2009-05-19 13:22:04 EDT
Description of problem:
Updating to vgabios-0.6-0.6.c.fc11.noarch.rpm, running qemu-kvm with "-vga std" on a WinXP image brings up a 4-bit deep, 800x600 display.

Reverting to vgabios-0.6-0.5.b.fc11.noarch.rpm makes it "work for me".

Version-Release number of selected component (if applicable):
vgabios-0.6-0.6.c.fc11.noarch.rpm
qemu-img-0.10.4-5.fc11.x86_64
qemu-system-x86-0.10.4-5.fc11.x86_64
qemu-debuginfo-0.10.4-5.fc11.x86_64
qemu-kvm-tools-0.10.4-5.fc11.x86_64
qemu-common-0.10.4-5.fc11.x86_64

How reproducible:
Every time

Steps to Reproduce:
1. Install vgabios-0.6-0.6.c.fc11.noarch.rpm
2. start "qemu-kvm -vga std winXP.img"
3. You get small guest display, low resolution, ... :-(
  
Actual results:


Expected results:


Additional info:
Comment 1 Mark McLoughlin 2009-05-21 14:13:58 EDT
Thanks Tom, also confirmed by the reporter of #499060

We'll unpush the update from F-11, but leave it be for F-12 for now

Note, there were only a small number of commits between 0.6b and 0.6c if anyone was interested in narrowing the problem down to a specific commit
Comment 2 Tom London 2009-06-08 12:04:27 EDT
Just reporting:

This is back with (fc12) Rawhide and vgabios-0.6-0.6.c.fc12.noarch.

Sorry, but I didn't attempt to bisect before :-(.

Not sure if I know how, but I'll try to give it a shot now.
Comment 3 Mark McLoughlin 2009-06-08 13:02:57 EDT
Try this:

  $> git clone git://git.kernel.org/pub/scm/virt/vgabios/vgabios.git
  $> git reset --hard v0.6c
  $> make
  $> rm /usr/share/qemu/vgabios.bin
  $> ln -s $(pwd)/VGABIOS-lgpl-latest.bin /usr/share/qemu/vgabios.bin
  $> qemu-kvm ...

confirm that that's broken, then:

  $> git reset --hard v0.5b
  $> make
  $> qemu-kvm ..

confirm that works, then:

  $> git bisect 0.6c 0.5b
  $> make
  $> qemu-kvm ...

if that works, do "git bisect good", if not "git bisect bad", and continue until it identifies the responsible commit
Comment 4 Tom London 2009-06-08 14:14:19 EDT
Thanks.

First make indeed fails (v0.6c).

Second make fails to compile:

[tbl@tlondon vgabios]$ git reset --hard v0.5b
HEAD is now at 4896bce - updates for 0.5b release
[tbl@tlondon vgabios]$ make
gcc -o biossums biossums.c
gcc -E vgabios.c  -DVBE "-DVGABIOS_DATE=\"`date '+%d %b %Y'`\"" > _vgabios_.c
bcc -o vgabios.s -C-c -D__i86__ -S -0 _vgabios_.c
_vgabios_.c:1: error: Unknown preprocessor directive
_vgabios_.c:2: error: Unknown preprocessor directive
_vgabios_.c:3: error: Unknown preprocessor directive
_vgabios_.c:4: error: Unknown preprocessor directive
_vgabios_.c:5: error: Unknown preprocessor directive
_vgabios_.c:6: error: Unknown preprocessor directive
_vgabios_.c:15: error: Unknown preprocessor directive
_vgabios_.c:18: error: Unknown preprocessor directive
_vgabios_.c:171: error: Unknown preprocessor directive
_vgabios_.c:369: error: Unknown preprocessor directive
_vgabios_.c:480: error: Unknown preprocessor directive
_vgabios_.c:481: error: Unknown preprocessor directive
_vgabios_.c:704: error: Unknown preprocessor directive
_vgabios_.c:705: error: Unknown preprocessor directive
_vgabios_.c:1490: error: Unknown preprocessor directive
_vgabios_.c:1636: error: Unknown preprocessor directive
_vgabios_.c:3938: error: Unknown preprocessor directive
_vgabios_.c:3979: error: Unknown preprocessor directive
_vgabios_.c:4143: error: Unknown preprocessor directive
_vgabios_.c:4202: error: Unknown preprocessor directive
_vgabios_.c:4214: error: Unknown preprocessor directive
_vgabios_.c:4381: error: Unknown preprocessor directive
_vgabios_.c:4568: error: Unknown preprocessor directive
_vgabios_.c:4623: error: Unknown preprocessor directive
_vgabios_.c:4624: error: Unknown preprocessor directive
_vgabios_.c:4625: error: Unknown preprocessor directive
_vgabios_.c:4626: error: Unknown preprocessor directive
_vgabios_.c:5897: error: Unknown preprocessor directive
_vgabios_.c:5946: error: Unknown preprocessor directive
_vgabios_.c:6329: error: Unknown preprocessor directive
_vgabios_.c:6446: error: Unknown preprocessor directive
_vgabios_.c:6496: error: Unknown preprocessor directive
_vgabios_.c:6533: error: Unknown preprocessor directive
_vgabios_.c:6567: error: Unknown preprocessor directive
_vgabios_.c:6590: error: Unknown preprocessor directive
_vgabios_.c:6594: error: Unknown preprocessor directive
_vgabios_.c:6621: error: Unknown preprocessor directive
_vgabios_.c:6655: error: Unknown preprocessor directive
_vgabios_.c:6681: error: Unknown preprocessor directive
_vgabios_.c:6714: error: Unknown preprocessor directive
_vgabios_.c:6718: error: Unknown preprocessor directive
_vgabios_.c:6722: error: Unknown preprocessor directive
_vgabios_.c:6723: error: Unknown preprocessor directive
make: *** [vgabios.bin] Error 1
[tbl@tlondon vgabios]$ 

"make clean" doesn't fix this.

Looks like bcc doesn't like :

[tbl@tlondon vgabios]$ head _vgabios_.c
# 1 "vgabios.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "vgabios.c"
# 51 "vgabios.c"
# 1 "vgabios.h" 1
Comment 5 Tom London 2009-06-08 14:20:20 EDT
Seems to compile if I run "make GCC='gcc -P'
Comment 6 Tom London 2009-06-08 14:25:47 EDT
Appears that:

  $> git reset --hard v0.5b
  $> make GCC="gcc -P"
  $> qemu-kvm ..

works, but the largest mode is 1024x768.
Comment 7 Tom London 2009-06-08 17:10:21 EDT
I'm sorry, but I can't seem to get 'git bisect' to work for me.  I keep getting:

[tbl@tlondon vgabios]$ git bisect good
Bisecting: 10 revisions left to test after this (roughly 4 steps)
error: You have local changes to 'VGABIOS-lgpl-latest.bin'; cannot switch branches.
[tbl@tlondon vgabios]$

And it appears not to move the "bisect pointer"......

No matter how many times I enter "git bisect good", it stays at "10 revisions"....

A hint would be most welcome!
Comment 8 Tom London 2009-06-08 17:18:52 EDT
Removing all the '.bin' files appears to fix this.....

Breaks after this:

[tbl@tlondon vgabios]$ git bisect good
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[44a76c3fb11fece3b1b08c762edc990f28cbfb73] - preparing for release 0.6c
[tbl@tlondon vgabios]$

<<<< make here fails>>>>

[tbl@tlondon vgabios]$ git bisect bad
Bisecting: 1 revisions left to test after this (roughly 1 steps)
[faf2e77fad85152479a20962900370b1e266ba61] - added support for a lot more non-standard VBE modes (e.g. widescreen modes) - requires latest Bochs VBE code (16 MB video memory, VBE_DISPI_ID5, VRAM size   in 64k pages stored in VBE register) - check if VBE mode is supported with current VRAM size
[tbl@tlondon vgabios]$ 

<<< make here fails >>>>

[tbl@tlondon vgabios]$ git bisect bad
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[f559d753eaebe0d27200ad12f7b14c05c16c9ade] - use VBE LFB address from PCI base address if present (rewrite of the cirrus   specific function in main vgabios code) - removed unnecessary spaces
[tbl@tlondon vgabios]$ 

<<< make here works >>>>


Is this helpful?
Comment 9 Tom London 2009-06-08 17:20:36 EDT
Sorry, here is the full bisect report:

[tbl@tlondon vgabios]$ git bisect good
faf2e77fad85152479a20962900370b1e266ba61 is first bad commit
commit faf2e77fad85152479a20962900370b1e266ba61
Author: vruppert <vruppert>
Date:   Sun Jan 25 15:46:25 2009 +0000

    - added support for a lot more non-standard VBE modes (e.g. widescreen modes)
    - requires latest Bochs VBE code (16 MB video memory, VBE_DISPI_ID5, VRAM size
      in 64k pages stored in VBE register)
    - check if VBE mode is supported with current VRAM size

:100644 100644 80097fcc2ceec6748806fc49d3de5f5a74c73bc2 9350265fd3711b3f01d19b9ecfcd23bf3e56e480 M	VGABIOS-lgpl-latest.bin
:100644 100644 ef74bdb60b27d7744460a058fd6ca3b83268d10c ed1e548f80e61074b401aa0cf4154f1e9b750258 M	VGABIOS-lgpl-latest.cirrus.bin
:100644 100644 21bdc22dccf70d5d54c7829fe8931f3f4b01956d 348f8f64478fa85713320d73b5868bf1603b3c84 M	VGABIOS-lgpl-latest.cirrus.debug.bin
:100644 100644 2050fd9519830a52fee832daa227d6cff532a5f1 f98561029c79f20cf1c20c29b5ae33a7c03f8fc5 M	VGABIOS-lgpl-latest.debug.bin
:100644 100644 92e3d0df36945c6180367e23bb863302cfdaf705 ecff90d726d3ad1c2c26635bd2aeb13fd45384c5 M	vbe.c
:100644 100644 60434ac7d79599092c66efad6d803b012ec65a27 72cb0454ead5dae5323e2ae1ec94b49491b2a69d M	vbe.h
:100644 100644 7014a16e77ed6262ca69361d89ccd8ba706aba38 550935a726a2eea1e80a263e8d864e5068cd9f27 M	vbetables-gen.c
[tbl@tlondon vgabios]$
Comment 10 Mark McLoughlin 2009-06-09 03:37:00 EDT
Thanks Tom - try posting what you've found to Volker Ruppert <info vruppert de> and <vgabios-developers nongnu org> ?
Comment 11 Tom London 2009-06-09 10:09:16 EDT
OK, I've posted a message to Volker Ruppert via the savannah nongnu org interface.

Believe I mailed a similar report to vgabios-developers groups as well.

Anything more I can do?
Comment 12 Mark McLoughlin 2009-06-19 05:59:40 EDT
(In reply to comment #9)

Just looking through F-11 bochs to confirm these requirements:

> - requires latest Bochs VBE code (16 MB video memory,

check:

  #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB  16


>   VBE_DISPI_ID5,

check:

  if (value == VBE_DISPI_ID5)
    {
    // allow backwards compatible with previous dispi bioses          
    BX_VGA_THIS vbe.cur_dispi=value;

>   VRAM size in 64k pages stored in VBE register)

check:

      case VBE_DISPI_INDEX_VIDEO_MEMORY_64K:
	return (VBE_DISPI_TOTAL_VIDEO_MEMORY_KB >> 6);
Comment 13 Mark McLoughlin 2009-06-19 06:04:27 EDT
Tom if you feel like doing more debugging, you could do the following:

  1) Re-build qemu-kvm-0.10.5-3.fc11 with this patch:

-static int serial_io[MAX_SERIAL_PORTS] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
+static int serial_io[MAX_SERIAL_PORTS] = { 0x500, 0x2f8, 0x3e8, 0x2e8 };

     (vgabios debugging goes to port 0x500)

  2) With vgabios-0.6b, do:

      $> rm /usr/share/qemu/vgabios.bin
      $> ln -s /usr/share/vgabios/VGABIOS-lgpl-latest.debug.bin \
               /usr/share/qemu/vgabios.bin
      $> qemu-kvm -serial stdio -vga std winXP.img 2>&1 | 0.6b-debug.log

  3) Do it again with vgabios-0.6c and post both logs here
Comment 14 Tom London 2009-06-19 09:26:48 EDT
OK.  I'll give this a try today.

I'm currently running rawhide (except for vgabios).

OK to debug with qemu-kvm-0.10.50-6.kvm86.fc12.x86_64, or do I need to revert to qemu-kvm-0.10.5-3.fc11?
Comment 15 Mark McLoughlin 2009-06-19 09:35:48 EDT
Thanks - so long as it's broken with 0.6c and works with 0.6b, it doesn't matter what version of qemu you're using, I guess
Comment 16 Mark McLoughlin 2009-06-19 11:22:32 EDT
Okay, nevermind Tom - Volker and Glauber have figured this out. Here's my understanding:

  1) upstream qemu-kvm vgabios added support for higher resolutions back
     in kvm-62:

  http://git.kernel.org/?p=virt/kvm/qemu-kvm.git;a=commitdiff;h=ebfac597cf

  2) in F-11 we started using upstream vgabios-0.6b, which didn't have this
     patch - hence bug #499060

  3) 0.6c *does* have this patch, but it also has other changes which are
     incompatible with current qemu - it requires both 
     VBE_DISPI_INDEX_VIDEO_MEMORY_64K and VBE_DISPI_ID5 to be present

  4) F-11 bochs has this support, but qemu has its own version of the code
     which needs to be updated

Nickel summary - we'll have 0.6c for F-12, but we need qemu updated to support it; we'll patch 0.6b with the patch linked to above for F-11 and that will fix bug #499060
Comment 17 Tom London 2009-06-19 12:25:53 EDT
(In reply to comment #16)
> Okay, nevermind Tom - Volker and Glauber have figured this out. Here's my
> understanding:
> 
>   1) upstream qemu-kvm vgabios added support for higher resolutions back
>      in kvm-62:
> 
>   http://git.kernel.org/?p=virt/kvm/qemu-kvm.git;a=commitdiff;h=ebfac597cf
> 
>   2) in F-11 we started using upstream vgabios-0.6b, which didn't have this
>      patch - hence bug #499060
> 
>   3) 0.6c *does* have this patch, but it also has other changes which are
>      incompatible with current qemu - it requires both 
>      VBE_DISPI_INDEX_VIDEO_MEMORY_64K and VBE_DISPI_ID5 to be present
> 
>   4) F-11 bochs has this support, but qemu has its own version of the code
>      which needs to be updated
> 
> Nickel summary - we'll have 0.6c for F-12, but we need qemu updated to support
> it; we'll patch 0.6b with the patch linked to above for F-11 and that will fix
> bug #499060  

OK, I've updated to vgabios-0.6b-2.fc11.noarch and this seems to work fine with qemu-kvm-0.10.50-6.kvm86.fc12.x86_64.

If I understand this correctly, I should hunker down and wait for F-12 qemu-kvm updates before updating vgabios further.
Comment 18 Glauber Costa 2009-06-20 09:20:20 EDT
To keep rawhide working, I've applied the same patch F11's vgabios has, in rawhide.

So you can safely update it, and use it with qemu-kvm-0.10.50-6.kvm86.fc12.x86_64
Whenever qemu gets updated to use vgabios 0.6c, we'll reflect it in requires.
Comment 19 Glauber Costa 2009-06-20 09:20:51 EDT
btw, if F11's vgabios do work for you, please karma it.
Comment 20 Mark McLoughlin 2009-06-22 08:00:27 EDT
Okay, we should close this since rawhide doesn't have 0.6c anymore - we won't update to 0.6c again until we have the needed bits in qemu-kvm.

Thanks for all the help Tom