From: Daniel P. Berrange Date: Fri, 16 Apr 2010 10:46:38 +0000 (+0100) Subject: Fix network hotplug to use device_add in QEMU X-Git-Tag: v0.8.1~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3e098f3d8ec3e605e92dce72e0d981667f849b6;p=thirdparty%2Flibvirt.git Fix network hotplug to use device_add in QEMU The initial boot of VMs uses -device for NICs where available. The corresponding monitor command is device_add, but the network hotplug code was still using device_del by mistake. * src/qemu/qemu_driver.c: Use device_add for NIC hotplug where available --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 04aa305be1..5f4adfd956 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7112,17 +7112,29 @@ static int qemudDomainAttachNetDevice(virConnectPtr conn, close(tapfd); tapfd = -1; - if (!(nicstr = qemuBuildNicStr(net, NULL, vlan))) - goto try_remove; + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (!(nicstr = qemuBuildNicDevStr(net, vlan))) + goto try_remove; + } else { + if (!(nicstr = qemuBuildNicStr(net, NULL, vlan))) + goto try_remove; + } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuMonitorAddPCINetwork(priv->mon, nicstr, - &guestAddr) < 0) { - qemuDomainObjExitMonitorWithDriver(driver, vm); - goto try_remove; + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { + qemuDomainObjExitMonitorWithDriver(driver, vm); + goto try_remove; + } + } else { + if (qemuMonitorAddPCINetwork(priv->mon, nicstr, + &guestAddr) < 0) { + qemuDomainObjExitMonitorWithDriver(driver, vm); + goto try_remove; + } + net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; + memcpy(&net->info.addr.pci, &guestAddr, sizeof(guestAddr)); } - net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; - memcpy(&net->info.addr.pci, &guestAddr, sizeof(guestAddr)); qemuDomainObjExitMonitorWithDriver(driver, vm); ret = 0;