[libvirt] [PATCH 0/7] Q35 support part 2

Doug Goldstein cardoe at gentoo.org
Mon Aug 5 00:10:48 UTC 2013


On Sun, Aug 4, 2013 at 6:50 PM, Doug Goldstein <cardoe at gentoo.org> wrote:
> On Sat, Aug 3, 2013 at 9:11 PM, Laine Stump <laine at laine.org> wrote:
>> On 08/03/2013 10:06 PM, Doug Goldstein wrote:
>>> On Sat, Aug 3, 2013 at 8:48 PM, Laine Stump <laine at laine.org> wrote:
>>>> On 08/03/2013 09:36 PM, Doug Goldstein wrote:
>>>>> On Sat, Aug 3, 2013 at 6:28 PM, Laine Stump <laine at laine.org> wrote:
>>>>>> ...and here is the result of applying all 10 patches of this 7 patch
>>>>>> series, and starting up a domain using the config file attached to the
>>>>>> end of this message:
>>>>>>
>>>>>> # lspci
>>>>>> 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM
>>>>>> Controller
>>>>>> 00:01.0 VGA compatible controller: Red Hat, Inc. Device 0100 (rev 04)
>>>>>> 00:02.0 PCI bridge: Red Hat, Inc. Device 0001
>>>>>> 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface
>>>>>> Controller (rev 02)
>>>>>> 00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6
>>>>>> port SATA AHCI Controller (rev 02)
>>>>>> 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller
>>>>>> (rev 02)
>>>>>> 01:01.0 PCI bridge: Red Hat, Inc. Device 0001
>>>>>> 02:01.0 Ethernet controller: Red Hat, Inc Virtio network device
>>>>>> 02:02.0 Ethernet controller: Red Hat, Inc Virtio network device
>>>>>> 02:03.0 Multimedia audio controller: Intel Corporation 82801AA AC'97
>>>>>> Audio Controller (rev 01)
>>>>>> 02:04.0 Communication controller: Red Hat, Inc Virtio console
>>>>>> 02:05.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI
>>>>>> Controller #1 (rev 03)
>>>>>> 02:05.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI
>>>>>> Controller #2 (rev 03)
>>>>>> 02:05.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI
>>>>>> Controller #3 (rev 03)
>>>>>> 02:05.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI
>>>>>> Controller #1 (rev 03)
>>>>>> 02:06.0 SCSI storage controller: Red Hat, Inc Virtio block device
>>>>>> 02:07.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
>>>>>> 02:08.0 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6
>>>>>> port SATA AHCI Controller (rev 02)
>>>>>>
>>>>>> You'll notice that everything except the VGA, the implicit devices are
>>>>>>
>>>>>> Yay!
>>>>>>
>>>>>> Now if virt-manager just provided a way to change the machinetype of
>>>>>> guests as they were being created... (does virt-manager explicitly
>>>>>> specify USB controllers? Currently the Q35 doesn't automatically create
>>>>>> a USB controller (see the patch comments)
>>>>>>
>>>>>> =========
>>>>>> <domain type='kvm'>
>>>>>>   <name>F15-q35</name>
>>>>>>   <memory unit='KiB'>1048576</memory>
>>>>>>   <currentMemory unit='KiB'>1048576</currentMemory>
>>>>>>   <os>
>>>>>>     <type arch='x86_64' machine='pc-q35-1.5'>hvm</type>
>>>>>>     <boot dev='hd'/>
>>>>>>     <bootmenu enable='yes'/>
>>>>>>   </os>
>>>>>>   <features>
>>>>>>     <acpi/>
>>>>>>     <apic/>
>>>>>>     <pae/>
>>>>>>   </features>
>>>>>>   <clock offset='utc'/>
>>>>>>   <devices>
>>>>>>     <emulator>/usr/bin/qemu-kvm</emulator>
>>>>>>     <disk type='file' device='disk'>
>>>>>>       <driver name='qemu' type='raw'/>
>>>>>>       <source file='/var/lib/libvirt/images/F15.img'/>
>>>>>>       <target dev='vda' bus='virtio'/>
>>>>>>     </disk>
>>>>>>     <disk type='file' device='cdrom'>
>>>>>>       <driver name='qemu' type='raw'/>
>>>>>>       <source file='/home/laine/example.iso'/>
>>>>>>       <target dev='hdc' bus='sata'/>
>>>>>>       <readonly/>
>>>>>>       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>>>>>>     </disk>
>>>>>>     <controller type='virtio-serial' index='0'/>
>>>>>>     <controller type='usb' index='0' model='ich9-ehci1'/>
>>>>>>     <controller type='usb' index='0' model='ich9-uhci1'>
>>>>>>       <master startport='0'/>
>>>>>>       <address type='pci' domain='0x0000' bus='0x02' slot='0x05'
>>>>>> function='0x0' multifunction='on'/>
>>>>>>     </controller>
>>>>>>     <controller type='usb' index='0' model='ich9-uhci2'>
>>>>>>       <master startport='2'/>
>>>>>>       <address type='pci' domain='0x0000' bus='0x02' slot='0x05'
>>>>>> function='0x1'/>
>>>>>>     </controller>
>>>>>>     <controller type='usb' index='0' model='ich9-uhci3'>
>>>>>>       <master startport='4'/>
>>>>>>       <address type='pci' domain='0x0000' bus='0x02' slot='0x05'
>>>>>> function='0x2'/>
>>>>>>     </controller>
>>>>>>     <controller type='sata' index='0'/>
>>>>>>     <controller type='sata' index='1'/>
>>>>>>     <controller type='pci' index='0' model='pcie-root'/>
>>>>>>     <interface type='network'>
>>>>>>       <source network='ipv6'/>
>>>>>>       <model type='virtio'/>
>>>>>>     </interface>
>>>>>>     <interface type='network'>
>>>>>>       <source network='isolated'/>
>>>>>>       <model type='virtio'/>
>>>>>>     </interface>
>>>>>>     <serial type='pty'>
>>>>>>       <target port='0'/>
>>>>>>     </serial>
>>>>>>     <console type='pty'>
>>>>>>       <target type='serial' port='0'/>
>>>>>>     </console>
>>>>>>     <input type='mouse' bus='ps2'/>
>>>>>>     <graphics type='vnc' port='-1' autoport='yes'/>
>>>>>>     <sound model='ac97'/>
>>>>>>     <video>
>>>>>>       <model type='qxl' ram='65536' vram='9216' heads='1'/>
>>>>>>     </video>
>>>>>>     <memballoon model='virtio'/>
>>>>>>   </devices>
>>>>>> </domain>
>>>>>>
>>>>>> --
>>>>>> libvir-list mailing list
>>>>>> libvir-list at redhat.com
>>>>>> https://www.redhat.com/mailman/listinfo/libvir-list
>>>>> Excellent thanks for providing a reference example. I've been trying
>>>>> to review all your patches and work through testing bits and pieces
>>>>> myself. I should have probably spoke up on the ML rather than
>>>>> remaining silent. I'll finish up testing it tonight and ACK a handful
>>>>> shortly.
>>>>>
>>>> I have made some small changes to some of the other patches in the
>>>> meantime. If you're serious to the point of actually testing them out, I
>>>> should repost the ones I haven't yet pushed (only the first three).
>>>> Coming up momentarily...
>>> Yeah please repost. Until you mentioned the seabios stuff in your last
>>> e-mail I had been debugging that.
>>
>>
>> That took me a while to figure out too (and I was getting really worried
>> until I did). I'm just glad that Alex Williamson had previously told me
>> that qemu wasn't strict about the "can't plug a PCI device into a PCIe
>> slot" rule.
>>
>>
>>> I've got a CentOS 6.4 VM I'm trying
>>> to get up under Q35 on qemu-1.5.2 + libvirt master + your patch set as
>>> part of my review.
>>
>> Cool! The more real world testing the better! Thanks for taking the time
>> to do that. (My testing has been with an existing Fedora 15 guest that
>> was hanging around. Not sure why I picked that one; maybe because it was
>> the most disposable item on the list :-)
>
> So with v2 I've achieved success as well with my CentOS 6.4 VM. Your
> domain XML is shorter than mine (I'm using dumpxml --inactive) but
> I'll post mine.
>
> <domain type='kvm'>
>   <name>altima</name>
>   <uuid>c2ca3b04-2ae9-0dd2-9855-109dcd90e38c</uuid>
>   <description>CentOS 6.2 i386</description>
>   <memory unit='KiB'>524288</memory>
>   <currentMemory unit='KiB'>524288</currentMemory>
>   <vcpu placement='static'>1</vcpu>
>   <os>
>     <type arch='x86_64' machine='pc-q35-1.5'>hvm</type>
>     <boot dev='hd'/>
>   </os>
>   <features>
>     <acpi/>
>     <apic/>
>     <pae/>
>   </features>
>   <clock offset='utc'>
>     <timer name='rtc' tickpolicy='catchup' track='guest'>
>       <catchup  threshold='123' slew='120' limit='10000'/>
>     </timer>
>     <timer name='pit' tickpolicy='delay'/>
>   </clock>
>   <on_poweroff>destroy</on_poweroff>
>   <on_reboot>restart</on_reboot>
>   <on_crash>restart</on_crash>
>   <devices>
>     <emulator>/usr/bin/qemu-kvm</emulator>
>     <disk type='block' device='disk'>
>       <driver name='qemu' type='raw'/>
>       <source dev='/dev/vms/altima.img'/>
>       <target dev='vda' bus='virtio'/>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x04'
> function='0x0'/>
>     </disk>
>     <disk type='block' device='cdrom'>
>       <driver name='qemu' type='raw'/>
>       <target dev='hdc' bus='ide'/>
>       <readonly/>
>       <address type='drive' controller='0' bus='1' target='0' unit='0'/>
>     </disk>
>     <controller type='sata' index='0'>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x1f'
> function='0x2'/>
>     </controller>
>     <controller type='sata' index='1'>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x02'
> function='0x0'/>
>     </controller>
>     <controller type='virtio-serial' index='0'>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x03'
> function='0x0'/>
>     </controller>
>     <controller type='pci' index='0' model='pcie-root'/>
>     <controller type='pci' index='1' model='dmi-to-pci-bridge'>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>     </controller>
>     <controller type='pci' index='2' model='pci-bridge'>
>       <address type='pci' domain='0x0000' bus='0x01' slot='0x01'
> function='0x0'/>
>     </controller>
>     <controller type='usb' index='0' model='ich9-ehci1'>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x07'
> function='0x7'/>
>     </controller>
>     <controller type='usb' index='0' model='ich9-uhci1'>
>       <master startport='0'/>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x06'
> function='0x0' multifunction='on'/>
>     </controller>
>     <controller type='usb' index='0' model='ich9-uhci2'>
>       <master startport='2'/>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x06'
> function='0x1'/>
>     </controller>
>     <controller type='usb' index='0' model='ich9-uhci3'>
>       <master startport='4'/>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x06'
> function='0x2'/>
>     </controller>
>     <controller type='ide' index='0'/>
>     <interface type='bridge'>
>       <mac address='52:54:00:a6:23:4f'/>
>       <source bridge='br0'/>
>       <model type='virtio'/>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x01'
> function='0x0'/>
>     </interface>
>     <serial type='pty'>
>       <target port='0'/>
>     </serial>
>     <console type='pty'>
>       <target type='serial' port='0'/>
>     </console>
>     <channel type='unix'>
>       <source mode='bind' path='/var/lib/libvirt/qemu/altima.agent'/>
>       <target type='virtio' name='org.qemu.guest_agent.0'/>
>       <address type='virtio-serial' controller='0' bus='0' port='1'/>
>     </channel>
>     <channel type='spicevmc'>
>       <target type='virtio' name='com.redhat.spice.0'/>
>       <address type='virtio-serial' controller='0' bus='0' port='2'/>
>     </channel>
>     <input type='tablet' bus='usb'/>
>     <input type='mouse' bus='ps2'/>
>     <graphics type='spice' autoport='yes'/>
>     <video>
>       <model type='qxl' ram='65536' vram='65536' heads='1'/>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
> function='0x0'/>
>     </video>
>     <memballoon model='virtio'>
>       <address type='pci' domain='0x0000' bus='0x02' slot='0x05'
> function='0x0'/>
>     </memballoon>
>   </devices>
> </domain>
>
> [root at altima ~]# lspci
> 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller
> 00:01.0 VGA compatible controller: Red Hat, Inc. Device 0100 (rev 04)
> 00:02.0 PCI bridge: Red Hat, Inc. Device 0001
> 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface
> Controller (rev 02)
> 00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH)
> 6 port SATA Controller [AHCI mode] (rev 02)
> 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
> 01:01.0 PCI bridge: Red Hat, Inc. Device 0001
> 02:01.0 Ethernet controller: Red Hat, Inc Virtio network device
> 02:02.0 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH)
> 6 port SATA Controller [AHCI mode] (rev 02)
> 02:03.0 Communication controller: Red Hat, Inc Virtio console
> 02:04.0 SCSI storage controller: Red Hat, Inc Virtio block device
> 02:05.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
> 02:06.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB
> UHCI Controller #1 (rev 03)
> 02:06.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB
> UHCI Controller #2 (rev 03)
> 02:06.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB
> UHCI Controller #3 (rev 03)
>
>
> I did notice that the EHCI USB controller is missing on bus 2 slot 7
> function 7. Not sure if I did something wrong there in my config or
> we're still missing some of that plumbing.
>
> --
> Doug Goldstein

