From nobody Sat Dec 21 14:28:12 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1706128596392765.2643436187576; Wed, 24 Jan 2024 12:36:36 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 497E81A2B; Wed, 24 Jan 2024 15:36:35 -0500 (EST) Received: from lists.libvirt.org.85.43.8.in-addr.arpa (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 24A041A32; Wed, 24 Jan 2024 14:42:32 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 45974190E; Wed, 24 Jan 2024 14:39:06 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A7AB2192D for ; Wed, 24 Jan 2024 14:38:15 -0500 (EST) Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-251-2COoSAO_OlCvNC-saFOepg-1; Wed, 24 Jan 2024 14:38:14 -0500 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C280C29AA394 for ; Wed, 24 Jan 2024 19:38:13 +0000 (UTC) Received: from harajuku.usersys.redhat.com (unknown [10.45.226.130]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4FCA8492BC6 for ; Wed, 24 Jan 2024 19:38:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: 2COoSAO_OlCvNC-saFOepg-1 From: Andrea Bolognani To: devel@lists.libvirt.org Subject: [PATCH 23/33] qemu: Enhance qemuDomainForbidLegacyUSBController() Date: Wed, 24 Jan 2024 20:37:43 +0100 Message-ID: <20240124193753.1265454-24-abologna@redhat.com> In-Reply-To: <20240124193753.1265454-1-abologna@redhat.com> References: <20240124193753.1265454-1-abologna@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: ZF5QULHKBCYNKGMSM4O3PO6HCNIZR6OB X-Message-ID-Hash: ZF5QULHKBCYNKGMSM4O3PO6HCNIZR6OB X-MailFrom: abologna@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1706128597807100001 Currently, we have special handling for USB controllers of s390x guests hardcoded into the command line generator. This is not great from a layering point of view and, given the complex interactions between the various parts, just makes things very confusing. In order to make things easier to reason about and centralize decision making, increase the number of possible return values. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_command.c | 5 ++--- src/qemu/qemu_domain.c | 28 +++++++++++++++++++++++++--- src/qemu/qemu_domain.h | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ec4982bbf6..deb8867938 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2949,8 +2949,7 @@ qemuBuildLegacyUSBControllerCommandLine(virCommand *c= md, } =20 if (nusb =3D=3D 0 && - !qemuDomainForbidLegacyUSBController(def) && - !ARCH_IS_S390(def->os.arch)) { + qemuDomainForbidLegacyUSBController(def) =3D=3D 0) { /* We haven't added any USB controller yet, but we haven't been as= ked * not to add one either. Add a legacy USB controller, unless we're * creating a kind of guest we want to keep legacy-free */ @@ -3049,7 +3048,7 @@ qemuBuildControllersByTypeCommandLine(virCommand *cmd, =20 if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB && cont->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && - !qemuDomainForbidLegacyUSBController(def)) { + qemuDomainForbidLegacyUSBController(def) <=3D 0) { =20 /* An appropriate default USB controller model should already * have been selected in qemuDomainDeviceDefPostParse(); if diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 2b7eae295b..5b93529655 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4258,15 +4258,37 @@ qemuDomainDefaultUSBControllerModel(const virDomain= Def *def, } =20 =20 -bool +/** + * qemuDomainForbidLegacyUSBController: + * @def: domain definition + * + * Tells the command line generator whether it's acceptable to fall + * back to the legacy '-usb' option when a specific model hasn't been + * provided or automatically selected for the USB controller. + * + * Returns: 0 if '-usb' can be used, + * >0 if '-usb' should be avoided, and + * <0 if '-usb' should't be used but the fact that we have + * reached the point where that was the only remaining + * option shouldn't be considered an overall failure. + */ +int qemuDomainForbidLegacyUSBController(const virDomainDef *def) { + /* Modern guests should never use the legacy controller */ if (qemuDomainIsQ35(def) || qemuDomainIsARMVirt(def) || qemuDomainIsRISCVVirt(def)) - return true; + return 1; =20 - return false; + /* In the case of s390x, we also never want to use the legacy + * controller but it's okay if that means that we end up creating + * no USB controller at all */ + if (ARCH_IS_S390(def->os.arch)) + return -1; + + /* In all other cases, using the legacy controller is okay */ + return 0; } =20 =20 diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 4e61d741f3..ff95c392bd 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -839,7 +839,7 @@ bool qemuDomainSupportsPCIMultibus(const virDomainDef *= def); int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *con= t, virQEMUCaps *qemuCaps); -bool qemuDomainForbidLegacyUSBController(const virDomainDef *def); +int qemuDomainForbidLegacyUSBController(const virDomainDef *def); =20 void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); =20 --=20 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org