From nobody Sun Feb 8 16:31:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1512574077355128.06942237594308; Wed, 6 Dec 2017 07:27:57 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id ED25080474; Wed, 6 Dec 2017 15:27:54 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AA73F5C1A3; Wed, 6 Dec 2017 15:27:54 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 261763FCF9; Wed, 6 Dec 2017 15:27:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vB6FRrBn014377 for ; Wed, 6 Dec 2017 10:27:53 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3DC8068D74; Wed, 6 Dec 2017 15:27:53 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-84.phx2.redhat.com [10.3.117.84]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03B155C899 for ; Wed, 6 Dec 2017 15:27:52 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Wed, 6 Dec 2017 10:27:34 -0500 Message-Id: <20171206152747.18447-3-jferlan@redhat.com> In-Reply-To: <20171206152747.18447-1-jferlan@redhat.com> References: <20171206152747.18447-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 02/15] qemu: Introduce qemuDomainDeviceDefSkipController 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-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 06 Dec 2017 15:27:55 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In order to be able to reuse some code for both controller def validation and command line building, create a convenience helper that will skip the same devices for validation that are being skipped for command line building. This is in preference to copying the individual checks in subsequent patches which split out the various command line validation checks into a domain definition validation check. Signed-off-by: John Ferlan --- src/qemu/qemu_command.c | 32 ++++++-------------------------- src/qemu/qemu_domain.c | 43 ++++++++++++++++++++++++++++++++++++++++++- src/qemu/qemu_domain.h | 4 ++++ 3 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6a8da1d58..d7696fb93 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3216,6 +3216,9 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, if (cont->type !=3D contOrder[j]) continue; =20 + if (qemuDomainDeviceDefSkipController(cont, def)) + continue; + /* skip USB controllers with type none.*/ if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) { @@ -3223,30 +3226,6 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, continue; } =20 - /* skip pcie-root */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI && - cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT) { - continue; - } - - /* Skip pci-root, except for pSeries guests (which actually - * support more than one PCI Host Bridge per guest) */ - if (!qemuDomainIsPSeries(def) && - cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI && - cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) { - continue; - } - - /* first SATA controller on Q35 machines is implicit */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_SATA && - cont->idx =3D=3D 0 && qemuDomainIsQ35(def)) - continue; - - /* first IDE controller is implicit on various machines */ - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IDE && - cont->idx =3D=3D 0 && qemuDomainHasBuiltinIDE(def)) - continue; - if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && cont->model =3D=3D -1 && !qemuDomainIsQ35(def) && @@ -3268,11 +3247,12 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Multiple legacy USB controllers are " "not supported")); - goto cleanup; + goto cleanup; } usblegacy =3D true; continue; - } + } + =20 if (qemuBuildControllerDevStr(def, cont, qemuCaps, &devstr, &usbcontroller) < 0) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 19e86797e..e4452c419 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3892,10 +3892,51 @@ qemuDomainDeviceDefValidateDisk(const virDomainDisk= Def *disk) } =20 =20 +/** + * qemuDomainDeviceDefSkipController: + * @controller: Controller to check + * @def: Domain definition + * + * Returns true if this controller can be skipped for command line + * generation or device validation. + */ +bool +qemuDomainDeviceDefSkipController(const virDomainControllerDef *controller, + const virDomainDef *def) +{ + /* skip pcie-root */ + if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI && + controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT) + return true; + + /* Skip pci-root, except for pSeries guests (which actually + * support more than one PCI Host Bridge per guest) */ + if (!qemuDomainIsPSeries(def) && + controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI && + controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) + return true; + + /* first SATA controller on Q35 machines is implicit */ + if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_SATA && + controller->idx =3D=3D 0 && qemuDomainIsQ35(def)) + return true; + + /* first IDE controller is implicit on various machines */ + if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IDE && + controller->idx =3D=3D 0 && qemuDomainHasBuiltinIDE(def)) + return true; + + return false; +} + + static int qemuDomainDeviceDefValidateController(const virDomainControllerDef *contro= ller, - const virDomainDef *def ATTRIBUTE_UN= USED) + const virDomainDef *def) { + if (qemuDomainDeviceDefSkipController(controller, def)) + return 0; + switch ((virDomainControllerType) controller->type) { case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index ba807ca0b..b1292a1f0 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1000,4 +1000,8 @@ qemuDomainPrepareDiskSource(virConnectPtr conn, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg); =20 +bool +qemuDomainDeviceDefSkipController(const virDomainControllerDef *controller, + const virDomainDef *def); + #endif /* __QEMU_DOMAIN_H__ */ --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list