From nobody Mon Mar 30 03:26:04 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.37 as permitted sender) client-ip=209.132.183.37; envelope-from=libvir-list-bounces@redhat.com; helo=mx5-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.37 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by mx.zohomail.com with SMTPS id 148844481346288.73920205654872; Thu, 2 Mar 2017 00:53:33 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v228oZwb000919; Thu, 2 Mar 2017 03:50:35 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v228mkRC018824 for ; Thu, 2 Mar 2017 03:48:46 -0500 Received: from antique-work.brq.redhat.com (dhcp129-175.brq.redhat.com [10.34.129.175]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v228mhLM008375 for ; Thu, 2 Mar 2017 03:48:45 -0500 From: Pavel Hrdina To: libvir-list@redhat.com Date: Thu, 2 Mar 2017 09:48:41 +0100 Message-Id: <3bb55e74a1315f719c9d055a1941f409722847fa.1488444435.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/3] qemu_domain: cleanup the controller post parse code X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina --- src/qemu/qemu_domain.c | 114 ++++++++++++++++++++++++++-------------------= ---- 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5c5a055354..10e831b779 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3014,41 +3014,60 @@ qemuDomainControllerDefPostParse(virDomainControlle= rDefPtr cont, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - /* set the default USB model to none for s390 unless an address is fou= nd */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && - cont->model =3D=3D -1 && - cont->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && - ARCH_IS_S390(def->os.arch)) - cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; + switch ((virDomainControllerType)cont->type) { + case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: + /* set the default SCSI controller model for S390 arches */ + if (cont->model =3D=3D -1 && + ARCH_IS_S390(def->os.arch)) { + cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + } + break; =20 - /* forbid usb model 'qusb1' and 'qusb2' in this kind of hyperviosr */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && - (cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1 || - cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("USB controller model type 'qusb1' or 'qusb2' " - "is not supported in %s"), - virDomainVirtTypeToString(def->virtType)); - return -1; - } + case VIR_DOMAIN_CONTROLLER_TYPE_USB: + if (cont->model =3D=3D -1) { + /* Pick a suitable default model for the USB controller if none + * has been selected by the user. + * + * We rely on device availability instead of setting the model + * unconditionally because, for some machine types, there's a + * chance we will get away with using the legacy USB controller + * when the relevant device is not available. + * + * See qemuBuildControllerDevCommandLine() */ + if (ARCH_IS_S390(def->os.arch) && + cont->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE= ) { + /* set the default USB model to none for s390 unless an + * address is found */ + cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; + } else if (ARCH_IS_PPC64(def->os.arch)) { + /* Default USB controller for ppc64 is pci-ohci */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) + cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OH= CI; + } else { + /* Default USB controller for anything else is piix3-uhci = */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) + cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_= UHCI; + } + } + /* forbid usb model 'qusb1' and 'qusb2' in this kind of hyperviosr= */ + if (cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1 || + cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("USB controller model type 'qusb1' or 'qusb2'= " + "is not supported in %s"), + virDomainVirtTypeToString(def->virtType)); + return -1; + } + if (cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI && + cont->opts.usbopts.ports > QEMU_USB_NEC_XHCI_MAXPORTS) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("nec-xhci controller only supports up to %u p= orts"), + QEMU_USB_NEC_XHCI_MAXPORTS); + return -1; + } + break; =20 - - /* set the default SCSI controller model for S390 arches */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI && - cont->model =3D=3D -1 && - ARCH_IS_S390(def->os.arch)) - cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && - cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI && - cont->opts.usbopts.ports > QEMU_USB_NEC_XHCI_MAXPORTS) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("nec-xhci controller only supports up to %u ports= "), - QEMU_USB_NEC_XHCI_MAXPORTS); - return -1; - } - - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI) { + case VIR_DOMAIN_CONTROLLER_TYPE_PCI: if (cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BU= S && !qemuDomainMachineIsI440FX(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -3083,26 +3102,15 @@ qemuDomainControllerDefPostParse(virDomainControlle= rDefPtr cont, virDomainNumaGetNodeCount(def->numa)); return -1; } - } else if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && - cont->model =3D=3D -1) { - /* Pick a suitable default model for the USB controller if none - * has been selected by the user. - * - * We rely on device availability instead of setting the model - * unconditionally because, for some machine types, there's a - * chance we will get away with using the legacy USB controller - * when the relevant device is not available. - * - * See qemuBuildControllerDevCommandLine() */ - if (ARCH_IS_PPC64(def->os.arch)) { - /* Default USB controller for ppc64 is pci-ohci */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) - cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; - } else { - /* Default USB controller for anything else is piix3-uhci */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) - cont->model =3D VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; - } + break; + + case VIR_DOMAIN_CONTROLLER_TYPE_SATA: + case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: + case VIR_DOMAIN_CONTROLLER_TYPE_CCID: + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: + case VIR_DOMAIN_CONTROLLER_TYPE_LAST: + break; } =20 return 0; --=20 2.12.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list