[libvirt] [PATCH 00/13] qemu: Kill some very ugly legacy code

Noticed while doing a depth-first search for a different refactor. Peter Krempa (13): qemu: remove default case from few typecasted enums qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachUSBMassStorageDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostUSBDevice qemu: monitor: Kill legacy USB monitor code qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachVirtioDiskDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachNetDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostPCIDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachVirtioDiskDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachControllerDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachHostPCIDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachNetDevice qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachControllerDevice qemu: monitor: Kill legacy PCI hotplug code src/qemu/qemu_command.c | 4 +- src/qemu/qemu_hotplug.c | 381 ++++++++++++++++--------------------------- src/qemu/qemu_monitor.c | 130 --------------- src/qemu/qemu_monitor.h | 37 ----- src/qemu/qemu_monitor_json.c | 79 --------- src/qemu/qemu_monitor_json.h | 11 -- src/qemu/qemu_monitor_text.c | 377 ------------------------------------------ src/qemu/qemu_monitor_text.h | 31 ---- 8 files changed, 140 insertions(+), 910 deletions(-) -- 2.8.1

Commit 98c5c53d69b partially reverted the effort to use typecasted enums for compiler notification. Turn it back. --- src/qemu/qemu_command.c | 4 +++- src/qemu/qemu_hotplug.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9597b30..b924917 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4281,7 +4281,9 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, virBufferAddLit(&buf, "vfio-pci"); break; - default: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid PCI passthrough type '%s'"), virDomainHostdevSubsysPCIBackendTypeToString(backend)); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index ef8696b..4ff10b4 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1234,7 +1234,16 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, } break; - default: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM: + break; + + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN: + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("QEMU does not support device assignment mode '%s'"), + virDomainHostdevSubsysPCIBackendTypeToString(backend)); + goto error; break; } -- 2.8.1

