On Fri, Jan 08, 2010 at 05:22:56PM +0000, Daniel P. Berrange wrote: > This series is a merge of two previous series I posted > > http://www.redhat.com/archives/libvir-list/2009-December/msg00232.html > http://www.redhat.com/archives/libvir-list/2009-December/msg00392.html > > It accomplishes quite a lot of things, having major impact on the QEMU > driver, hopefully all in a postive way :-) > > In particular it does > > * Add standard XML syntax for addressing of PCI devices, and disk drives > * Add support for disk controllers as a managed device in XML > * Add support for disk controller hotplug/unplug > * Convert everything over to use QEMU's -device flag where available > * Add PCI addressing when using -device > * Introduce a way to give every device a unique 'alias' name in > the XML format > > I can't promise it works perfectly, but i've done quite alot of positive > testing with it now & believe all the back comptability stuff is working > right. Since this is a long series, it might be helpful to see the results in the XML and command line Starting with this initial XML config which the application defines <domain type='kvm' id='2'> <name>everything</name> <uuid>c7a1edbd-edaf-9455-926a-d65c36db1809</uuid> <memory>219200</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc-0.11'>hvm</type> <kernel>/home/berrange/vmlinuz-PAE</kernel> <initrd>/home/berrange/initrd-PAE.img</initrd> <boot dev='hd'/> </os> <features> <acpi/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/home/berrange/usr/qemu-0.12/bin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/berrange/VirtualMachines/plain.qcow'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='cdrom'> <source file='/home/berrange/gpxe.iso'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdb' bus='usb'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sda' bus='scsi'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdz' bus='scsi'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdaf' bus='scsi'/> </disk> <interface type='user'> <mac address='52:54:00:5b:ef:21'/> <model type='ne2k_pci'/> </interface> <interface type='mcast'> <mac address='52:54:00:1c:dc:98'/> <source address='230.0.0.1' port='5558'/> <model type='virtio'/> </interface> <interface type='network'> <mac address='52:54:00:f7:c5:0e'/> <source network='default'/> <target dev='vnet0'/> <model type='e1000'/> </interface> <interface type='user'> <mac address='52:54:00:56:6c:55'/> <model type='pcnet'/> </interface> <interface type='user'> <mac address='52:54:00:ca:0d:58'/> <model type='rtl8139'/> </interface> <serial type='pty'> <source path='/dev/pts/10'/> <target port='0'/> </serial> <parallel type='pty'> <source path='/dev/pts/17'/> <target port='0'/> </parallel> <console type='pty' tty='/dev/pts/10'> <source path='/dev/pts/10'/> <target port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5900' autoport='yes'/> <sound model='ac97'/> <sound model='es1370'/> <video> <model type='cirrus' vram='9216' heads='1'/> </video> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x15' slot='0x00' function='0x0'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='4' device='2'/> </source> </hostdev> <watchdog model='i6300esb' action='reset'/> </devices> </domain> With the latest QEMU we now generate command line that looks like this LC_ALL=C PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin HOME=/root USER=root LOGNAME=root QEMU_AUDIO_DRV=none /home/berrange/usr/qemu-0.12/bin/qemu -S -M pc-0.11 -enable-kvm -m 214 -smp 1 -name everything -uuid c7a1edbd-edaf-9455-926a-d65c36db1809 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/everything.monitor,server,nowait -mon chardev=monitor,mode=readline -boot c -kernel /home/berrange/vmlinuz-PAE -initrd /home/berrange/initrd-PAE.img -device lsi,id=scsi0,addr=13 -device lsi,id=scsi1,addr=14 -device lsi,id=scsi2,addr=15 -device lsi,id=scsi3,addr=16 -device lsi,id=scsi4,addr=17 -drive file=/home/berrange/VirtualMachines/plain.qcow,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,addr=4,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/home/berrange/gpxe.iso,if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -drive file=/home/berrange/output.img,if=none,id=drive-usb-disk1 -device usb-storage,drive=drive-usb-disk1,id=usb-disk1 -drive file=/home/berrange/output.img,if=none,id=drive-scsi0-0-0 -device scsi-disk,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 -drive file=/home/berrange/output.img,if=none,id=drive-scsi3-0-4 -device scsi-disk,bus=scsi3.0,scsi-id=4,drive=drive-scsi3-0-4,id=scsi3-0-4 -drive file=/home/berrange/output.img,if=none,id=drive-scsi4-0-3 -device scsi-disk,bus=scsi4.0,scsi-id=3,drive=drive-scsi4-0-3,id=scsi4-0-3 -netdev user,id=netdev0 -device ne2k_pci,netdev=netdev0,id=ne2k_pci-nic0,mac=52:54:00:5b:ef:21,addr=5 -netdev socket,mcast=230.0.0.1:5558,id=netdev1 -device virtio-net-pci,netdev=netdev1,id=virtio-nic1,mac=52:54:00:1c:dc:98,addr=6 -netdev tap,fd=21,id=netdev2 -device e1000,netdev=netdev2,id=e1000-nic2,mac=52:54:00:f7:c5:0e,addr=7 -netdev user,id=netdev3 -device pcnet,netdev=netdev3,id=pcnet-nic3,mac=52:54:00:56:6c:55,addr=8 -netdev user,id=netdev4 -device rtl8139,netdev=netdev4,id=rtl8139-nic4,mac=52:54:00:ca:0d:58,addr=9 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -chardev pty,id=parallel0 -device isa-parallel,chardev=parallel0 -usb -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device AC97,id=sound0,addr=10 -device ES1370,id=sound1,addr=11 -device i6300esb,id=watchdog0,addr=18 -watchdog-action reset -device pci-assign,host=15:00.0,id=hostpci0,addr=12 -device usb-host,hostbus=004,hostaddr=002,id=hostusb1 If you query the XML dump while the VM is running, you'll see the extra address information, alias names, and disk controller elements present. eg like this <domain type='kvm' id='2'> <name>everything</name> <uuid>c7a1edbd-edaf-9455-926a-d65c36db1809</uuid> <memory>219200</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc-0.11'>hvm</type> <kernel>/home/berrange/vmlinuz-PAE</kernel> <initrd>/home/berrange/initrd-PAE.img</initrd> <boot dev='hd'/> </os> <features> <acpi/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/home/berrange/usr/qemu-0.12/bin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/berrange/VirtualMachines/plain.qcow'/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='cdrom'> <source file='/home/berrange/gpxe.iso'/> <target dev='hdc' bus='ide'/> <readonly/> <alias name='ide0-1-0'/> <address type='drive' controller='0' bus='1' unit='0'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdb' bus='usb'/> <alias name='usb-disk1'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sda' bus='scsi'/> <alias name='scsi0-0-0'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdz' bus='scsi'/> <alias name='scsi3-0-4'/> <address type='drive' controller='3' bus='0' unit='4'/> </disk> <disk type='file' device='disk'> <source file='/home/berrange/output.img'/> <target dev='sdaf' bus='scsi'/> <alias name='scsi4-0-3'/> <address type='drive' controller='4' bus='0' unit='3'/> </disk> <controller type='ide' index='0'> <alias name='ide0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='scsi' index='0'> <alias name='scsi1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> </controller> <controller type='scsi' index='1'> <alias name='scsi2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/> </controller> <controller type='scsi' index='2'> <alias name='scsi3'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/> </controller> <controller type='scsi' index='3'> <alias name='scsi4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/> </controller> <controller type='scsi' index='4'> <alias name='scsi5'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> </controller> <interface type='user'> <mac address='52:54:00:5b:ef:21'/> <model type='ne2k_pci'/> <alias name='ne2k_pci-nic0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </interface> <interface type='mcast'> <mac address='52:54:00:1c:dc:98'/> <source address='230.0.0.1' port='5558'/> <model type='virtio'/> <alias name='virtio-nic1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </interface> <interface type='network'> <mac address='52:54:00:f7:c5:0e'/> <source network='default'/> <target dev='vnet0'/> <model type='e1000'/> <alias name='e1000-nic2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </interface> <interface type='user'> <mac address='52:54:00:56:6c:55'/> <model type='pcnet'/> <alias name='pcnet-nic3'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </interface> <interface type='user'> <mac address='52:54:00:ca:0d:58'/> <model type='rtl8139'/> <alias name='rtl8139-nic4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/10'/> <target port='0'/> <alias name='serial0'/> </serial> <parallel type='pty'> <source path='/dev/pts/17'/> <target port='0'/> <alias name='parallel0'/> </parallel> <console type='pty' tty='/dev/pts/10'> <source path='/dev/pts/10'/> <target port='0'/> <alias name='serial0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5900' autoport='yes'/> <sound model='ac97'> <alias name='sound0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </sound> <sound model='es1370'> <alias name='sound1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> </sound> <video> <model type='cirrus' vram='9216' heads='1'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x15' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x12' function='0x0'/> <alias name='hostpci0'/> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='4' device='2'/> </source> <alias name='hostusb1'/> </hostdev> <watchdog model='i6300esb' action='reset'> <alias name='watchdog0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x11' function='0x0'/> </watchdog> </devices> <seclabel type='dynamic' model='selinux'> <label>system_u:system_r:svirt_t:s0:c133,c417</label> <imagelabel>system_u:object_r:svirt_image_t:s0:c133,c417</imagelabel> </seclabel> </domain> Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list