From nobody Mon Feb 9 13:37:28 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1633620819; cv=none; d=zohomail.com; s=zohoarc; b=WL3UxkYTq64FPEvFO+b82HzHUKDeZjDWE3AWBtIh67njVOPJqC9lMsKz7xGktsZX4OYILyPLGnLc65I+S9ggOQ6riExjltFNt2hqu8U/EsGWGQXu8IcHuyl8j6TYPlU2bOAqgx40eD6Trn3CpMgGCpzZkgy6wmWNDBdTeNKZD08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633620819; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Cg+fsdPXC5aLCm2YYjS+D00eghqy+P3MBQK5e7jumXU=; b=UUz/nDK19mmEuFhbgfiS00pNfM0Z/k4Lu3HFKRFHUWxo8E/kgGmZlCJ/Qcihw8JnwFiIHoPmcg9J25Jivl+9dRy9gZea8ZkTapfxx9nNo/wPOCWqQ4lrlU+WNEHwlVAeowgyfk19/qi+VECaV1XGnvg8zIQMJ6cnKlDfqYpECfA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1633620819775933.1459816106097; Thu, 7 Oct 2021 08:33:39 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-13-e1126iq3ORuiSMTtMU4xKw-1; Thu, 07 Oct 2021 11:33:37 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CE71A1828FE; Thu, 7 Oct 2021 15:26:58 +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 A6B7A5DDBD; Thu, 7 Oct 2021 15:26:58 +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 6A8DB4EA30; Thu, 7 Oct 2021 15:26:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 197FJEGW023871 for ; Thu, 7 Oct 2021 11:19:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id BE86B5D6D5; Thu, 7 Oct 2021 15:19:14 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.5]) by smtp.corp.redhat.com (Postfix) with ESMTP id 26FA25D6BA for ; Thu, 7 Oct 2021 15:19:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633620818; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Cg+fsdPXC5aLCm2YYjS+D00eghqy+P3MBQK5e7jumXU=; b=Uf81AfOcNII2zmegTsfSowNnb6qTHFbABbGVhkkg0ReE71/33e9LU5+tnySNt107+ya9h0 VDIZx1VasZQ3faS75whWPMmKJQ/vrQRF6T/mRbL1ieBDhR8z8DgtosXtm+EHMomMnnKVsv 9pmnf2tIP74RHubewDV3pCor/9UT6Gg= X-MC-Unique: e1126iq3ORuiSMTtMU4xKw-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 036/103] qemuBuildVirtioDevGetConfig: Split out per device type code Date: Thu, 7 Oct 2021 17:17:24 +0200 Message-Id: <2476b3a85109f0ffe63eb7a639c6e99f5d1e2b02.1633619630.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com 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: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1633620821536100001 Content-Type: text/plain; charset="utf-8" Split out the function a bit more to separate the per-device code. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 151 +++++++++++++++++++++------------------- 1 file changed, 80 insertions(+), 71 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3bf514c817..f185e3a53c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -583,110 +583,63 @@ qemuBuildDeviceAddressProps(virJSONValue *props, } -static int -qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, - const char *baseName, - virQEMUCaps *qemuCaps, - char **devtype, - virTristateSwitch *disableLegacy, - virTristateSwitch *disableModern) +static void +qemuBuildVirtioDevGetConfigDev(virDomainDeviceDef *device, + bool *has_tmodel, + bool *has_ntmodel) { - virDomainDeviceInfo *info =3D virDomainDeviceGetInfo(device); - g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; - const char *implName =3D NULL; - bool has_tmodel =3D false; - bool has_ntmodel =3D false; - - *disableLegacy =3D VIR_TRISTATE_SWITCH_ABSENT; - *disableModern =3D VIR_TRISTATE_SWITCH_ABSENT; - - switch ((virDomainDeviceAddressType) info->type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: - implName =3D "pci"; - break; - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: - implName =3D "device"; - break; - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: - implName =3D "ccw"; - break; - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM: - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unexpected address type for '%s'"), baseName); - return -1; - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED: - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: - default: - virReportEnumRangeError(virDomainDeviceAddressType, info->type); - return -1; - } - - virBufferAsprintf(&buf, "%s-%s", baseName, implName); - switch ((virDomainDeviceType) device->type) { case VIR_DOMAIN_DEVICE_DISK: - has_tmodel =3D device->data.disk->model =3D=3D VIR_DOMAIN_DISK= _MODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.disk->model =3D=3D VIR_DOMAIN_DIS= K_MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.disk->model =3D=3D VIR_DOMAIN_DIS= K_MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.disk->model =3D=3D VIR_DOMAIN_DI= SK_MODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_NET: - has_tmodel =3D device->data.net->model =3D=3D VIR_DOMAIN_NET_M= ODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.net->model =3D=3D VIR_DOMAIN_NET_= MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.net->model =3D=3D VIR_DOMAIN_NET_= MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.net->model =3D=3D VIR_DOMAIN_NET= _MODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_HOSTDEV: if (device->data.hostdev->source.subsys.type =3D=3D VIR_DOMAIN= _HOSTDEV_SUBSYS_TYPE_SCSI_HOST) { - has_tmodel =3D device->data.hostdev->source.subsys.u.scsi_= host.model =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_TR= ANSITIONAL; - has_ntmodel =3D device->data.hostdev->source.subsys.u.scsi= _host.model =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_N= ON_TRANSITIONAL; + *has_tmodel =3D device->data.hostdev->source.subsys.u.scsi= _host.model =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_T= RANSITIONAL; + *has_ntmodel =3D device->data.hostdev->source.subsys.u.scs= i_host.model =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_= NON_TRANSITIONAL; } break; case VIR_DOMAIN_DEVICE_RNG: - has_tmodel =3D device->data.rng->model =3D=3D VIR_DOMAIN_RNG_M= ODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.rng->model =3D=3D VIR_DOMAIN_RNG_= MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.rng->model =3D=3D VIR_DOMAIN_RNG_= MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.rng->model =3D=3D VIR_DOMAIN_RNG= _MODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_FS: - has_tmodel =3D device->data.fs->model =3D=3D VIR_DOMAIN_FS_MOD= EL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.fs->model =3D=3D VIR_DOMAIN_FS_MO= DEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.fs->model =3D=3D VIR_DOMAIN_FS_MO= DEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.fs->model =3D=3D VIR_DOMAIN_FS_M= ODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_MEMBALLOON: - has_tmodel =3D device->data.memballoon->model =3D=3D VIR_DOMAI= N_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.memballoon->model =3D=3D VIR_DOMA= IN_MEMBALLOON_MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.memballoon->model =3D=3D VIR_DOMA= IN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.memballoon->model =3D=3D VIR_DOM= AIN_MEMBALLOON_MODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_VSOCK: - has_tmodel =3D device->data.vsock->model =3D=3D VIR_DOMAIN_VSO= CK_MODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.vsock->model =3D=3D VIR_DOMAIN_VS= OCK_MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.vsock->model =3D=3D VIR_DOMAIN_VS= OCK_MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.vsock->model =3D=3D VIR_DOMAIN_V= SOCK_MODEL_VIRTIO_NON_TRANSITIONAL; break; case VIR_DOMAIN_DEVICE_INPUT: if (device->data.input->type =3D=3D VIR_DOMAIN_INPUT_TYPE_PASS= THROUGH) { - has_tmodel =3D device->data.input->model =3D=3D VIR_DOMAIN= _INPUT_MODEL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.input->model =3D=3D VIR_DOMAI= N_INPUT_MODEL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.input->model =3D=3D VIR_DOMAI= N_INPUT_MODEL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.input->model =3D=3D VIR_DOMA= IN_INPUT_MODEL_VIRTIO_NON_TRANSITIONAL; } break; case VIR_DOMAIN_DEVICE_CONTROLLER: if (device->data.controller->type =3D=3D VIR_DOMAIN_CONTROLLER= _TYPE_VIRTIO_SERIAL) { - has_tmodel =3D device->data.controller->model =3D=3D VIR_D= OMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.controller->model =3D=3D VIR_= DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.controller->model =3D=3D VIR_= DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.controller->model =3D=3D VIR= _DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_NON_TRANSITIONAL; } else if (device->data.controller->type =3D=3D VIR_DOMAIN_CON= TROLLER_TYPE_SCSI) { - has_tmodel =3D device->data.controller->model =3D=3D VIR_D= OMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL; - has_ntmodel =3D device->data.controller->model =3D=3D VIR_= DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL; + *has_tmodel =3D device->data.controller->model =3D=3D VIR_= DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL; + *has_ntmodel =3D device->data.controller->model =3D=3D VIR= _DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL; } break; @@ -711,6 +664,62 @@ qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, default: break; } +} + + +static int +qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, + const char *baseName, + virQEMUCaps *qemuCaps, + char **devtype, + virTristateSwitch *disableLegacy, + virTristateSwitch *disableModern) +{ + virDomainDeviceInfo *info =3D virDomainDeviceGetInfo(device); + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + const char *implName =3D NULL; + bool has_tmodel =3D false; + bool has_ntmodel =3D false; + + *disableLegacy =3D VIR_TRISTATE_SWITCH_ABSENT; + *disableModern =3D VIR_TRISTATE_SWITCH_ABSENT; + + switch ((virDomainDeviceAddressType) info->type) { + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: + implName =3D "pci"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: + implName =3D "device"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: + implName =3D "ccw"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected address type for '%s'"), baseName); + return -1; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: + default: + virReportEnumRangeError(virDomainDeviceAddressType, info->type); + return -1; + } + + virBufferAsprintf(&buf, "%s-%s", baseName, implName); + + qemuBuildVirtioDevGetConfigDev(device, &has_tmodel, &has_ntmodel); if (has_tmodel || has_ntmodel) { if (info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { --=20 2.31.1