--- src/qemu/qemu_hotplug.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4ff10b4..8755f68 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -650,32 +650,26 @@ qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, goto error; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) - goto error; - if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) - goto error; - if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) - goto error; - } + if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) + goto error; + if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) + goto error; + if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) + goto error; if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) goto error; qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - ret = qemuMonitorAddDrive(priv->mon, drivestr); - if (ret == 0) { - ret = qemuMonitorAddDevice(priv->mon, devstr); - if (ret < 0) { - VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", - drivestr, devstr); - /* XXX should call 'drive_del' on error but this does not - exist yet */ - } + ret = qemuMonitorAddDrive(priv->mon, drivestr); + if (ret == 0) { + ret = qemuMonitorAddDevice(priv->mon, devstr); + if (ret < 0) { + VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", + drivestr, devstr); + /* XXX should call 'drive_del' on error but this does not + exist yet */ } - } else { - ret = qemuMonitorAddUSBDisk(priv->mon, src); } if (qemuDomainObjExitMonitor(driver, vm) < 0) { ret = -1; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 8755f68..627d28a 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1869,23 +1869,16 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, goto cleanup; teardownlabel = true; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) - goto cleanup; - if (!(devstr = qemuBuildUSBHostdevDevStr(vm->def, hostdev, priv->qemuCaps))) - goto cleanup; - } + if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) + goto cleanup; + if (!(devstr = qemuBuildUSBHostdevDevStr(vm->def, hostdev, priv->qemuCaps))) + goto cleanup; if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0) goto cleanup; qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) - ret = qemuMonitorAddDevice(priv->mon, devstr); - else - ret = qemuMonitorAddUSBDeviceExact(priv->mon, - hostdev->source.subsys.u.usb.bus, - hostdev->source.subsys.u.usb.device); + ret = qemuMonitorAddDevice(priv->mon, devstr); if (qemuDomainObjExitMonitor(driver, vm) < 0) { ret = -1; goto cleanup; -- 2.8.1

Code was obsoleted by using -device. --- src/qemu/qemu_monitor.c | 47 --------------------- src/qemu/qemu_monitor.h | 14 ------- src/qemu/qemu_monitor_json.c | 29 ------------- src/qemu/qemu_monitor_json.h | 11 ----- src/qemu/qemu_monitor_text.c | 99 -------------------------------------------- src/qemu/qemu_monitor_text.h | 11 ----- 6 files changed, 211 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index fe8e89f..2ec4222 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2405,53 +2405,6 @@ qemuMonitorGraphicsRelocate(qemuMonitorPtr mon, int -qemuMonitorAddUSBDisk(qemuMonitorPtr mon, - const char *path) -{ - VIR_DEBUG("path=%s", path); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddUSBDisk(mon, path); - else - return qemuMonitorTextAddUSBDisk(mon, path); -} - - -int -qemuMonitorAddUSBDeviceExact(qemuMonitorPtr mon, - int bus, - int dev) -{ - VIR_DEBUG("bus=%d dev=%d", bus, dev); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddUSBDeviceExact(mon, bus, dev); - else - return qemuMonitorTextAddUSBDeviceExact(mon, bus, dev); -} - - -int -qemuMonitorAddUSBDeviceMatch(qemuMonitorPtr mon, - int vendor, - int product) -{ - VIR_DEBUG("vendor=%d product=%d", vendor, product); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddUSBDeviceMatch(mon, vendor, product); - else - return qemuMonitorTextAddUSBDeviceMatch(mon, vendor, product); -} - - -int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon, virDevicePCIAddress *hostAddr, virDevicePCIAddress *guestAddr) diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 470c729..7825781 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -628,20 +628,6 @@ int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon, int tlsPort, const char *tlsSubject); -/* XXX disk driver type eg, qcow/etc. - * XXX cache mode - */ -int qemuMonitorAddUSBDisk(qemuMonitorPtr mon, - const char *path); - -int qemuMonitorAddUSBDeviceExact(qemuMonitorPtr mon, - int bus, - int dev); -int qemuMonitorAddUSBDeviceMatch(qemuMonitorPtr mon, - int vendor, - int product); - - int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon, virDevicePCIAddress *hostAddr, virDevicePCIAddress *guestAddr); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7bb9976..5092548 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -3032,35 +3032,6 @@ int qemuMonitorJSONGraphicsRelocate(qemuMonitorPtr mon, } -int qemuMonitorJSONAddUSBDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *path ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("usb_add not supported in JSON mode")); - return -1; -} - - -int qemuMonitorJSONAddUSBDeviceExact(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - int bus ATTRIBUTE_UNUSED, - int dev ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("usb_add not supported in JSON mode")); - return -1; -} - - -int qemuMonitorJSONAddUSBDeviceMatch(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - int vendor ATTRIBUTE_UNUSED, - int product ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("usb_add not supported in JSON mode")); - return -1; -} - - int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED, virDevicePCIAddress *hostAddr ATTRIBUTE_UNUSED, virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 8b5d422..81247f4 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -169,17 +169,6 @@ int qemuMonitorJSONGraphicsRelocate(qemuMonitorPtr mon, int tlsPort, const char *tlsSubject); -int qemuMonitorJSONAddUSBDisk(qemuMonitorPtr mon, - const char *path); - -int qemuMonitorJSONAddUSBDeviceExact(qemuMonitorPtr mon, - int bus, - int dev); -int qemuMonitorJSONAddUSBDeviceMatch(qemuMonitorPtr mon, - int vendor, - int product); - - int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon, virDevicePCIAddress *hostAddr, virDevicePCIAddress *guestAddr); diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index ccae02f..707addc 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -1572,105 +1572,6 @@ int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, } -int qemuMonitorTextAddUSBDisk(qemuMonitorPtr mon, - const char *path) -{ - char *cmd = NULL; - char *safepath; - int ret = -1; - char *info = NULL; - - safepath = qemuMonitorEscapeArg(path); - if (!safepath) - return -1; - - if (virAsprintf(&cmd, "usb_add disk:%s", safepath) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) - goto cleanup; - - /* If the command failed qemu prints: - * Could not add ... */ - if (strstr(info, "Could not add ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("unable to add USB disk %s: %s"), path, info); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(safepath); - VIR_FREE(info); - return ret; -} - - -static int qemuMonitorTextAddUSBDevice(qemuMonitorPtr mon, - const char *addr) -{ - char *cmd; - char *reply = NULL; - int ret = -1; - - if (virAsprintf(&cmd, "usb_add %s", addr) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* If the command failed qemu prints: - * Could not add ... */ - if (strstr(reply, "Could not add ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - "%s", _("adding usb device failed")); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextAddUSBDeviceExact(qemuMonitorPtr mon, - int bus, - int dev) -{ - int ret; - char *addr; - - if (virAsprintf(&addr, "host:%.3d.%.3d", bus, dev) < 0) - return -1; - - ret = qemuMonitorTextAddUSBDevice(mon, addr); - - VIR_FREE(addr); - return ret; -} - -int qemuMonitorTextAddUSBDeviceMatch(qemuMonitorPtr mon, - int vendor, - int product) -{ - int ret; - char *addr; - - if (virAsprintf(&addr, "host:%.4x:%.4x", vendor, product) < 0) - return -1; - - ret = qemuMonitorTextAddUSBDevice(mon, addr); - - VIR_FREE(addr); - return ret; -} - - static int qemuMonitorTextParsePCIAddReply(qemuMonitorPtr mon ATTRIBUTE_UNUSED, const char *reply, diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 287a851..d62e668 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -119,17 +119,6 @@ int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, int tlsPort, const char *tlsSubject); -int qemuMonitorTextAddUSBDisk(qemuMonitorPtr mon, - const char *path); - -int qemuMonitorTextAddUSBDeviceExact(qemuMonitorPtr mon, - int bus, - int dev); -int qemuMonitorTextAddUSBDeviceMatch(qemuMonitorPtr mon, - int vendor, - int product); - - int qemuMonitorTextAddPCIHostDevice(qemuMonitorPtr mon, virDevicePCIAddress *hostAddr, virDevicePCIAddress *guestAddr); -- 2.8.1

After killing one of the conditionals it's now guaranteed to have @drivealias populated when calling the monitor, so the code attempting to cleanup can be simplified. --- src/qemu/qemu_hotplug.c | 73 ++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 627d28a..4e667fe 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -318,7 +318,6 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, virDomainDiskDefPtr disk) { int ret = -1; - const char* type = virDomainDiskBusTypeToString(disk->bus); qemuDomainObjPrivatePtr priv = vm->privateData; char *devstr = NULL; char *drivestr = NULL; @@ -342,59 +341,45 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, if (qemuDomainPrepareDisk(driver, vm, disk, NULL, false) < 0) goto cleanup; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { - if (virDomainCCWAddressAssign(&disk->info, priv->ccwaddrs, - !disk->info.addr.ccw.assigned) < 0) - goto error; - } else if (!disk->info.type || - disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0) - goto error; - } - releaseaddr = true; - if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) + if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { + if (virDomainCCWAddressAssign(&disk->info, priv->ccwaddrs, + !disk->info.addr.ccw.assigned) < 0) goto error; - - if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) + } else if (!disk->info.type || + disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { + if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0) goto error; + } + releaseaddr = true; + if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) + goto error; - if (!(drivealias = qemuDeviceDriveHostAlias(disk, priv->qemuCaps))) - goto error; + if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) + goto error; - if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) - goto error; - } + if (!(drivealias = qemuDeviceDriveHostAlias(disk, priv->qemuCaps))) + goto error; + + if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) + goto error; if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) goto error; qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - ret = qemuMonitorAddDrive(priv->mon, drivestr); - if (ret == 0) { - ret = qemuMonitorAddDevice(priv->mon, devstr); - if (ret < 0) { - virErrorPtr orig_err = virSaveLastError(); - if (!drivealias || - qemuMonitorDriveDel(priv->mon, drivealias) < 0) { - VIR_WARN("Unable to remove drive %s (%s) after failed " - "qemuMonitorAddDevice", - NULLSTR(drivealias), drivestr); - } - if (orig_err) { - virSetError(orig_err); - virFreeError(orig_err); - } + ret = qemuMonitorAddDrive(priv->mon, drivestr); + if (ret == 0) { + ret = qemuMonitorAddDevice(priv->mon, devstr); + if (ret < 0) { + virErrorPtr orig_err = virSaveLastError(); + if (qemuMonitorDriveDel(priv->mon, drivealias) < 0) { + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", drivealias, drivestr); + } + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); } - } - } else if (!disk->info.type || - disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - virDevicePCIAddress guestAddr = disk->info.addr.pci; - ret = qemuMonitorAddPCIDisk(priv->mon, src, type, &guestAddr); - if (ret == 0) { - disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; - memcpy(&disk->info.addr.pci, &guestAddr, sizeof(guestAddr)); } } if (qemuDomainObjExitMonitor(driver, vm) < 0) { -- 2.8.1

--- src/qemu/qemu_hotplug.c | 53 +++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 39 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4e667fe..b56936d 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -799,7 +799,6 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, char *netstr = NULL; virNetDevVPortProfilePtr vport = NULL; int ret = -1; - virDevicePCIAddress guestAddr; int vlan; bool releaseaddr = false; bool iface_connected = false; @@ -934,10 +933,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0) - goto cleanup; - } + if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0) + goto cleanup; if (qemuDomainMachineIsS390CCW(vm->def) && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { @@ -949,15 +946,13 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("virtio-s390 net device cannot be hotplugged.")); goto cleanup; - } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) && - virDomainPCIAddressEnsureAddr(priv->pciaddrs, &net->info) < 0) { + } else if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &net->info) < 0) { goto cleanup; } releaseaddr = true; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { vlan = -1; } else { vlan = qemuDomainNetVLAN(net); @@ -983,8 +978,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { if (!(netstr = qemuBuildHostNetStr(net, driver, ',', -1, tapfdName, tapfdSize, @@ -999,8 +993,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { if (qemuMonitorAddNetdev(priv->mon, netstr, tapfd, tapfdName, tapfdSize, vhostfd, vhostfdName, vhostfdSize) < 0) { @@ -1025,32 +1018,15 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, for (i = 0; i < vhostfdSize; i++) VIR_FORCE_CLOSE(vhostfd[i]); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (!(nicstr = qemuBuildNicDevStr(vm->def, net, vlan, 0, - vhostfdSize, priv->qemuCaps))) - goto try_remove; - } else { - if (!(nicstr = qemuBuildNicStr(net, NULL, vlan))) - goto try_remove; - } + if (!(nicstr = qemuBuildNicDevStr(vm->def, net, vlan, 0, + vhostfdSize, priv->qemuCaps))) + goto try_remove; qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); - virDomainAuditNet(vm, NULL, net, "attach", false); - goto try_remove; - } - } else { - guestAddr = net->info.addr.pci; - if (qemuMonitorAddPCINetwork(priv->mon, nicstr, - &guestAddr) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); - virDomainAuditNet(vm, NULL, net, "attach", false); - goto try_remove; - } - net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; - memcpy(&net->info.addr.pci, &guestAddr, sizeof(guestAddr)); + if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + virDomainAuditNet(vm, NULL, net, "attach", false); + goto try_remove; } if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; @@ -1145,8 +1121,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; if (vlan < 0) { - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { char *netdev_name; if (virAsprintf(&netdev_name, "host%s", net->info.alias) < 0) goto cleanup; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 72 ++++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b56936d..acad666 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1223,57 +1223,37 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, if (backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) teardownlabel = true; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) - goto error; - if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, hostdev->info) < 0) - goto error; - releaseaddr = true; - if (backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_PCI_CONFIGFD)) { - configfd = qemuOpenPCIConfig(hostdev); - if (configfd >= 0) { - if (virAsprintf(&configfd_name, "fd-%s", - hostdev->info->alias) < 0) - goto error; - } - } - - if (!virDomainObjIsActive(vm)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("guest unexpectedly quit during hotplug")); - goto error; + if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) + goto error; + if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, hostdev->info) < 0) + goto error; + releaseaddr = true; + if (backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_PCI_CONFIGFD)) { + configfd = qemuOpenPCIConfig(hostdev); + if (configfd >= 0) { + if (virAsprintf(&configfd_name, "fd-%s", + hostdev->info->alias) < 0) + goto error; } + } - if (!(devstr = qemuBuildPCIHostdevDevStr(vm->def, hostdev, 0, - configfd_name, priv->qemuCaps))) - goto error; + if (!virDomainObjIsActive(vm)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("guest unexpectedly quit during hotplug")); + goto error; + } - qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, - configfd, configfd_name); - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto error; - } else { - virDevicePCIAddressPtr guestAddr = &hostdev->info->addr.pci; - virDevicePCIAddressPtr hostAddr = &hostdev->source.subsys.u.pci.addr; - - if (hostAddr->domain && - !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_HOST_PCI_MULTIDOMAIN)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("non-zero domain='%.4x' in host device " - "PCI address not supported in this QEMU binary"), - hostAddr->domain); - goto error; - } + if (!(devstr = qemuBuildPCIHostdevDevStr(vm->def, hostdev, 0, + configfd_name, priv->qemuCaps))) + goto error; - qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorAddPCIHostDevice(priv->mon, hostAddr, guestAddr); - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto error; + qemuDomainObjEnterMonitor(driver, vm); + ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, + configfd, configfd_name); + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto error; - hostdev->info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; - } virDomainAuditHostdev(vm, hostdev, "attach", ret == 0); if (ret < 0) goto error; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index acad666..2888164 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3382,8 +3382,7 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver, } } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) && - !detach->info.alias) { + if (!detach->info.alias) { if (qemuAssignDeviceDiskAlias(vm->def, detach, priv->qemuCaps) < 0) goto cleanup; } @@ -3391,21 +3390,11 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver, qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - virDomainAuditDisk(vm, detach->src, NULL, "detach", false); - goto cleanup; - } - } else { - if (qemuMonitorRemovePCIDevice(priv->mon, - &detach->info.addr.pci) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - virDomainAuditDisk(vm, detach->src, NULL, "detach", false); + if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { + if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; - } + virDomainAuditDisk(vm, detach->src, NULL, "detach", false); + goto cleanup; } if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 2888164..b8d8def 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3601,8 +3601,7 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver, goto cleanup; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) && - !detach->info.alias) { + if (!detach->info.alias) { if (qemuAssignDeviceControllerAlias(vm->def, priv->qemuCaps, detach) < 0) goto cleanup; } @@ -3610,17 +3609,9 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver, qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); - goto cleanup; - } - } else { - if (qemuMonitorRemovePCIDevice(priv->mon, - &detach->info.addr.pci) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); - goto cleanup; - } + if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto cleanup; } if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b8d8def..0f9cfd1 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3651,11 +3651,7 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - ret = qemuMonitorDelDevice(priv->mon, detach->info->alias); - } else { - ret = qemuMonitorRemovePCIDevice(priv->mon, &detach->info->addr.pci); - } + ret = qemuMonitorDelDevice(priv->mon, detach->info->alias); if (qemuDomainObjExitMonitor(driver, vm) < 0) ret = -1; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 0f9cfd1..b0e1e4d 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3881,8 +3881,7 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, } } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) && - !detach->info.alias) { + if (!detach->info.alias) { if (qemuAssignDeviceNetAlias(vm->def, detach, -1) < 0) goto cleanup; } @@ -3902,21 +3901,11 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - virDomainAuditNet(vm, detach, NULL, "detach", false); - goto cleanup; - } - } else { - if (qemuMonitorRemovePCIDevice(priv->mon, - &detach->info.addr.pci) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - virDomainAuditNet(vm, detach, NULL, "detach", false); + if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { + if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; - } + virDomainAuditNet(vm, detach, NULL, "detach", false); + goto cleanup; } if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; -- 2.8.1

--- src/qemu/qemu_hotplug.c | 56 +++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b0e1e4d..ca7cd84 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -435,47 +435,39 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, return -1; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) - controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) - controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; - } else { - if (!qemuCheckCCWS390AddressSupport(vm->def, controller->info, - priv->qemuCaps, "controller")) - goto cleanup; - } - - if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE || - controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0) - goto cleanup; - } else if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { - if (virDomainCCWAddressAssign(&controller->info, priv->ccwaddrs, - !controller->info.addr.ccw.assigned) < 0) - goto cleanup; - } - releaseaddr = true; - if (qemuAssignDeviceControllerAlias(vm->def, priv->qemuCaps, controller) < 0) + if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + if (qemuDomainMachineIsS390CCW(vm->def) && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) + controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; + else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) + controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; + } else { + if (!qemuCheckCCWS390AddressSupport(vm->def, controller->info, + priv->qemuCaps, "controller")) goto cleanup; + } - if (!(devstr = qemuBuildControllerDevStr(vm->def, controller, priv->qemuCaps, NULL))) + if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE || + controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { + if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0) + goto cleanup; + } else if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { + if (virDomainCCWAddressAssign(&controller->info, priv->ccwaddrs, + !controller->info.addr.ccw.assigned) < 0) goto cleanup; } + releaseaddr = true; + if (qemuAssignDeviceControllerAlias(vm->def, priv->qemuCaps, controller) < 0) + goto cleanup; + + if (!(devstr = qemuBuildControllerDevStr(vm->def, controller, priv->qemuCaps, NULL))) + goto cleanup; if (VIR_REALLOC_N(vm->def->controllers, vm->def->ncontrollers+1) < 0) goto cleanup; qemuDomainObjEnterMonitor(driver, vm); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - ret = qemuMonitorAddDevice(priv->mon, devstr); - } else { - ret = qemuMonitorAttachPCIDiskController(priv->mon, - type, - &controller->info.addr.pci); - } + ret = qemuMonitorAddDevice(priv->mon, devstr); if (qemuDomainObjExitMonitor(driver, vm) < 0) { releaseaddr = false; ret = -1; -- 2.8.1

--- src/qemu/qemu_monitor.c | 83 ------------- src/qemu/qemu_monitor.h | 23 ---- src/qemu/qemu_monitor_json.c | 50 -------- src/qemu/qemu_monitor_text.c | 278 ------------------------------------------- src/qemu/qemu_monitor_text.h | 20 ---- 5 files changed, 454 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 2ec4222..0170850 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2405,73 +2405,6 @@ qemuMonitorGraphicsRelocate(qemuMonitorPtr mon, int -qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon, - virDevicePCIAddress *hostAddr, - virDevicePCIAddress *guestAddr) -{ - VIR_DEBUG("domain=%d bus=%d slot=%d function=%d", - hostAddr->domain, hostAddr->bus, hostAddr->slot, hostAddr->function); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddPCIHostDevice(mon, hostAddr, guestAddr); - else - return qemuMonitorTextAddPCIHostDevice(mon, hostAddr, guestAddr); -} - - -int -qemuMonitorAddPCIDisk(qemuMonitorPtr mon, - const char *path, - const char *bus, - virDevicePCIAddress *guestAddr) -{ - VIR_DEBUG("path=%s bus=%s", path, bus); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddPCIDisk(mon, path, bus, guestAddr); - else - return qemuMonitorTextAddPCIDisk(mon, path, bus, guestAddr); -} - - -int -qemuMonitorAddPCINetwork(qemuMonitorPtr mon, - const char *nicstr, - virDevicePCIAddress *guestAddr) -{ - VIR_DEBUG("nicstr=%s", nicstr); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAddPCINetwork(mon, nicstr, guestAddr); - else - return qemuMonitorTextAddPCINetwork(mon, nicstr, guestAddr); -} - - -int -qemuMonitorRemovePCIDevice(qemuMonitorPtr mon, - virDevicePCIAddress *guestAddr) -{ - VIR_DEBUG("domain=%d bus=%d slot=%d function=%d", - guestAddr->domain, guestAddr->bus, guestAddr->slot, - guestAddr->function); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONRemovePCIDevice(mon, guestAddr); - else - return qemuMonitorTextRemovePCIDevice(mon, guestAddr); -} - - -int qemuMonitorSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd) @@ -2763,22 +2696,6 @@ qemuMonitorGetChardevInfo(qemuMonitorPtr mon, int -qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon, - const char *bus, - virDevicePCIAddress *guestAddr) -{ - VIR_DEBUG("type=%s", bus); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) - return qemuMonitorJSONAttachPCIDiskController(mon, bus, guestAddr); - else - return qemuMonitorTextAttachPCIDiskController(mon, bus, guestAddr); -} - - -int qemuMonitorGetAllPCIAddresses(qemuMonitorPtr mon, qemuMonitorPCIAddress **addrs) { diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 7825781..d4909d8 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -628,29 +628,6 @@ int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon, int tlsPort, const char *tlsSubject); -int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon, - virDevicePCIAddress *hostAddr, - virDevicePCIAddress *guestAddr); - -/* XXX disk driver type eg, qcow/etc. - * XXX cache mode - */ -int qemuMonitorAddPCIDisk(qemuMonitorPtr mon, - const char *path, - const char *bus, - virDevicePCIAddress *guestAddr); - -/* XXX do we really want to hardcode 'nicstr' as the - * sendable item here - */ -int qemuMonitorAddPCINetwork(qemuMonitorPtr mon, - const char *nicstr, - virDevicePCIAddress *guestAddr); - -int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon, - virDevicePCIAddress *guestAddr); - - int qemuMonitorSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 5092548..e0dbda1 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -3032,46 +3032,6 @@ int qemuMonitorJSONGraphicsRelocate(qemuMonitorPtr mon, } -int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - virDevicePCIAddress *hostAddr ATTRIBUTE_UNUSED, - virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("pci_add not supported in JSON mode")); - return -1; -} - - -int qemuMonitorJSONAddPCIDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *path ATTRIBUTE_UNUSED, - const char *bus ATTRIBUTE_UNUSED, - virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("pci_add not supported in JSON mode")); - return -1; -} - - -int qemuMonitorJSONAddPCINetwork(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *nicstr ATTRIBUTE_UNUSED, - virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("pci_add not supported in JSON mode")); - return -1; -} - - -int qemuMonitorJSONRemovePCIDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("pci_del not supported in JSON mode")); - return -1; -} - - int qemuMonitorJSONSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd) @@ -3570,16 +3530,6 @@ qemuMonitorJSONGetChardevInfo(qemuMonitorPtr mon, } -int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *bus ATTRIBUTE_UNUSED, - virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED) -{ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("pci_add not supported in JSON mode")); - return -1; -} - - int qemuMonitorJSONGetAllPCIAddresses(qemuMonitorPtr mon ATTRIBUTE_UNUSED, qemuMonitorPCIAddress **addrs ATTRIBUTE_UNUSED) { diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 707addc..ddf16b2 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -1572,245 +1572,6 @@ int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, } -static int -qemuMonitorTextParsePCIAddReply(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *reply, - virDevicePCIAddress *addr) -{ - char *s, *e; - - /* If the command succeeds qemu prints: - * OK bus 0, slot XXX... - * or - * OK domain 0, bus 0, slot XXX - */ - if (!(s = strstr(reply, "OK "))) - return -1; - - s += 3; - - if (STRPREFIX(s, "domain ")) { - s += strlen("domain "); - - if (virStrToLong_ui(s, &e, 10, &addr->domain) == -1) { - VIR_WARN("Unable to parse domain number '%s'", s); - return -1; - } - - if (!STRPREFIX(e, ", ")) { - VIR_WARN("Expected ', ' parsing pci_add reply '%s'", s); - return -1; - } - s = e + 2; - } - - if (!STRPREFIX(s, "bus ")) { - VIR_WARN("Expected 'bus ' parsing pci_add reply '%s'", s); - return -1; - } - s += strlen("bus "); - - if (virStrToLong_ui(s, &e, 10, &addr->bus) == -1) { - VIR_WARN("Unable to parse bus number '%s'", s); - return -1; - } - - if (!STRPREFIX(e, ", ")) { - VIR_WARN("Expected ', ' parsing pci_add reply '%s'", s); - return -1; - } - s = e + 2; - - if (!STRPREFIX(s, "slot ")) { - VIR_WARN("Expected 'slot ' parsing pci_add reply '%s'", s); - return -1; - } - s += strlen("slot "); - - if (virStrToLong_ui(s, &e, 10, &addr->slot) == -1) { - VIR_WARN("Unable to parse slot number '%s'", s); - return -1; - } - - return 0; -} - - -int qemuMonitorTextAddPCIHostDevice(qemuMonitorPtr mon, - virDevicePCIAddress *hostAddr, - virDevicePCIAddress *guestAddr) -{ - char *cmd; - char *reply = NULL; - int ret = -1; - - memset(guestAddr, 0, sizeof(*guestAddr)); - - if (hostAddr->domain) { - /* if domain > 0, the caller has already verified that this qemu - * supports specifying domain in pci_add command - */ - if (virAsprintf(&cmd, - "pci_add pci_addr=auto host host=%.4x:%.2x:%.2x.%.1x", - hostAddr->domain, hostAddr->bus, - hostAddr->slot, hostAddr->function) < 0) - goto cleanup; - } else { - if (virAsprintf(&cmd, "pci_add pci_addr=auto host host=%.2x:%.2x.%.1x", - hostAddr->bus, hostAddr->slot, hostAddr->function) < 0) - goto cleanup; - } - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "invalid type: host")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("PCI device assignment is not supported by this version of qemu")); - goto cleanup; - } - - if (qemuMonitorTextParsePCIAddReply(mon, reply, guestAddr) < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("parsing pci_add reply failed: %s"), reply); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextAddPCIDisk(qemuMonitorPtr mon, - const char *path, - const char *bus, - virDevicePCIAddress *guestAddr) -{ - char *cmd = NULL; - char *reply = NULL; - char *safe_path = NULL; - bool tryOldSyntax = false; - int ret = -1; - - safe_path = qemuMonitorEscapeArg(path); - if (!safe_path) - return -1; - - try_command: - if (virAsprintf(&cmd, "pci_add %s storage file=%s,if=%s", - (tryOldSyntax ? "0": "pci_addr=auto"), safe_path, bus) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (qemuMonitorTextParsePCIAddReply(mon, reply, guestAddr) < 0) { - if (!tryOldSyntax && strstr(reply, "invalid char in expression")) { - VIR_FREE(reply); - VIR_FREE(cmd); - tryOldSyntax = true; - goto try_command; - } - - virReportError(VIR_ERR_OPERATION_FAILED, - _("adding %s disk failed %s: %s"), bus, path, reply); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(safe_path); - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextAddPCINetwork(qemuMonitorPtr mon, - const char *nicstr, - virDevicePCIAddress *guestAddr) -{ - char *cmd; - char *reply = NULL; - int ret = -1; - - if (virAsprintf(&cmd, "pci_add pci_addr=auto nic %s", nicstr) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (qemuMonitorTextParsePCIAddReply(mon, reply, guestAddr) < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("parsing pci_add reply failed: %s"), reply); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - - -int qemuMonitorTextRemovePCIDevice(qemuMonitorPtr mon, - virDevicePCIAddress *guestAddr) -{ - char *cmd = NULL; - char *reply = NULL; - bool tryOldSyntax = false; - int ret = -1; - - try_command: - if (tryOldSyntax) { - if (virAsprintf(&cmd, "pci_del 0 %.2x", guestAddr->slot) < 0) - goto cleanup; - } else { - /* XXX function ? */ - if (virAsprintf(&cmd, "pci_del pci_addr=%.4x:%.2x:%.2x", - guestAddr->domain, guestAddr->bus, guestAddr->slot) < 0) - goto cleanup; - } - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* Syntax changed when KVM merged PCI hotplug upstream to QEMU, - * so check for an error message from old KVM indicating the - * need to try the old syntax */ - if (!tryOldSyntax && - strstr(reply, "extraneous characters")) { - tryOldSyntax = true; - VIR_FREE(reply); - VIR_FREE(cmd); - goto try_command; - } - /* If the command fails due to a wrong slot qemu prints: invalid slot, - * nothing is printed on success */ - if (strstr(reply, "invalid slot") || - strstr(reply, "Invalid pci address")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("failed to detach PCI device, invalid address %.4x:%.2x:%.2x: %s"), - guestAddr->domain, guestAddr->bus, guestAddr->slot, reply); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd) @@ -2072,45 +1833,6 @@ int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon, } -int qemuMonitorTextAttachPCIDiskController(qemuMonitorPtr mon, - const char *bus, - virDevicePCIAddress *guestAddr) -{ - char *cmd = NULL; - char *reply = NULL; - bool tryOldSyntax = false; - int ret = -1; - - try_command: - if (virAsprintf(&cmd, "pci_add %s storage if=%s", - (tryOldSyntax ? "0": "pci_addr=auto"), bus) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (qemuMonitorTextParsePCIAddReply(mon, reply, guestAddr) < 0) { - if (!tryOldSyntax && strstr(reply, "invalid char in expression")) { - VIR_FREE(reply); - VIR_FREE(cmd); - tryOldSyntax = true; - goto try_command; - } - - virReportError(VIR_ERR_OPERATION_FAILED, - _("adding %s disk controller failed: %s"), bus, reply); - goto cleanup; - } - - ret = 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - /* * The format we're after looks like this * diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index d62e668..d30f1a4 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -119,22 +119,6 @@ int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, int tlsPort, const char *tlsSubject); -int qemuMonitorTextAddPCIHostDevice(qemuMonitorPtr mon, - virDevicePCIAddress *hostAddr, - virDevicePCIAddress *guestAddr); - -int qemuMonitorTextAddPCIDisk(qemuMonitorPtr mon, - const char *path, - const char *bus, - virDevicePCIAddress *guestAddr); - -int qemuMonitorTextAddPCINetwork(qemuMonitorPtr mon, - const char *nicstr, - virDevicePCIAddress *guestAddr); - -int qemuMonitorTextRemovePCIDevice(qemuMonitorPtr mon, - virDevicePCIAddress *guestAddr); - int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd); @@ -158,10 +142,6 @@ int qemuMonitorTextRemoveNetdev(qemuMonitorPtr mon, int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon, virHashTablePtr info); -int qemuMonitorTextAttachPCIDiskController(qemuMonitorPtr mon, - const char *bus, - virDevicePCIAddress *guestAddr); - int qemuMonitorTextGetAllPCIAddresses(qemuMonitorPtr mon, qemuMonitorPCIAddress **addrs); -- 2.8.1

On Tue, Apr 26, 2016 at 03:37:33PM +0200, Peter Krempa wrote:
Noticed while doing a depth-first search for a different refactor.
ACK series We should drop QEMU_CAPS_DEVICE from all of libvirt code since this capability will be always set. Maybe also add a syntax-check to forbit to use QEMU_CAPS_DEVICE outside of src/qemu/qemu_capabilities.h. Pavel

On 04/26/2016 10:21 AM, Pavel Hrdina wrote:
On Tue, Apr 26, 2016 at 03:37:33PM +0200, Peter Krempa wrote:
Noticed while doing a depth-first search for a different refactor.
ACK series
We should drop QEMU_CAPS_DEVICE from all of libvirt code since this capability will be always set. Maybe also add a syntax-check to forbit to use QEMU_CAPS_DEVICE outside of src/qemu/qemu_capabilities.h.
The way we have been doing that is to change the name to X_QEMU_CAPS_DEVICE once all uses are removed, so it will stick out in newly added code. And if anyone is motivated, I documented a bunch of other old flags that can be dropped: http://wiki.libvirt.org/page/BiteSizedTasks#Remove_unused_QEMU_feature_flags - Cole
participants (3)
-
Cole Robinson
-
Pavel Hrdina
-
Peter Krempa