1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemu: clean up qemuBuildCommandline loop that builds controller args

Reorganize the loop that builds controller args to remove unnecessary
duplicated code and superfluous else clauses. No functional change.
This commit is contained in:
Laine Stump 2015-05-14 11:10:22 -04:00
parent 548ba43028
commit b8f345b486

View File

@ -4548,6 +4548,12 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef,
break; break;
case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("SATA is not supported with this "
"QEMU binary"));
goto error;
}
virBufferAsprintf(&buf, "ahci,id=%s", def->info.alias); virBufferAsprintf(&buf, "ahci,id=%s", def->info.alias);
break; break;
@ -8619,12 +8625,21 @@ qemuBuildCommandLine(virConnectPtr conn,
bool usblegacy = false; bool usblegacy = false;
bool mlock = false; bool mlock = false;
int contOrder[] = { int contOrder[] = {
/* We don't add an explicit IDE or FD controller because the /*
* List of controller types that we add commandline args for,
* *in the order we want to add them*.
*
* We don't add an explicit IDE or FD controller because the
* provided PIIX4 device already includes one. It isn't possible to * provided PIIX4 device already includes one. It isn't possible to
* remove the PIIX4. * remove the PIIX4.
* *
* We don't add PCI root controller either, because it's implicit, * We don't add PCI/PCIe root controller either, because it's
* but we do add PCI bridges. */ * implicit, but we do add PCI bridges and other PCI
* controllers, so we leave that in to check each
* one. Likewise, we don't do anything for the primary SATA
* controller on q35, but we do add those beyond this one
* exception.
*/
VIR_DOMAIN_CONTROLLER_TYPE_PCI, VIR_DOMAIN_CONTROLLER_TYPE_PCI,
VIR_DOMAIN_CONTROLLER_TYPE_USB, VIR_DOMAIN_CONTROLLER_TYPE_USB,
VIR_DOMAIN_CONTROLLER_TYPE_SCSI, VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
@ -9401,46 +9416,30 @@ qemuBuildCommandLine(virConnectPtr conn,
for (j = 0; j < ARRAY_CARDINALITY(contOrder); j++) { for (j = 0; j < ARRAY_CARDINALITY(contOrder); j++) {
for (i = 0; i < def->ncontrollers; i++) { for (i = 0; i < def->ncontrollers; i++) {
virDomainControllerDefPtr cont = def->controllers[i]; virDomainControllerDefPtr cont = def->controllers[i];
char *devstr;
if (cont->type != contOrder[j]) if (cont->type != contOrder[j])
continue; continue;
/* Also, skip USB controllers with type none.*/ /* skip USB controllers with type none.*/
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) { cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) {
usbcontroller = -1; /* mark we don't want a controller */ usbcontroller = -1; /* mark we don't want a controller */
continue; continue;
} }
/* Skip pci-root/pcie-root */ /* skip pci-root/pcie-root */
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI && if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
(cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT || (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT ||
cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT)) { cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT))
continue; continue;
}
/* Only recent QEMU implements a SATA (AHCI) controller */
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("SATA is not supported with this "
"QEMU binary"));
goto error;
} else if (cont->idx == 0 && qemuDomainMachineIsQ35(def)) {
/* first SATA controller on Q35 machines is implicit */ /* first SATA controller on Q35 machines is implicit */
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA &&
cont->idx == 0 && qemuDomainMachineIsQ35(def))
continue; continue;
} else {
char *devstr;
virCommandAddArg(cmd, "-device"); if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
if (!(devstr = qemuBuildControllerDevStr(def, cont,
qemuCaps, NULL)))
goto error;
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
}
} else if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
cont->model == -1 && cont->model == -1 &&
!qemuDomainMachineIsQ35(def) && !qemuDomainMachineIsQ35(def) &&
(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI) || (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI) ||
@ -9453,20 +9452,18 @@ qemuBuildCommandLine(virConnectPtr conn,
goto error; goto error;
} }
usblegacy = true; usblegacy = true;
} else { continue;
virCommandAddArg(cmd, "-device"); }
char *devstr; virCommandAddArg(cmd, "-device");
if (!(devstr = qemuBuildControllerDevStr(def, cont, qemuCaps, if (!(devstr = qemuBuildControllerDevStr(def, cont, qemuCaps,
&usbcontroller))) &usbcontroller)))
goto error; goto error;
virCommandAddArg(cmd, devstr); virCommandAddArg(cmd, devstr);
VIR_FREE(devstr); VIR_FREE(devstr);
} }
} }
} }
}
if (usbcontroller == 0 && if (usbcontroller == 0 &&
!qemuDomainMachineIsQ35(def) && !qemuDomainMachineIsQ35(def) &&