于 2011年10月20日 10:09, Xu He Jie 写道: > When using the xml as below: > ------------------------------------------------------ > <devices> > <emulator>/home/soulxu/data/work-code/qemu-kvm/x86_64-softmmu/qemu-system-x86_64</emulator> > <disk type='file' device='disk'> > <driver name='qemu' type='qcow2'/> > <source file='/home/soulxu/data/VM/images/linux.img'/> > <target dev='vda' bus='virtio'/> > <address type='drive' controller='0' bus='0' unit='0'/> > </disk> > <input type='mouse' bus='ps2'/> > <graphics type='vnc' port='-1' autoport='yes'/> > <video> > <model type='cirrus' vram='9216' 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='0x03' function='0x0'/> > </memballoon> > </devices> > ------------------------------------------------------ > > Then can't startup qemu, the error message as below: > virsh # start test-vm > error: Failed to start domain test-vm > error: internal error process exited while connecting to monitor: qemu-system-x86_64: -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3: PCI: slot 3 function 0 not available for virtio-balloon-pci, in use by virtio-blk-pci > qemu-system-x86_64: -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3: Device 'virtio-balloon-pci' could not be initialized > > So adding check for bus type and address type. Only the address of pci type support by virtio bus. > > Signed-off-by: Xu He Jie <xuhj@xxxxxxxxxxxxxxxxxx> > --- > src/qemu/qemu_command.c | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 30c0be6..7c4bc0a 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -1321,13 +1321,17 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs) > > /* Disks (VirtIO only for now */ > for (i = 0; i < def->ndisks ; i++) { > - if (def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) > - continue; > - > /* Only VirtIO disks use PCI addrs */ > if (def->disks[i]->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) > continue; > > + if ((def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && > + (def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)) { > + qemuReportError(VIR_ERR_INTERNAL_ERROR, > + _("virtio only support device address type 'PCI' ")); I found I miss the comment 's/support/supports/ ' from previous mail. Please ignore this mail. I will send patch v3. > + goto error; > + } > + > if (qemuDomainPCIAddressSetNextAddr(addrs, &def->disks[i]->info) < 0) > goto error; > } -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list