qemu: add "romfile" support to specify device boot ROM

This patch addresses: https://bugzilla.redhat.com/show_bug.cgi?id=781562

Along with the "rombar" option that controls whether or not a boot rom
is made visible to the guest, qemu also has a "romfile" option that
allows specifying a binary file to present as the ROM BIOS of any
emulated or passthrough PCI device. This patch adds support for
specifying romfile to both passthrough PCI devices, and emulated
network devices that attach to the guest's PCI bus (just about
everything other than ne2k_isa).

One example of the usefulness of this option is described in the
bugzilla report: 82576 sriov network adapters don't provide a ROM BIOS
for the cards virtual functions (VF), but an image of such a ROM is
available, and with this ROM visible to the guest, it can PXE boot.

In libvirt's xml, the new option is configured like this:

   <hostdev>
     ...
     <rom file='/etc/fake/boot.bin'/>
     ...
   </hostdev

(similarly for <interface>).
This commit is contained in:
Laine Stump
2012-01-25 11:20:49 -05:00
parent 3284ac046f
commit 3801831cdf
7 changed files with 63 additions and 34 deletions

View File

@@ -4,8 +4,9 @@ unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda \
/dev/HostVG/QEMUGuest2 \
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:24:a5:9f,bus=pci.0,addr=0x3,rombar=1 \
-net user,vlan=0,name=hostnet0 \
-device virtio-net-pci,vlan=1,id=net1,mac=52:54:00:24:a5:9e,bus=pci.0,addr=0x4 \
-net user,vlan=1,name=hostnet1 \
-device virtio-net-pci,vlan=1,id=net1,mac=52:54:00:24:a5:9e,bus=pci.0,addr=0x4,\
romfile=/etc/fake/bootrom.bin -net user,vlan=1,name=hostnet1 \
-usb -device pci-assign,host=06:12.5,id=hostdev0,bus=pci.0,addr=0x5,rombar=0 \
-device pci-assign,host=06:12.6,id=hostdev1,bus=pci.0,addr=0x6,rombar=1 \
-device pci-assign,host=06:12.6,id=hostdev1,bus=pci.0,addr=0x6,rombar=1,\
romfile=/etc/fake/bootrom.bin \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7

View File

@@ -28,6 +28,7 @@
<interface type='user'>
<mac address='52:54:00:24:a5:9e'/>
<model type='virtio'/>
<rom file='/etc/fake/bootrom.bin'/>
</interface>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
@@ -39,7 +40,7 @@
<source>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x6'/>
</source>
<rom bar='on'/>
<rom bar='on' file='/etc/fake/bootrom.bin'/>
</hostdev>
<memballoon model='virtio'/>
</devices>