From nobody Mon Feb 9 12:12:08 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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.133.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=1633622697; cv=none; d=zohomail.com; s=zohoarc; b=mJlVdebIsoeL/+nz6oBraJJ9M32aqTfdX+R6eP+C0XXk122T/pYc9C/Fb2pLKCFSz8ESPpARdeAv8mDzLEMAcKUXh3Ajf1K50EHTf8aC0Mxk7te9OdEcNYMwFmmToU0e9syulRvfruc0bX59SMHh2gQkqnn/Hdkv2RkZ/u0oifM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633622697; 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=J+QCInvjGIXHzQydeAxAc8sxVGus96lD7I2L0blGXmg=; b=codnSAFmBUakxFItyiI4ZCWy6Gl1UJx/twMM7hbwp0SgZUKrF0QFAy8pFfa5GHJCSouXN/15a6djqDevKJx42UsLqBlzAxEDaG7G9bfwHdSQjh766CanDLHGps8pl7s/UFqTvhrvT9CrircWHOqualgGblpTUFK9ryjra84q+U4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.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.133.124]) by mx.zohomail.com with SMTPS id 1633622697343981.0233180393642; Thu, 7 Oct 2021 09:04:57 -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-6-ljqJB7skMReQ2Tf7z-Ycjg-1; Thu, 07 Oct 2021 12:04:54 -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 80E95C48E98; Thu, 7 Oct 2021 15:46:07 +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 A394718BC70; Thu, 7 Oct 2021 15:45:12 +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 670D44EA2A; Thu, 7 Oct 2021 15:45:12 +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 197FJIU1023904 for ; Thu, 7 Oct 2021 11:19:19 -0400 Received: by smtp.corp.redhat.com (Postfix) id EFBD25D6D5; Thu, 7 Oct 2021 15:19:18 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.5]) by smtp.corp.redhat.com (Postfix) with ESMTP id 549435D6BA for ; Thu, 7 Oct 2021 15:19:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633622696; 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=J+QCInvjGIXHzQydeAxAc8sxVGus96lD7I2L0blGXmg=; b=YqFraelvVXyEr1yzqS4lVXdBs5BYNzpKF4PHTTsutbimx5/i3+Om5Zm53JjYiypozGbSwK Ra+JzEjXBAzVzduPDdYphR4tQO9FUWhwG48XzAKvKPYRIyD34lGb6GbUh1uS5bici2ag0r /QGQaJ8NVlkO+vHKpK1k45nSnQn2xZE= X-MC-Unique: ljqJB7skMReQ2Tf7z-Ycjg-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 040/103] qemuBuildVirtioDevGetConfigDev: Provide more information Date: Thu, 7 Oct 2021 17:17:28 +0200 Message-Id: <9349327ed12aff6eeee994e94a4d50be8a636272.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: 1633622698740100003 Content-Type: text/plain; charset="utf-8" Since we already have code for per-device behaviour we can also populate the device name and extract virtioOptions in the switch statement so that callers don't have to pass it in. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 107 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 99 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b1ee5c6cb8..8753ae5891 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -709,67 +709,147 @@ qemuDeviceVideoGetModel(virQEMUCaps *qemuCaps, static void qemuBuildVirtioDevGetConfigDev(virDomainDeviceDef *device, + virQEMUCaps *qemuCaps, + const char **baseName, + virDomainVirtioOptions **virtioOptions, bool *has_tmodel, - bool *has_ntmodel) + bool *has_ntmodel, + bool *useBusSuffix) { switch ((virDomainDeviceType) device->type) { case VIR_DOMAIN_DEVICE_DISK: + if (virStorageSourceGetActualType(device->data.disk->src) =3D= =3D VIR_STORAGE_TYPE_VHOST_USER) + *baseName =3D "vhost-user-blk"; + else + *baseName =3D "virtio-blk"; + + *virtioOptions =3D device->data.disk->virtio; *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: + *baseName =3D "virtio-net"; + *virtioOptions =3D device->data.net->virtio; *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) { + *baseName =3D "vhost-scsi"; *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: + *baseName =3D "virtio-rng"; + *virtioOptions =3D device->data.rng->virtio; *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: + switch ((virDomainFSDriverType) device->data.fs->fsdriver) { + case VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT: + case VIR_DOMAIN_FS_DRIVER_TYPE_PATH: + case VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE: + *baseName =3D "virtio-9p"; + break; + + case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS: + *baseName =3D "vhost-user-fs"; + break; + + case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP: + case VIR_DOMAIN_FS_DRIVER_TYPE_NBD: + case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP: + case VIR_DOMAIN_FS_DRIVER_TYPE_LAST: + break; + + } + *virtioOptions =3D device->data.fs->virtio; *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: + *baseName =3D "virtio-balloon"; + *virtioOptions =3D device->data.memballoon->virtio; *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: + *baseName =3D "vhost-vsock"; + *virtioOptions =3D device->data.vsock->virtio; *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) { + *virtioOptions =3D device->data.input->virtio; + + switch ((virDomainInputType) device->data.input->type) { + case VIR_DOMAIN_INPUT_TYPE_MOUSE: + *baseName =3D "virtio-mouse"; + break; + + case VIR_DOMAIN_INPUT_TYPE_TABLET: + *baseName =3D "virtio-tablet"; + break; + + case VIR_DOMAIN_INPUT_TYPE_KBD: + *baseName =3D "virtio-keyboard"; + break; + + case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: + *baseName =3D "virtio-input-host"; *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_INPUT_TYPE_EVDEV: + case VIR_DOMAIN_INPUT_TYPE_LAST: + default: + break; } break; case VIR_DOMAIN_DEVICE_CONTROLLER: if (device->data.controller->type =3D=3D VIR_DOMAIN_CONTROLLER= _TYPE_VIRTIO_SERIAL) { + *baseName =3D "virtio-serial"; + *virtioOptions =3D device->data.controller->virtio; *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) { + *baseName =3D "virtio-scsi"; + *virtioOptions =3D device->data.controller->virtio; *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; + case VIR_DOMAIN_DEVICE_VIDEO: { + bool virtio; + bool virtioBusSuffix; + + if (!(*baseName =3D qemuDeviceVideoGetModel(qemuCaps, + device->data.video, + &virtio, + &virtioBusSuffix))) + return; + + if (!virtioBusSuffix) + *useBusSuffix =3D false; + + *virtioOptions =3D device->data.video->virtio; + } + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_SOUND: - case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -793,7 +873,6 @@ qemuBuildVirtioDevGetConfigDev(virDomainDeviceDef *devi= ce, static int qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, - const char *baseName, virQEMUCaps *qemuCaps, char **devtype, virTristateSwitch *disableLegacy, @@ -801,14 +880,25 @@ qemuBuildVirtioDevGetConfig(virDomainDeviceDef *devic= e, { virDomainDeviceInfo *info =3D virDomainDeviceGetInfo(device); g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + const char *baseName =3D NULL; const char *implName =3D NULL; bool has_tmodel =3D false; bool has_ntmodel =3D false; + bool useBusSuffix =3D true; + virDomainVirtioOptions *virtioOptions; *disableLegacy =3D VIR_TRISTATE_SWITCH_ABSENT; *disableModern =3D VIR_TRISTATE_SWITCH_ABSENT; - qemuBuildVirtioDevGetConfigDev(device, &has_tmodel, &has_ntmodel); + qemuBuildVirtioDevGetConfigDev(device, qemuCaps, &baseName, + &virtioOptions, &has_tmodel, + &has_ntmodel, &useBusSuffix); + + if (!baseName) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unknown base name while formatting virtio device= ")); + return -1; + } virBufferAdd(&buf, baseName, -1); @@ -845,7 +935,8 @@ qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, return -1; } - virBufferAsprintf(&buf, "-%s", implName); + if (useBusSuffix) + virBufferAsprintf(&buf, "-%s", implName); if (has_tmodel || has_ntmodel) { if (info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { @@ -906,7 +997,7 @@ qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device, */ static int qemuBuildVirtioDevStr(virBuffer *buf, - const char *baseName, + const char *baseName G_GNUC_UNUSED, virQEMUCaps *qemuCaps, virDomainDeviceType devtype, void *devdata) @@ -918,7 +1009,7 @@ qemuBuildVirtioDevStr(virBuffer *buf, virDomainDeviceSetData(&device, devdata); - if (qemuBuildVirtioDevGetConfig(&device, baseName, qemuCaps, &model, + if (qemuBuildVirtioDevGetConfig(&device, qemuCaps, &model, &disableLegacy, &disableModern) < 0) return -1; --=20 2.31.1