Now for the ugly side...

You can see below I clearly screwed up the config with regards to the
bus, but I just wanted to see how it would react.

domain type='kvm'>
  <name>altima</name>
  <uuid>c2ca3b04-2ae9-0dd2-9855-109dcd90e38c</uuid>
  <description>CentOS 6.2 i386</description>
  <memory unit='KiB'>524288</memory>
  <currentMemory unit='KiB'>524288</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-1.5'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup' track='guest'>
      <catchup  threshold='123' slew='120' limit='10000'/>
    </timer>
    <timer name='pit' tickpolicy='delay'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/vms/altima.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='sata' index='0'/>
    <controller type='sata' index='1'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <interface type='bridge'>
      <mac address='52:54:00:a6:23:4f'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/altima.agent'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='spice' autoport='yes'/>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
    </memballoon>
  </devices>
</domain>

Results in the following:

error: internal error: PCI bus 0000:00 is not compatible with the
device. Device requires a standard PCI slot, which is not provided by
this bus

Two issues:
- Not sure I'd really call that a VIR_ERR_INTERNAL_ERROR.
- What device? I screwed them all up. Might be nice to provide some
info about the device in the error message.

That was in patch 3/7 from the original series, which is already pushed.

-- 
Doug Goldstein




More information about the libvir-list mailing list