From nobody Wed May 1 21:00:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.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 63.128.21.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=1612365992; cv=none; d=zohomail.com; s=zohoarc; b=Wi8Rmr4ExX2L9cnXKn04xP1dKF8Ueng9UdsMDko9tyiaDCev55YlBSw2bxjlEk3NT6Klw1Ho2BDspWYFj9bdlQBUdcQS9ZdA0XwdcKSFFNohbFZM7g2dv1h70O+dnRZjzPlIdyn3IIZlu9yy0hqwAYB3Zx4QSm/I5bjJa/mqz0I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365992; 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=eKKOfNh4M8W0uRfAIydWS1JoTorDgkobVGby0H6cgs0=; b=aW/x5j0vTMh1SlCr//pu9ciDm+4OqxQsJ96Sd48cW8WLoDK8KXHTHlk8G/PCW0NbFwvQfk3k2sh2pTim0puYIlgVHChMqqr9a70xHdX+N7bgbfFo+/dWmEDNWg26meWLZzDOg7wuLa0jANx+hKxE3avkI8d8fjcsJ7xCmKDjjSI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612365992223891.9710963290513; Wed, 3 Feb 2021 07:26:32 -0800 (PST) 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-102-oOXzoUzbNt-PRPS3bxzqrw-1; Wed, 03 Feb 2021 10:26:28 -0500 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 9971A1936B79; Wed, 3 Feb 2021 15:26:21 +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 75A6A1980D; Wed, 3 Feb 2021 15:26:21 +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 3C73185F2; Wed, 3 Feb 2021 15:26:21 +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 113FQ4xv002765 for ; Wed, 3 Feb 2021 10:26:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id 567EB5B692; Wed, 3 Feb 2021 15:26:04 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id C8C7A5D6A8 for ; Wed, 3 Feb 2021 15:26:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365991; 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=eKKOfNh4M8W0uRfAIydWS1JoTorDgkobVGby0H6cgs0=; b=RGfA7SpOq672QRqWkf3E3pXkDx71cfEFci0EMLhfudtG3pWAqmrDoqkCr4TgptbSPrL7Sr dZqt9T+ZL+E1AVguF2/C0QKTHD6Jf5i+II93cPWs4/Ya3nDAO0rOMj00ANhmFeogVHeGPe bZ0lyNLt/HX2dYk+/C4ktIfsPUbC/FE= X-MC-Unique: oOXzoUzbNt-PRPS3bxzqrw-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 1/6] qemu_alias: introduce qemuDomainGetVhostUserAlias helper Date: Wed, 3 Feb 2021 16:25:54 +0100 Message-Id: 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- Changes in v2: - qemuDomainGetVhostUserAlias renamed to qemuDomainGetVhostUserChrAlias src/qemu/qemu_alias.c | 6 ++++++ src/qemu/qemu_alias.h | 2 ++ src/qemu/qemu_command.c | 8 +++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index b3492d6e85..1c6f04c0ba 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -868,3 +868,9 @@ qemuDomainGetDBusVMStateAlias(void) { return "dbus-vmstate0"; } + +char * +qemuDomainGetVhostUserChrAlias(const char *devalias) +{ + return g_strdup_printf("chr-vu-%s", devalias); +} diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h index 239747beb1..fc4bdf35fa 100644 --- a/src/qemu/qemu_alias.h +++ b/src/qemu/qemu_alias.h @@ -97,3 +97,5 @@ const char *qemuDomainGetManagedPRAlias(void); char *qemuDomainGetUnmanagedPRAlias(const char *parentalias); =20 const char *qemuDomainGetDBusVMStateAlias(void); + +char *qemuDomainGetVhostUserChrAlias(const char *devalias); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f742379919..c30e5a6c83 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2174,7 +2174,7 @@ qemuBuildVHostUserFsCommandLine(virCommandPtr cmd, g_autofree char *chardev_alias =3D NULL; g_auto(virBuffer) opt =3D VIR_BUFFER_INITIALIZER; =20 - chardev_alias =3D g_strdup_printf("chr-vu-%s", fs->info.alias); + chardev_alias =3D qemuDomainGetVhostUserChrAlias(fs->info.alias); =20 virCommandAddArg(cmd, "-chardev"); virBufferAddLit(&opt, "socket"); @@ -4168,9 +4168,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, virBufferAsprintf(&buf, ",max_outputs=3D%u", video->heads); } } else if (video->backend =3D=3D VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUS= ER) { + g_autofree char *alias =3D qemuDomainGetVhostUserChrAlias(video->i= nfo.alias); if (video->heads) virBufferAsprintf(&buf, ",max_outputs=3D%u", video->heads); - virBufferAsprintf(&buf, ",chardev=3Dchr-vu-%s", video->info.alias); + virBufferAsprintf(&buf, ",chardev=3D%s", alias); } else if (video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_VIRTIO) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS)) { if (video->heads) @@ -4290,6 +4291,7 @@ qemuBuildVhostUserChardevStr(const char *alias, int *fd, virCommandPtr cmd) { + g_autofree char *chardev_alias =3D qemuDomainGetVhostUserChrAlias(alia= s); char *chardev =3D NULL; =20 if (*fd =3D=3D -1) { @@ -4298,7 +4300,7 @@ qemuBuildVhostUserChardevStr(const char *alias, return NULL; } =20 - chardev =3D g_strdup_printf("socket,id=3Dchr-vu-%s,fd=3D%d", alias, *f= d); + chardev =3D g_strdup_printf("socket,id=3D%s,fd=3D%d", chardev_alias, *= fd); =20 virCommandPassFD(cmd, *fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); *fd =3D -1; --=20 2.29.2 From nobody Wed May 1 21:00:51 2024 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=1612365977; cv=none; d=zohomail.com; s=zohoarc; b=jUOOQzlzaZlf52KZTAkR7cie+cqr+SND2LyirHmeCVkhF0ZFvVCyNWk4Z7Wx2gS2j0cNDwHEqorA48dFt/HBXAjU7nMCgq8uEfs9heAKr3Vh/WfoiyekoUw0R8JpOaUWtVb0MUXYo05PkMgzg7LMN+8ZR84TY3x8Mv7zQSjpIF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365977; 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=/kP08TobvIKpgULV86jV898CSdqqzHVCJEaK/sSSsAo=; b=A0Ovb2SqNDmQkazMj23lTKl4Sqi7sUoQFQ5rE4p9uImMeFtqxUkZXLGz0AhJh7Rt4Cndg3EgnbmVAT416739kksTOw0W0OjM/yU5tdxsp2mIqU31KjIQ/TpKpsyJjd/j3iL1cgPrzy1k0r1y+J+fKILb0hZho3fhNEdaobBgtlU= 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) header.from= 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 1612365977938811.5245970838114; Wed, 3 Feb 2021 07:26:17 -0800 (PST) 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-34-JKr_pHg9NdWhMh-RH1aSew-1; Wed, 03 Feb 2021 10:26:14 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 818BA1936B60; Wed, 3 Feb 2021 15:26:09 +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 F38A360C13; Wed, 3 Feb 2021 15:26:08 +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 0A2EA49; Wed, 3 Feb 2021 15:26:07 +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 113FQ5bk002776 for ; Wed, 3 Feb 2021 10:26:05 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3B2035B692; Wed, 3 Feb 2021 15:26:05 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id AB4425D6A8 for ; Wed, 3 Feb 2021 15:26:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365976; 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=/kP08TobvIKpgULV86jV898CSdqqzHVCJEaK/sSSsAo=; b=gqoB9sHIeOAkUJrd/FhG4Fo/GYNj3FnapTsLJq+oNp5zLCkMF9qFtLvLi1rMq52Mjqc+d1 tc4AyrG3i6l0pJDD1WuwPcOkKUJC4kzrE6PMJHV+cv+9VVBYGD34160zj3BLTKfKcrKoqn Iji4AgskMWEVOHVuvoRHOY2790yRfak= X-MC-Unique: JKr_pHg9NdWhMh-RH1aSew-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 2/6] qemu_validate: move and refactor qemuValidateDomainDefVirtioFSSharedMemory Date: Wed, 3 Feb 2021 16:25:55 +0100 Message-Id: <2fb9bf2959494a52e0adb34a3953f62d8423997a.1612364698.git.phrdina@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.12 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Make the function reusable by other vhost-user based devices. Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- Changes in v2: - added documentation for qemuValidateDomainDefVhostUserRequireSharedMe= mory src/qemu/qemu_validate.c | 111 ++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 48 deletions(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index faadfbf7c8..f5016e4d0c 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1381,6 +1381,66 @@ qemuValidateDomainVirtioOptions(const virDomainVirti= oOptions *virtio, } =20 =20 +/** + * qemuValidateDomainDefVhostUserRequireSharedMemory: + * @def: VM definition + * @name: name of the attribute/element + * @qemuCaps: capabilities of QEMU binary + * + * Check if the VM definition contains any form of shared memory + * which is required by vhost-user devices to operate properly. + * + * On success returns 0, on error returns -1 and reports proper error + * message. + */ +static int +qemuValidateDomainDefVhostUserRequireSharedMemory(const virDomainDef *def, + const char *name, + virQEMUCapsPtr qemuCaps) +{ + const char *defaultRAMId =3D virQEMUCapsGetMachineDefaultRAMid(qemuCap= s, + def->virt= Type, + def->os.m= achine); + size_t numa_nodes =3D virDomainNumaGetNodeCount(def->numa); + size_t i; + + if (numa_nodes =3D=3D 0 && + !(defaultRAMId && def->mem.access =3D=3D VIR_DOMAIN_MEMORY_ACCESS_= SHARED)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("'%s' requires shared memory"), name); + return -1; + } + + for (i =3D 0; i < numa_nodes; i++) { + virDomainMemoryAccess node_access =3D + virDomainNumaGetNodeMemoryAccessMode(def->numa, i); + + switch (node_access) { + case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT: + if (def->mem.access !=3D VIR_DOMAIN_MEMORY_ACCESS_SHARED) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("'%s' requires shared memory"), name); + return -1; + } + break; + case VIR_DOMAIN_MEMORY_ACCESS_SHARED: + break; + case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("'%s' requires shared memory"), name); + return -1; + + case VIR_DOMAIN_MEMORY_ACCESS_LAST: + default: + virReportEnumRangeError(virDomainMemoryAccess, node_access); + return -1; + + } + } + return 0; +} + + static int qemuValidateDomainDeviceDefNetwork(const virDomainNetDef *net, virQEMUCapsPtr qemuCaps) @@ -3948,53 +4008,6 @@ qemuValidateDomainDeviceDefGraphics(const virDomainG= raphicsDef *graphics, } =20 =20 -static int -qemuValidateDomainDefVirtioFSSharedMemory(const virDomainDef *def, - virQEMUCapsPtr qemuCaps) -{ - const char *defaultRAMId =3D virQEMUCapsGetMachineDefaultRAMid(qemuCap= s, - def->virt= Type, - def->os.m= achine); - size_t numa_nodes =3D virDomainNumaGetNodeCount(def->numa); - size_t i; - - if (numa_nodes =3D=3D 0 && - !(defaultRAMId && def->mem.access =3D=3D VIR_DOMAIN_MEMORY_ACCESS_= SHARED)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtiofs requires shared memory")); - return -1; - } - - for (i =3D 0; i < numa_nodes; i++) { - virDomainMemoryAccess node_access =3D - virDomainNumaGetNodeMemoryAccessMode(def->numa, i); - - switch (node_access) { - case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT: - if (def->mem.access !=3D VIR_DOMAIN_MEMORY_ACCESS_SHARED) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtiofs requires shared memory")); - return -1; - } - break; - case VIR_DOMAIN_MEMORY_ACCESS_SHARED: - break; - case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtiofs requires shared memory")); - return -1; - - case VIR_DOMAIN_MEMORY_ACCESS_LAST: - default: - virReportEnumRangeError(virDomainMemoryAccess, node_access); - return -1; - - } - } - return 0; -} - - static int qemuValidateDomainDeviceDefFS(virDomainFSDefPtr fs, const virDomainDef *def, @@ -4092,8 +4105,10 @@ qemuValidateDomainDeviceDefFS(virDomainFSDefPtr fs, _("virtiofs does not support fmode and dmode")); return -1; } - if (qemuValidateDomainDefVirtioFSSharedMemory(def, qemuCaps) < 0) + if (qemuValidateDomainDefVhostUserRequireSharedMemory(def, "virtio= fs", + qemuCaps) < = 0) { return -1; + } if (fs->info.bootIndex && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VHOST_USER_FS_BOOTINDEX)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", --=20 2.29.2 From nobody Wed May 1 21:00:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.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 63.128.21.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=1612365978; cv=none; d=zohomail.com; s=zohoarc; b=ceRtDp+jPV9g3QI53GDAvlg0CkgtlMckUevl4rjvlHPpWr55wzQvlDItfoEmcGXVTWJTowLirgakgVmGVBOfa+SWcZuxK69davQFKJGHSJEhj31ADj0ukeMxXSFe4lSu3bxLWkr8SQcnmLdiwA/pvr7kV9m997mm4FwVuy/YtgA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365978; 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=CUoCRaDUyXnn6pXkHr6hYYIG97NVGusdGgTgTUa6BEM=; b=AY8z4CSs2GrmRHX0ruyGhwa9q12oeiDnOIIGYBDEx/Mz2s+qOBYLSzllGcy7RlzsK+ql9rSAYSL+ReMEatDh4L/laPE8wL9kO8lRursRmn8XBjCAkMPF7RZuYZw8KNFn/2qh75yHIErkHGXvEFJkZpg6j93VllgSAme4ILKS0mY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612365978206301.94789927769125; Wed, 3 Feb 2021 07:26:18 -0800 (PST) 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-480-RYsU_LSdPhOlOVs69G9koA-1; Wed, 03 Feb 2021 10:26:14 -0500 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 7E2FC1015942; Wed, 3 Feb 2021 15:26:09 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1C5C550DD3; Wed, 3 Feb 2021 15:26:08 +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 B863418095CC; Wed, 3 Feb 2021 15:26:06 +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 113FQ6Lr002790 for ; Wed, 3 Feb 2021 10:26:06 -0500 Received: by smtp.corp.redhat.com (Postfix) id 1F7BA5D6A8; Wed, 3 Feb 2021 15:26:06 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id 908E85B692 for ; Wed, 3 Feb 2021 15:26:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365977; 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=CUoCRaDUyXnn6pXkHr6hYYIG97NVGusdGgTgTUa6BEM=; b=VN4TQU4kfDWQ40bmICSqi8uVIwXymmvm+kMe15iePtGuRUEQK0ksokgfGMZaIv12JG+tGX 6KpgXN8nx6wEA31Bfw6FF7wqDTnZTxdraX3wFu6zFIzYF/1TnbNdO7ZGLm7X9FLlrUQR4L 6MtSRScB2VObI22otQzb3FUvKRHxG+Y= X-MC-Unique: RYsU_LSdPhOlOVs69G9koA-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 3/6] docs: introduces new vhostuser disk type Date: Wed, 3 Feb 2021 16:25:56 +0100 Message-Id: <78f38830fc9a42970a49eb396d34ba34798aac89.1612364698.git.phrdina@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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- Changes in v2: - edded note to documentation that most XML bits are not supported - removed mode=3D'client' from docs example and commit message docs/formatdomain.rst | 37 +++++++++++++++++++++++++++++++++-- docs/schemas/domaincommon.rng | 19 ++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 3a2fe7fa16..0f78aa3a8c 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -2419,6 +2419,13 @@ paravirtualized driver is specified via the ``disk``= element. + + + + + + + ... =20 @@ -2429,8 +2436,8 @@ paravirtualized driver is specified via the ``disk`` = element. ``type`` Valid values are "file", "block", "dir" ( :since:`since 0.7.5` ), "network" ( :since:`since 0.8.7` ), or "volume" ( :since:`since 1.0.= 5` ), - or "nvme" ( :since:`since 6.0.0` ) and refer to the underlying sourc= e for - the disk. :since:`Since 0.0.3` + or "nvme" ( :since:`since 6.0.0` ), or "vhostuser" ( :since:`since 7= .1.0` ) + and refer to the underlying source for the disk. :since:`Since 0.0.3` ``device`` Indicates how the disk is to be exposed to the guest OS. Possible va= lues for this attribute are "floppy", "disk", "cdrom", and "lun", default= ing to @@ -2581,6 +2588,23 @@ paravirtualized driver is specified via the ``disk``= element. is not involved (compared to passing say ``/dev/nvme0n1`` via ```` and therefore lower latencies can be achie= ved. =20 + ``vhostuser`` + Enables the hypervisor to connect to another process using vhost-user + protocol. Requires shared memory configured for the VM, for more det= ails + see ``access`` mode for `memoryBacking <#elementsMemoryBacking>` ele= ment. + + The ``source`` element has following mandatory attributes: + + ``type`` + The type of char device. Currently only ``unix`` type is supporte= d. + ``path`` + Path to the unix socket to be used as disk source. + + Note that the vhost server replaces both the disk frontend and backe= nd + thus almost all of the disk properties can't be configured via the + ```` XML for this disk type. Additionally features such as blo= ckjobs, + incremental backups and snapshots are not supported for this disk ty= pe. + With "file", "block", and "volume", one or more optional sub-elements ``seclabel``, `described below <#seclabel>`__ (and :since:`since 0.9.9`= ), can be used to override the domain security labeling policy for just th= at @@ -2703,6 +2727,15 @@ paravirtualized driver is specified via the ``disk``= element. of these attributes is omitted, then that field is assumed to be the default value for the current system. If both ``user`` and ``group`` are intended to be default, then the entire element may be omitted. + ``reconnect`` + For disk type ``vhostuser`` configures reconnect timeout if the conn= ection + is lost. It has two mandatory attributes: + + ``enabled`` + If the reconnect feature is enabled, accepts ``yes`` and ``no`` + ``timeout`` + The amount of seconds after which hypervisor tries to reconnect. + =20 For a "file" or "volume" disk type which represents a cdrom or floppy (= the ``device`` attribute), it is possible to define policy what to do with = the diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 239ae3f347..7a2706a4fb 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1646,6 +1646,7 @@ + =20 @@ -2156,6 +2157,24 @@ =20 + + + vhostuser + + + + unix + + + + + + + + + + + (ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]+<= /param> --=20 2.29.2 From nobody Wed May 1 21:00:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.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 216.205.24.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=1612365993; cv=none; d=zohomail.com; s=zohoarc; b=ButNV1CGFq1LWBj1QYSHTnh00OsBrQlQWSOgdv1DQmDuWiMTM4OXS6erUiH+nJzmQIgGG9wtHuBgR8Ibu6+FZNrOAKPO2UBpOXDbBUzFBrsKOeiv1EAAGwkwI/U7/DSmvGxx9Ny2u/Axc7uL1yRuJ+Ak9x18A/q3Re5TKGQIAmo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365993; 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=YY628WqZXPjlIrg2BqC3MrHUVGhUz0ugZ2eeq6eFXjA=; b=WUHixrkjv/D4afv/I3lDrKdkaCAmc1UG3jnOXQhSb5Btk8ObwuRrKLN49Y4iatqFAvjjjcX4L5EKBk9IMNs5GZhgHt/XZfaEe41eKCZxLaVdQ59lJgQxKumVkf67I3bPqOjyINadxSR2WBmpN7fIfK09objgM5pWsAQPJTvbpfM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1612365993403515.2420329390144; Wed, 3 Feb 2021 07:26:33 -0800 (PST) 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-513-6dYQwQJaNbikPWZQfLQ-Tw-1; Wed, 03 Feb 2021 10:26:29 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 76D021015940; Wed, 3 Feb 2021 15:26:22 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4C7625C238; Wed, 3 Feb 2021 15:26:22 +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 12A6818089C9; Wed, 3 Feb 2021 15:26:22 +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 113FQ7H2002798 for ; Wed, 3 Feb 2021 10:26:07 -0500 Received: by smtp.corp.redhat.com (Postfix) id 2F67A5D762; Wed, 3 Feb 2021 15:26:07 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id 74FE45D6A8 for ; Wed, 3 Feb 2021 15:26:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365992; 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=YY628WqZXPjlIrg2BqC3MrHUVGhUz0ugZ2eeq6eFXjA=; b=h/5hwtQdYWHdGcXSo8btsym8y0569xp5a31snL+Q58/QmPJpVWQHNPFkDe4N+Tk7Nh24c4 KnWcsDTsaEK5M+37h1mSTzVNWkXkOSgP0MSIMTiZ38TkbuqTRguZb+ZoZilEdqGIlK5hKo MdjVC6YsDlE4blT/xfETuzvp2+5wUmM= X-MC-Unique: 6dYQwQJaNbikPWZQfLQ-Tw-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 4/6] conf: implement support for vhostuser disk Date: Wed, 3 Feb 2021 16:25:57 +0100 Message-Id: <4ac9852a6bf19646feb41cf1d191fa0f5f68a754.1612364698.git.phrdina@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.16 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- Changes in v2: - added comment about snapshots not supported - moved forward declarations to the top of the file - fixed typos - added proper error message to qemuBlockStorageSourceGetBackendProps - added check for blkdeviotune.group_name in virDomainDiskVhostUserVali= date - added into one disk in tests src/conf/domain_conf.c | 87 ++++++++ src/conf/domain_validate.c | 188 ++++++++++++++++++ src/conf/storage_source_conf.c | 3 + src/conf/storage_source_conf.h | 4 + src/libxl/xen_xl.c | 1 + src/qemu/qemu_block.c | 6 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_migration.c | 2 + src/qemu/qemu_snapshot.c | 4 + src/storage_file/storage_source.c | 1 + tests/qemuxml2argvdata/disk-vhostuser.xml | 30 +++ .../disk-vhostuser.x86_64-latest.xml | 48 +++++ tests/qemuxml2xmltest.c | 1 + 13 files changed, 376 insertions(+) create mode 100644 tests/qemuxml2argvdata/disk-vhostuser.xml create mode 100644 tests/qemuxml2xmloutdata/disk-vhostuser.x86_64-latest.x= ml diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 69b2841924..8dc5aecbf4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1338,6 +1338,19 @@ static virClassPtr virDomainXMLOptionClass; static void virDomainObjDispose(void *obj); static void virDomainXMLOptionDispose(void *obj); =20 + +static void +virDomainChrSourceDefFormat(virBufferPtr buf, + virDomainChrSourceDefPtr def, + unsigned int flags); + + +static int +virDomainChrSourceReconnectDefParseXML(virDomainChrSourceReconnectDefPtr d= ef, + xmlNodePtr node, + xmlXPathContextPtr ctxt); + + static int virDomainObjOnceInit(void) { if (!VIR_CLASS_NEW(virDomainObj, virClassForObjectLockable())) @@ -5229,6 +5242,12 @@ virDomainDiskDefPostParse(virDomainDiskDefPtr disk, disk->src->nvme->managed =3D VIR_TRISTATE_BOOL_YES; } =20 + /* vhost-user doesn't allow us to snapshot, disable snapshots by defau= lt */ + if (disk->src->type =3D=3D VIR_STORAGE_TYPE_VHOST_USER && + disk->snapshot =3D=3D VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT) { + disk->snapshot =3D VIR_DOMAIN_SNAPSHOT_LOCATION_NONE; + } + if (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && virDomainDiskDefAssignAddress(xmlopt, disk, def) < 0) { return -1; @@ -8362,6 +8381,49 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node, } =20 =20 +static int +virDomainDiskSourceVHostUserParse(xmlNodePtr node, + virStorageSourcePtr src, + virDomainXMLOptionPtr xmlopt, + xmlXPathContextPtr ctxt) +{ + g_autofree char *type =3D virXMLPropString(node, "type"); + g_autofree char *path =3D virXMLPropString(node, "path"); + + if (!type) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing 'type' attribute for vhostuser disk sour= ce")); + return -1; + } + + if (STRNEQ(type, "unix")) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("invalid 'type' attribute for vhostuser disk sour= ce")); + return -1; + } + + if (!path) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing 'path' attribute for vhostuser disk sour= ce")); + return -1; + } + + if (!(src->vhostuser =3D virDomainChrSourceDefNew(xmlopt))) + return -1; + + src->vhostuser->type =3D virDomainChrTypeFromString(type); + src->vhostuser->data.nix.path =3D g_steal_pointer(&path); + + if (virDomainChrSourceReconnectDefParseXML(&src->vhostuser->data.nix.r= econnect, + node, + ctxt) < 0) { + return -1; + } + + return 0; +} + + static int virDomainDiskSourcePRParse(xmlNodePtr node, xmlXPathContextPtr ctxt, @@ -8513,6 +8575,10 @@ virDomainStorageSourceParse(xmlNodePtr node, if (virDomainDiskSourceNVMeParse(node, ctxt, src) < 0) return -1; break; + case VIR_STORAGE_TYPE_VHOST_USER: + if (virDomainDiskSourceVHostUserParse(node, src, xmlopt, ctxt) < 0) + return -1; + break; case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -23940,6 +24006,23 @@ virDomainDiskSourceNVMeFormat(virBufferPtr attrBuf, } =20 =20 +static void +virDomainChrSourceReconnectDefFormat(virBufferPtr buf, + virDomainChrSourceReconnectDefPtr def= ); + + +static void +virDomainDiskSourceVhostuserFormat(virBufferPtr attrBuf, + virBufferPtr childBuf, + virDomainChrSourceDefPtr vhostuser) +{ + virBufferAddLit(attrBuf, " type=3D'unix'"); + virBufferAsprintf(attrBuf, " path=3D'%s'", vhostuser->data.nix.path); + + virDomainChrSourceReconnectDefFormat(childBuf, &vhostuser->data.nix.re= connect); +} + + static int virDomainDiskSourceFormatPrivateData(virBufferPtr buf, virStorageSourcePtr src, @@ -24053,6 +24136,10 @@ virDomainDiskSourceFormat(virBufferPtr buf, virDomainDiskSourceNVMeFormat(&attrBuf, &childBuf, src->nvme); break; =20 + case VIR_STORAGE_TYPE_VHOST_USER: + virDomainDiskSourceVhostuserFormat(&attrBuf, &childBuf, src->vhost= user); + break; + case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index c56b03ff3a..222a9386f6 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -22,6 +22,7 @@ =20 #include "domain_validate.h" #include "domain_conf.h" +#include "snapshot_conf.h" #include "virconftypes.h" #include "virlog.h" #include "virutil.h" @@ -254,6 +255,188 @@ virDomainCheckVirtioOptionsAreAbsent(virDomainVirtioO= ptionsPtr virtio) } =20 =20 +static int +virDomainDiskVhostUserValidate(const virDomainDiskDef *disk) +{ + if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_VIRTIO) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("vhostuser disk supports only virtio bus")); + return -1; + } + + if (disk->snapshot !=3D VIR_DOMAIN_SNAPSHOT_LOCATION_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only snapshot=3Dno is supported with vhostuser d= isk")); + return -1; + } + + /* Unsupported driver attributes */ + + if (disk->cachemode !=3D VIR_DOMAIN_DISK_CACHE_DEFAULT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("cache is not supported with vhostuser disk")); + return -1; + } + + if (disk->error_policy || disk->rerror_policy) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("error_policy is not supported with vhostuser dis= k")); + return -1; + } + + if (disk->iomode) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("io is not supported with vhostuser disk")); + return -1; + } + + if (disk->ioeventfd !=3D VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("ioeventfd is not supported with vhostuser disk")= ); + return -1; + } + + if (disk->copy_on_read) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("copy_on_read is not supported with vhostuser dis= k")); + return -1; + } + + if (disk->discard) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("discard is not supported with vhostuser disk")); + return -1; + } + + if (disk->iothread) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("iothread is not supported with vhostuser disk")); + return -1; + } + + if (disk->detect_zeroes) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("detect_zeroes is not supported with vhostuser di= sk")); + return -1; + } + + /* Unsupported driver elements */ + + if (disk->virtio) { + if (disk->virtio->iommu !=3D VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("iommu is not supported with vhostuser disk")= ); + return -1; + } + + if (disk->virtio->ats !=3D VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("ats is not supported with vhostuser disk")); + return -1; + } + + if (disk->virtio->packed !=3D VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("packed is not supported with vhostuser disk"= )); + return -1; + } + } + + if (disk->src->metadataCacheMaxSize > 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("metadata_cache is not supported with vhostuser d= isk")); + return -1; + } + + /* Unsupported disk elements */ + + if (disk->blkdeviotune.group_name || + virDomainBlockIoTuneInfoHasAny(&disk->blkdeviotune)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("iotune is not supported with vhostuser disk")); + return -1; + } + + if (disk->src->backingStore) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("backingStore is not supported with vhostuser dis= k")); + return -1; + } + + if (disk->src->encryption) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("encryption is not supported with vhostuser disk"= )); + return -1; + } + + if (disk->src->readonly) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("readonly is not supported with vhostuser disk")); + return -1; + } + + if (disk->src->shared) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("shareable is not supported with vhostuser disk")= ); + return -1; + } + + if (disk->transient) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("transient is not supported with vhostuser disk")= ); + return -1; + } + + if (disk->serial) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("serial is not supported with vhostuser disk")); + return -1; + } + + if (disk->wwn) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("wwn is not supported with vhostuser disk")); + return -1; + } + + if (disk->vendor) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("vendor is not supported with vhostuser disk")); + return -1; + } + + if (disk->product) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("product is not supported with vhostuser disk")); + return -1; + } + + if (disk->src->auth) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("auth is not supported with vhostuser disk")); + return -1; + } + + if (disk->geometry.cylinders > 0 || + disk->geometry.heads > 0 || + disk->geometry.sectors > 0 || + disk->geometry.trans !=3D VIR_DOMAIN_DISK_TRANS_DEFAULT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("geometry is not supported with vhostuser disk")); + return -1; + } + + if (disk->blockio.logical_block_size > 0 || + disk->blockio.physical_block_size > 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("blockio is not supported with vhostuser disk")); + return -1; + } + + return 0; +} + + #define VENDOR_LEN 8 #define PRODUCT_LEN 16 =20 @@ -329,6 +512,11 @@ virDomainDiskDefValidate(const virDomainDef *def, } } =20 + if (disk->src->type =3D=3D VIR_STORAGE_TYPE_VHOST_USER && + virDomainDiskVhostUserValidate(disk) < 0) { + return -1; + } + for (next =3D disk->src; next; next =3D next->backingStore) { if (virSecurityDeviceLabelDefValidate(next->seclabels, next->nseclabels, diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c index 3eaf05fe52..7706bbd8da 100644 --- a/src/conf/storage_source_conf.c +++ b/src/conf/storage_source_conf.c @@ -46,6 +46,7 @@ VIR_ENUM_IMPL(virStorage, "network", "volume", "nvme", + "vhostuser" ); =20 =20 @@ -1035,6 +1036,7 @@ virStorageSourceIsLocalStorage(const virStorageSource= *src) /* While NVMe disks are local, they are not accessible via src->pa= th. * Therefore, we have to return false here. */ case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_LAST: case VIR_STORAGE_TYPE_NONE: return false; @@ -1215,6 +1217,7 @@ virStorageSourceIsRelative(virStorageSourcePtr src) case VIR_STORAGE_TYPE_NETWORK: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: return false; diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index e66ccdedef..f42bb1c67d 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -23,6 +23,7 @@ =20 #include "storage_encryption_conf.h" #include "virbitmap.h" +#include "virconftypes.h" #include "virenum.h" #include "virobject.h" #include "virpci.h" @@ -41,6 +42,7 @@ typedef enum { VIR_STORAGE_TYPE_NETWORK, VIR_STORAGE_TYPE_VOLUME, VIR_STORAGE_TYPE_NVME, + VIR_STORAGE_TYPE_VHOST_USER, =20 VIR_STORAGE_TYPE_LAST } virStorageType; @@ -300,6 +302,8 @@ struct _virStorageSource { =20 virStorageSourceNVMeDefPtr nvme; /* type =3D=3D VIR_STORAGE_TYPE_NVME = */ =20 + virDomainChrSourceDefPtr vhostuser; /* type =3D=3D VIR_STORAGE_TYPE_VH= OST_USER */ + virStorageSourceInitiatorDef initiator; =20 virObjectPtr privateData; diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index 6dcba43fe0..941832ce4e 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -1668,6 +1668,7 @@ xenFormatXLDiskSrc(virStorageSourcePtr src, char **sr= cstr) =20 case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: break; diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 6456100170..4ae736d553 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1173,6 +1173,11 @@ qemuBlockStorageSourceGetBackendProps(virStorageSour= cePtr src, return NULL; break; =20 + case VIR_STORAGE_TYPE_VHOST_USER: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unable to create blockdev props for vhostuser di= sk type")); + return NULL; + case VIR_STORAGE_TYPE_VOLUME: virReportError(VIR_ERR_INTERNAL_ERROR, _("storage source pool '%s' volume '%s' is not tran= slated"), @@ -2599,6 +2604,7 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorag= eSourcePtr src, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: return 0; =20 case VIR_STORAGE_TYPE_NONE: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c30e5a6c83..5501f90221 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1087,6 +1087,7 @@ qemuGetDriveSourceString(virStorageSourcePtr src, =20 case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: break; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 0adfdb9351..f44d31c971 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -238,6 +238,7 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn, case VIR_STORAGE_TYPE_BLOCK: case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -1479,6 +1480,7 @@ qemuMigrationSrcIsSafe(virDomainDefPtr def, unsafe =3D true; break; =20 + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_BLOCK: case VIR_STORAGE_TYPE_DIR: diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 39445738a2..115c2fc91b 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -428,6 +428,7 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapsh= otDiskDefPtr snapdisk, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -445,6 +446,7 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapsh= otDiskDefPtr snapdisk, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -518,6 +520,7 @@ qemuSnapshotPrepareDiskExternalActive(virDomainObjPtr v= m, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -648,6 +651,7 @@ qemuSnapshotPrepareDiskInternal(virDomainDiskDefPtr dis= k, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/storage_file/storage_source.c b/src/storage_file/storage_s= ource.c index 4b46cc4e84..ffe150a9b0 100644 --- a/src/storage_file/storage_source.c +++ b/src/storage_file/storage_source.c @@ -545,6 +545,7 @@ virStorageSourceUpdatePhysicalSize(virStorageSourcePtr = src, /* We shouldn't get VOLUME, but the switch requires all cases */ case VIR_STORAGE_TYPE_VOLUME: case VIR_STORAGE_TYPE_NVME: + case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: return -1; diff --git a/tests/qemuxml2argvdata/disk-vhostuser.xml b/tests/qemuxml2argv= data/disk-vhostuser.xml new file mode 100644 index 0000000000..c96ef9119c --- /dev/null +++ b/tests/qemuxml2argvdata/disk-vhostuser.xml @@ -0,0 +1,30 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + + + + + 1 + + hvm + + + /usr/bin/qemu-system-x86_64 + + + + + + + + + + + + + + + diff --git a/tests/qemuxml2xmloutdata/disk-vhostuser.x86_64-latest.xml b/te= sts/qemuxml2xmloutdata/disk-vhostuser.x86_64-latest.xml new file mode 100644 index 0000000000..9712dc0b12 --- /dev/null +++ b/tests/qemuxml2xmloutdata/disk-vhostuser.x86_64-latest.xml @@ -0,0 +1,48 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + + + + + 1 + + hvm + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + + +
+ + + + + + + +
+ + +
+ + + + + +
+ + + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 342d70935f..a00ebd7d76 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -308,6 +308,7 @@ mymain(void) DO_TEST("disk-network-tlsx509-nbd", NONE); DO_TEST("disk-network-tlsx509-vxhs", NONE); DO_TEST("disk-nvme", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_QCOW2_LUKS); + DO_TEST_CAPS_LATEST("disk-vhostuser"); DO_TEST_CAPS_LATEST("disk-scsi"); DO_TEST("disk-virtio-scsi-reservations", QEMU_CAPS_VIRTIO_SCSI, --=20 2.29.2 From nobody Wed May 1 21:00:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.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 63.128.21.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=1612365992; cv=none; d=zohomail.com; s=zohoarc; b=c/WHERVyJzRxmi/CEOBGr6yuJ1uzig+EZWUzuav/vL4Y45mrUiuQOBJNLjRkDV8JgMV6+ZCnZeJGI81vYybK53PSuQIgvTReCkIjEdwij829UxnLvZFG3CyHZuSOttNkZkoQta+50JldMp3oV/rNdZViQqSB49GAxpvk5qkNYp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365992; 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=sTPQX8ish07dZ32mAD2MKxSuka9IhYRBTAf4ATd37sI=; b=FTQoVoYH8VqVncO/h8MuMLd3c0pNIrkpPvpwiW5X2F2IIWaY74Y31Q7FJNOoiZSlhbR424GDUD5iUqNxgKAtYcZmUe28SG8jvKT8pUfSD+9ezBL6ne97we2ngr4riAhWbZMXLiVzi/xhPoKeiG94gxqBoXgvofeH+L1jPIsaxdY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612365992729697.9332926510855; Wed, 3 Feb 2021 07:26:32 -0800 (PST) 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-378-2LuZ8JYgOe6Hg6yhiAT1dg-1; Wed, 03 Feb 2021 10:26:28 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8F298801961; Wed, 3 Feb 2021 15:26:21 +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 6BA465C25A; Wed, 3 Feb 2021 15:26:21 +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 32D1749; Wed, 3 Feb 2021 15:26:21 +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 113FQ8ij002816 for ; Wed, 3 Feb 2021 10:26:08 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3C9965D762; Wed, 3 Feb 2021 15:26:08 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id 839C05D6A8 for ; Wed, 3 Feb 2021 15:26:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365991; 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=sTPQX8ish07dZ32mAD2MKxSuka9IhYRBTAf4ATd37sI=; b=UPyqGUP7f4SNcKrlztWmqxd6sr2OqHF3MrICtEtgz6+qCyp0eKGiXmmzj10hsz6NwfwcD8 A3lKly5avUVtBQljCEw0QF0EjkPz/PZvAfIGyHm8zf1GzHy3xNV8VCO7cPYuFwx9X6QAOZ cjMUvduWB9o4l5RE9rfp5N4xKvwDPyg= X-MC-Unique: 2LuZ8JYgOe6Hg6yhiAT1dg-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 5/6] qemu_capabilities: introduce vhost-user-blk capability Date: Wed, 3 Feb 2021 16:25:58 +0100 Message-Id: <311d93b6353f01be66936b0bcdec5d8b24aa89eb.1612364698.git.phrdina@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.16 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 3 +++ tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 + 35 files changed, 40 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4a1bf9b6fe..aa54647a8c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -611,6 +611,9 @@ VIR_ENUM_IMPL(virQEMUCaps, "am53c974", "virtio-pmem-pci", "vhost-user-fs.bootindex", + + /* 390 */ + "vhost-user-blk", ); =20 =20 @@ -1328,6 +1331,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "dc390", QEMU_CAPS_SCSI_DC390 }, { "am53c974", QEMU_CAPS_SCSI_AM53C974 }, { "virtio-pmem-pci", QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI }, + { "vhost-user-blk", QEMU_CAPS_DEVICE_VHOST_USER_BLK }, }; =20 =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index cd95103652..81a1d926a8 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -592,6 +592,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI, /* -device virtio-pmem-pci */ QEMU_CAPS_VHOST_USER_FS_BOOTINDEX, /* vhost-user-fs.bootindex */ =20 + /* 390 */ + QEMU_CAPS_DEVICE_VHOST_USER_BLK, /* -device vhost-user-blk */ + QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; =20 diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qem= ucapabilitiesdata/caps_2.12.0.aarch64.xml index a4574f70f6..3ff1bf3ff8 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml @@ -166,6 +166,7 @@ + 2012000 0 61700289 diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemuc= apabilitiesdata/caps_2.12.0.ppc64.xml index ab5ab06084..9311bf66db 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml @@ -167,6 +167,7 @@ + 2011090 0 42900289 diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemuc= apabilitiesdata/caps_2.12.0.s390x.xml index 588ccc58e4..63c7e38f40 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml @@ -133,6 +133,7 @@ + 2012000 0 39100289 diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemu= capabilitiesdata/caps_2.12.0.x86_64.xml index 13b61fcfe5..df0ce08da6 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -210,6 +210,7 @@ + 2011090 0 43100289 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_3.0.0.ppc64.xml index c92bb5f6a3..dc0e8d637e 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml @@ -169,6 +169,7 @@ + 2012050 0 42900239 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml b/tests/qemu= capabilitiesdata/caps_3.0.0.riscv32.xml index d68c785583..cbc185fc3a 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml @@ -103,6 +103,7 @@ + 3000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml b/tests/qemu= capabilitiesdata/caps_3.0.0.riscv64.xml index 3dd3ec87e5..aa803ccbd6 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml @@ -103,6 +103,7 @@ + 3000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml b/tests/qemuca= pabilitiesdata/caps_3.0.0.s390x.xml index 649104ccbd..cdb767bbf7 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml @@ -136,6 +136,7 @@ + 3000000 0 39100239 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_3.0.0.x86_64.xml index d7f1d6cd84..2ea912eaad 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml @@ -216,6 +216,7 @@ + 3000000 0 43100239 diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_3.1.0.ppc64.xml index f4b4566ea8..b05f16983c 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml @@ -174,6 +174,7 @@ + 3000091 0 42900240 diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_3.1.0.x86_64.xml index b8391f1353..8a892a5da3 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml @@ -219,6 +219,7 @@ + 3000092 0 43100240 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.aarch64.xml index 4722557eaf..c28ada94fb 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml @@ -180,6 +180,7 @@ + 4000000 0 61700240 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_4.0.0.ppc64.xml index 6f549902ca..a15edd87de 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml @@ -188,6 +188,7 @@ + 4000000 0 42900240 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.riscv32.xml index b1dc08eb4d..de2b578b82 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml @@ -181,6 +181,7 @@ + 4000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.riscv64.xml index babb8fb8ab..754ad6db53 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml @@ -181,6 +181,7 @@ + 4000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml b/tests/qemuca= pabilitiesdata/caps_4.0.0.s390x.xml index 5a15848f88..4a10deea01 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml @@ -144,6 +144,7 @@ + 4000000 0 39100240 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.0.0.x86_64.xml index 43b70ccc94..c580d29374 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml @@ -225,6 +225,7 @@ + 4000000 0 43100240 diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.1.0.x86_64.xml index 28a4b0ede0..93b223aab2 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -232,6 +232,7 @@ + 4001000 0 43100241 diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemu= capabilitiesdata/caps_4.2.0.aarch64.xml index 77fdc73415..4c149e79bb 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml @@ -193,6 +193,7 @@ + 4001050 0 61700242 diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_4.2.0.ppc64.xml index 15eaac77a6..20cb49a508 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -194,6 +194,7 @@ + 4001050 0 42900242 diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemuca= pabilitiesdata/caps_4.2.0.s390x.xml index 42a7cca50a..41db85be6b 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -155,6 +155,7 @@ + 4002000 0 39100242 diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.2.0.x86_64.xml index e150741f11..f663c5ca4c 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -241,6 +241,7 @@ + 4002000 0 43100242 diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemu= capabilitiesdata/caps_5.0.0.aarch64.xml index d584642bff..b9963bbd7e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml @@ -203,6 +203,7 @@ + 5000000 0 61700241 diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_5.0.0.ppc64.xml index 596bccd70a..46edacd44b 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml @@ -212,6 +212,7 @@ + 5000000 0 42900241 diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml b/tests/qemu= capabilitiesdata/caps_5.0.0.riscv64.xml index eb760f2911..496b75da20 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml @@ -199,6 +199,7 @@ + 5000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.0.0.x86_64.xml index 7c56d110f4..a6d2785e55 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -248,6 +248,7 @@ + 5000000 0 43100241 diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.1.0.x86_64.xml index 07466093c9..136b5892d8 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml @@ -250,6 +250,7 @@ + 5001000 0 43100242 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml b/tests/qemu= capabilitiesdata/caps_5.2.0.aarch64.xml index cac9b40528..6b40141f15 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml @@ -207,6 +207,7 @@ + 5002000 0 61700243 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_5.2.0.ppc64.xml index e92201ad43..298139cdd7 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml @@ -214,6 +214,7 @@ + 5002000 0 42900243 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml b/tests/qemu= capabilitiesdata/caps_5.2.0.riscv64.xml index bee7f547c7..0457018c93 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml @@ -201,6 +201,7 @@ + 5002000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml b/tests/qemuca= pabilitiesdata/caps_5.2.0.s390x.xml index 15e7ee84c6..b59404230c 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml @@ -162,6 +162,7 @@ + 5002000 0 39100243 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.2.0.x86_64.xml index dea2ff4b54..4d6f02aae2 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml @@ -251,6 +251,7 @@ + 5002000 0 43100243 diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_6.0.0.x86_64.xml index f988357c44..6f24d80c6b 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml @@ -252,6 +252,7 @@ + 5002050 0 43100242 --=20 2.29.2 From nobody Wed May 1 21:00:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.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 216.205.24.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=1612365995; cv=none; d=zohomail.com; s=zohoarc; b=OcqELMBQ28BZbs+B7GLz3KuHf8KldoKEFwYZMk3R5gVkU+LoWhwcqoJWzm+GkmTwloBAQqTm8oWkHiCP4LurJXhS2XaDuW6j5oOazZBPk5CTbkePb3zWhmec3cn4fXRy94PQnU48ZDBlTL7/4RsdhCxb69IOU25jL+4lBUU1QVE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612365995; 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=SmYa1lUFqb2Y0FbxT5Ho7mzRHf8aFWvVXXdID21niz4=; b=a9Ox4irktQl5KSwSDQyWJhOuoqJrSFWjrYPiMozp8kHfza7wC+O0Ip7S2tBsIVTymdKhooMArAc7EvEIkICQE3RJGN7VG25UN0/ZQOpkPDosF4n2axwc1Z61P+BJ29vT5fEVZUPke5DWpfaU/ZdupTik8YScur/AuC82Izf6bzg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1612365995034892.0269448703121; Wed, 3 Feb 2021 07:26:35 -0800 (PST) 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-589-3Ai5Qrl0NcKjwZNaNKs6Mg-1; Wed, 03 Feb 2021 10:26:31 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8F15C1936B71; Wed, 3 Feb 2021 15:26:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6B40D3828; Wed, 3 Feb 2021 15:26:25 +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 2C85918089CC; Wed, 3 Feb 2021 15:26:25 +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 113FQ9dv002823 for ; Wed, 3 Feb 2021 10:26:09 -0500 Received: by smtp.corp.redhat.com (Postfix) id 209AA5B692; Wed, 3 Feb 2021 15:26:09 +0000 (UTC) Received: from antique-work.lan (unknown [10.40.192.101]) by smtp.corp.redhat.com (Postfix) with ESMTP id 91F9E5D762 for ; Wed, 3 Feb 2021 15:26:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612365993; 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=SmYa1lUFqb2Y0FbxT5Ho7mzRHf8aFWvVXXdID21niz4=; b=DFbyLMRASGYQ/CifvAHPS0RMorUyZiGS3uKqa6f786TqtBfZSZ+2WRSfmFZp72Az4wGuef rvMUzRGRsAcZA299sxu4tZ1SJSyDAGRiuutVX9B1LDO2RElzOR0Sbp3Ptv8jxmdsJpkN6Z vaDddxc+/2XcMmZ5X9wmgMtcV6I/mmc= X-MC-Unique: 3Ai5Qrl0NcKjwZNaNKs6Mg-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v2 6/6] qemu: implement vhost-user-blk support Date: Wed, 3 Feb 2021 16:25:59 +0100 Message-Id: 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.13 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Implements QEMU support for vhost-user-blk together with live hotplug/unplug. Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko Reviewed-by: Peter Krempa --- Changes in v2: - moved check for vhostuser in qemuDomainPrepareDiskSource - added hot-unplug support - disable blockjobs in qemuDomainDiskBlockJobIsSupported - error out in qemuDomainSetBlockIoTune and qemuDomainGetBlockIoTune - print proper error in qemuDomainBlockPeek, qemuDomainSetBlockThreshold, qemuDomainGetBlockInfo, qemuDomainBlockResize - correctly handle qemuDomainBlockStats(Flags) and qemuDomainGetStatsBlockExportDisk src/qemu/qemu_block.c | 42 +++++++++ src/qemu/qemu_block.h | 7 ++ src/qemu/qemu_command.c | 91 +++++++++++++++++-- src/qemu/qemu_command.h | 8 ++ src/qemu/qemu_domain.c | 12 +++ src/qemu/qemu_driver.c | 72 +++++++++++++++ src/qemu/qemu_hotplug.c | 14 ++- src/qemu/qemu_validate.c | 13 +++ .../disk-vhostuser.x86_64-latest.args | 41 +++++++++ tests/qemuxml2argvtest.c | 1 + 10 files changed, 290 insertions(+), 11 deletions(-) create mode 100644 tests/qemuxml2argvdata/disk-vhostuser.x86_64-latest.args diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 4ae736d553..0b8ca2a3f5 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1642,6 +1642,8 @@ qemuBlockStorageSourceAttachDataFree(qemuBlockStorage= SourceAttachDataPtr data) VIR_FREE(data->httpcookiesecretAlias); VIR_FREE(data->driveCmd); VIR_FREE(data->driveAlias); + VIR_FREE(data->chardevAlias); + VIR_FREE(data->chardevCmd); VIR_FREE(data); } =20 @@ -1815,6 +1817,13 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon, data->driveAdded =3D true; } =20 + if (data->chardevDef) { + if (qemuMonitorAttachCharDev(mon, data->chardevAlias, data->charde= vDef) < 0) + return -1; + + data->chardevAdded =3D true; + } + return 0; } =20 @@ -1837,6 +1846,13 @@ qemuBlockStorageSourceAttachRollback(qemuMonitorPtr = mon, =20 virErrorPreserveLast(&orig_err); =20 + if (data->chardevAdded) { + if (qemuMonitorDetachCharDev(mon, data->chardevAlias) < 0) { + VIR_WARN("Unable to remove chardev %s after failed " "qemuMoni= torAddDevice", + data->chardevAlias); + } + } + if (data->driveAdded) { if (qemuMonitorDriveDel(mon, data->driveAlias) < 0) VIR_WARN("Unable to remove drive %s (%s) after failed " @@ -2004,6 +2020,32 @@ qemuBlockStorageSourceChainDetachPrepareDrive(virSto= rageSourcePtr src, } =20 =20 +/** + * qemuBlockStorageSourceChainDetachPrepareChardev + * @src: storage source chain to remove + * + * Prepares qemuBlockStorageSourceChainDataPtr for detaching @src and its + * backingStore if -chardev was used. + */ +qemuBlockStorageSourceChainDataPtr +qemuBlockStorageSourceChainDetachPrepareChardev(char *chardevAlias) +{ + g_autoptr(qemuBlockStorageSourceAttachData) backend =3D NULL; + g_autoptr(qemuBlockStorageSourceChainData) data =3D NULL; + + data =3D g_new0(qemuBlockStorageSourceChainData, 1); + backend =3D g_new0(qemuBlockStorageSourceAttachData, 1); + + backend->chardevAlias =3D chardevAlias; + backend->chardevAdded =3D true; + + if (VIR_APPEND_ELEMENT(data->srcdata, data->nsrcdata, backend) < 0) + return NULL; + + return g_steal_pointer(&data); +} + + /** * qemuBlockStorageSourceChainAttach: * @mon: monitor object diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h index 8f2a05f46a..7f97e913b3 100644 --- a/src/qemu/qemu_block.h +++ b/src/qemu/qemu_block.h @@ -99,6 +99,11 @@ struct qemuBlockStorageSourceAttachData { char *driveAlias; bool driveAdded; =20 + virDomainChrSourceDefPtr chardevDef; + char *chardevAlias; + char *chardevCmd; + bool chardevAdded; + virJSONValuePtr authsecretProps; char *authsecretAlias; =20 @@ -160,6 +165,8 @@ qemuBlockStorageSourceChainDetachPrepareBlockdev(virSto= rageSourcePtr src); qemuBlockStorageSourceChainDataPtr qemuBlockStorageSourceChainDetachPrepareDrive(virStorageSourcePtr src, char *driveAlias); +qemuBlockStorageSourceChainDataPtr +qemuBlockStorageSourceChainDetachPrepareChardev(char *chardevAlias); =20 int qemuBlockStorageSourceChainAttach(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5501f90221..c24929571e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1714,9 +1714,16 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, break; =20 case VIR_DOMAIN_DISK_BUS_VIRTIO: - if (qemuBuildVirtioDevStr(&opt, "virtio-blk", qemuCaps, - VIR_DOMAIN_DEVICE_DISK, disk) < 0) { - return NULL; + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TY= PE_VHOST_USER) { + if (qemuBuildVirtioDevStr(&opt, "vhost-user-blk", qemuCaps, + VIR_DOMAIN_DEVICE_DISK, disk) < 0) { + return NULL; + } + } else { + if (qemuBuildVirtioDevStr(&opt, "virtio-blk", qemuCaps, + VIR_DOMAIN_DEVICE_DISK, disk) < 0) { + return NULL; + } } =20 if (disk->iothread) @@ -1775,11 +1782,17 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_SHARE_RW)) virBufferAddLit(&opt, ",share-rw=3Don"); =20 - if (qemuDomainDiskGetBackendAlias(disk, qemuCaps, &backendAlias) < 0) - return NULL; + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + backendAlias =3D qemuDomainGetVhostUserChrAlias(disk->info.alias); =20 - if (backendAlias) - virBufferAsprintf(&opt, ",drive=3D%s", backendAlias); + virBufferAsprintf(&opt, ",chardev=3D%s", backendAlias); + } else { + if (qemuDomainDiskGetBackendAlias(disk, qemuCaps, &backendAlias) <= 0) + return NULL; + + if (backendAlias) + virBufferAsprintf(&opt, ",drive=3D%s", backendAlias); + } =20 virBufferAsprintf(&opt, ",id=3D%s", disk->info.alias); if (bootindex) @@ -1989,6 +2002,9 @@ qemuBuildBlockStorageSourceAttachDataCommandline(virC= ommandPtr cmd, if (data->driveCmd) virCommandAddArgList(cmd, "-drive", data->driveCmd, NULL); =20 + if (data->chardevCmd) + virCommandAddArgList(cmd, "-chardev", data->chardevCmd, NULL); + if (data->storageProps) { if (!(tmp =3D virJSONValueToString(data->storageProps, false))) return -1; @@ -2027,7 +2043,10 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, g_autofree char *copyOnReadPropsStr =3D NULL; size_t i; =20 - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV) && + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + if (!(data =3D qemuBuildStorageSourceChainAttachPrepareChardev(dis= k))) + return -1; + } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV) && !qemuDiskBusIsSD(disk->bus)) { if (virStorageSourceIsEmpty(disk->src)) return 0; @@ -10296,6 +10315,38 @@ qemuBuildStorageSourceAttachPrepareDrive(virDomain= DiskDefPtr disk, } =20 =20 +/** + * qemuBuildStorageSourceAttachPrepareChardev: + * @src: disk source to prepare + * + * Prepare qemuBlockStorageSourceAttachDataPtr for use with -chardev. + */ +qemuBlockStorageSourceAttachDataPtr +qemuBuildStorageSourceAttachPrepareChardev(virDomainDiskDefPtr disk) +{ + g_autoptr(qemuBlockStorageSourceAttachData) data =3D NULL; + g_auto(virBuffer) chardev =3D VIR_BUFFER_INITIALIZER; + + data =3D g_new0(qemuBlockStorageSourceAttachData, 1); + + data->chardevDef =3D disk->src->vhostuser; + data->chardevAlias =3D qemuDomainGetVhostUserChrAlias(disk->info.alias= ); + + virBufferAddLit(&chardev, "socket"); + virBufferAsprintf(&chardev, ",id=3D%s", data->chardevAlias); + virBufferAddLit(&chardev, ",path=3D"); + virQEMUBuildBufferEscapeComma(&chardev, disk->src->vhostuser->data.nix= .path); + + qemuBuildChrChardevReconnectStr(&chardev, + &disk->src->vhostuser->data.nix.reconn= ect); + + if (!(data->chardevCmd =3D virBufferContentAndReset(&chardev))) + return NULL; + + return g_steal_pointer(&data); +} + + /** * qemuBuildStorageSourceAttachPrepareCommon: * @src: storage source @@ -10378,6 +10429,30 @@ qemuBuildStorageSourceChainAttachPrepareDrive(virD= omainDiskDefPtr disk, } =20 =20 +/** + * qemuBuildStorageSourceChainAttachPrepareChardev: + * @src: disk definition + * + * Prepares qemuBlockStorageSourceChainDataPtr for attaching @disk via -dr= ive. + */ +qemuBlockStorageSourceChainDataPtr +qemuBuildStorageSourceChainAttachPrepareChardev(virDomainDiskDefPtr disk) +{ + g_autoptr(qemuBlockStorageSourceAttachData) elem =3D NULL; + g_autoptr(qemuBlockStorageSourceChainData) data =3D NULL; + + data =3D g_new0(qemuBlockStorageSourceChainData, 1); + + if (!(elem =3D qemuBuildStorageSourceAttachPrepareChardev(disk))) + return NULL; + + if (VIR_APPEND_ELEMENT(data->srcdata, data->nsrcdata, elem) < 0) + return NULL; + + return g_steal_pointer(&data); +} + + static int qemuBuildStorageSourceChainAttachPrepareBlockdevOne(qemuBlockStorageSource= ChainData *data, virStorageSourcePtr sr= c, diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 3cfe6ff3e9..a33fbf6f4e 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -115,6 +115,10 @@ bool qemuDiskBusIsSD(int bus); qemuBlockStorageSourceAttachDataPtr qemuBuildStorageSourceAttachPrepareDrive(virDomainDiskDefPtr disk, virQEMUCapsPtr qemuCaps); + +qemuBlockStorageSourceAttachDataPtr +qemuBuildStorageSourceAttachPrepareChardev(virDomainDiskDefPtr disk); + int qemuBuildStorageSourceAttachPrepareCommon(virStorageSourcePtr src, qemuBlockStorageSourceAttachData= Ptr data, @@ -126,6 +130,10 @@ qemuBuildStorageSourceChainAttachPrepareDrive(virDomai= nDiskDefPtr disk, virQEMUCapsPtr qemuCaps); =20 =20 +qemuBlockStorageSourceChainDataPtr +qemuBuildStorageSourceChainAttachPrepareChardev(virDomainDiskDefPtr disk); + + qemuBlockStorageSourceChainDataPtr qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top, virQEMUCapsPtr qemuCaps); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e60f814e36..f1beb22d06 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10572,6 +10572,11 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr di= sk, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg) { + /* Nothing to prepare as it will use -chardev instead + * of -blockdev/-drive option. */ + if (disk->src->type =3D=3D VIR_STORAGE_TYPE_VHOST_USER) + return 0; + qemuDomainPrepareDiskCachemode(disk); =20 /* set default format for storage pool based disks */ @@ -11062,6 +11067,13 @@ qemuDomainDiskBlockJobIsSupported(virDomainObjPtr = vm, return false; } =20 + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("block jobs are not supported on vhostuser disk '= %s'"), + disk->dst); + return false; + } + return true; } =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ed840a5c8d..69fcd28666 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9821,6 +9821,12 @@ qemuDomainBlockResize(virDomainPtr dom, goto endjob; } =20 + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("block resize is not supported for vhostuser disk= ")); + goto endjob; + } + /* qcow2 and qed must be sized on 512 byte blocks/sectors, * so adjust size if necessary to round up. */ @@ -9913,6 +9919,12 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, goto cleanup; } =20 + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TY= PE_VHOST_USER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("block stats are not supported for vhostuser = disk")); + goto cleanup; + } + if (blockdev && QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) { entryname =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName; } else { @@ -9968,6 +9980,10 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, disk =3D vm->def->disks[i]; entryname =3D disk->info.alias; =20 + /* No stats to report for vhost-user disk */ + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAG= E_TYPE_VHOST_USER) + continue; + if (blockdev && QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) entryname =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName; =20 @@ -10616,6 +10632,12 @@ qemuDomainBlockPeek(virDomainPtr dom, if (!(disk =3D qemuDomainDiskByName(vm->def, path))) goto cleanup; =20 + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("peeking is not supported for vhostuser disk")); + goto cleanup; + } + if (disk->src->format !=3D VIR_STORAGE_FILE_RAW) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("peeking is only supported for disk with 'raw' fo= rmat not '%s'"), @@ -10973,6 +10995,12 @@ qemuDomainGetBlockInfo(virDomainPtr dom, goto endjob; } =20 + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("block info is not supported for vhostuser disk")= ); + goto endjob; + } + if (virStorageSourceIsEmpty(disk->src)) { virReportError(VIR_ERR_INVALID_ARG, _("disk '%s' does not currently have a source assig= ned"), @@ -15851,6 +15879,19 @@ typedef enum { } qemuBlockIoTuneSetFlags; =20 =20 +static bool +qemuDomainDiskBlockIoTuneIsSupported(virStorageSourcePtr src) +{ + if (virStorageSourceGetActualType(src) =3D=3D VIR_STORAGE_TYPE_VHOST_U= SER) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("a block I/O throttling is not supported for vhos= tuser disk")); + return false; + } + + return true; +} + + /* If the user didn't specify bytes limits, inherit previous values; * likewise if the user didn't specify iops limits. */ static int @@ -16219,6 +16260,9 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, if (!(disk =3D qemuDomainDiskByName(def, path))) goto endjob; =20 + if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src)) + goto endjob; + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) { qdevid =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName; @@ -16312,6 +16356,9 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, goto endjob; } =20 + if (!qemuDomainDiskBlockIoTuneIsSupported(conf_disk->src)) + goto endjob; + conf_cur_info =3D qemuDomainFindGroupBlockIoTune(persistentDef, co= nf_disk, &info); =20 if (qemuDomainSetBlockIoTuneDefaults(&conf_info, conf_cur_info, @@ -16412,6 +16459,9 @@ qemuDomainGetBlockIoTune(virDomainPtr dom, if (!(disk =3D qemuDomainDiskByName(def, path))) goto endjob; =20 + if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src)) + goto endjob; + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) { qdevid =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName; @@ -16434,6 +16484,10 @@ qemuDomainGetBlockIoTune(virDomainPtr dom, path); goto endjob; } + + if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src)) + goto endjob; + reply =3D disk->blkdeviotune; =20 /* Group name needs to be copied since qemuMonitorGetBlockIoThrott= le @@ -18364,6 +18418,18 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDef= Ptr disk, params); } =20 + /* vhost-user disk doesn't support getting block stats */ + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + if (qemuDomainGetStatsBlockExportHeader(disk, disk->src, *recordnr, + params) < 0) { + return -1; + } + + (*recordnr)++; + + return 0; + } + for (n =3D disk->src; virStorageSourceIsBacking(n); n =3D n->backingSt= ore) { g_autofree char *alias =3D NULL; =20 @@ -19571,6 +19637,12 @@ qemuDomainSetBlockThreshold(virDomainPtr dom, if (!(src =3D qemuDomainGetStorageSourceByDevstr(dev, vm->def, priv->b= ackup))) goto endjob; =20 + if (virStorageSourceGetActualType(src) =3D=3D VIR_STORAGE_TYPE_VHOST_U= SER) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("setting device threshold is not supported for vh= ostuser disk")); + goto endjob; + } + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && !src->nodestorage && qemuBlockNodeNamesDetect(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 882e5d2384..213be41553 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -714,7 +714,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto cleanup; =20 - if (blockdev) { + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + if (!(data =3D qemuBuildStorageSourceChainAttachPrepareChardev(dis= k))) + goto cleanup; + } else if (blockdev) { if (disk->copy_on_read =3D=3D VIR_TRISTATE_SWITCH_ON) { if (!(corProps =3D qemuBlockStorageGetCopyOnReadProps(disk))) goto cleanup; @@ -4314,8 +4317,13 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, disk->info.alias, vm, vm->def->name); =20 =20 - if (blockdev && - !qemuDiskBusIsSD(disk->bus)) { + if (virStorageSourceGetActualType(disk->src) =3D=3D VIR_STORAGE_TYPE_V= HOST_USER) { + char *chardevAlias =3D qemuDomainGetVhostUserChrAlias(disk->info.a= lias); + + if (!(diskBackend =3D qemuBlockStorageSourceChainDetachPrepareChar= dev(chardevAlias))) + goto cleanup; + } else if (blockdev && + !qemuDiskBusIsSD(disk->bus)) { corAlias =3D g_strdup(diskPriv->nodeCopyOnRead); =20 if (diskPriv->blockjob) { diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index f5016e4d0c..78e80b7919 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2957,6 +2957,19 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskD= ef *disk, return -1; } =20 + if (disk->src->type =3D=3D VIR_STORAGE_TYPE_VHOST_USER) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_BLK)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("vhostuser disk is not supported with this QE= MU binary")); + return -1; + } + + if (qemuValidateDomainDefVhostUserRequireSharedMemory(def, "vhostu= ser", + qemuCaps) < = 0) { + return -1; + } + } + return 0; } =20 diff --git a/tests/qemuxml2argvdata/disk-vhostuser.x86_64-latest.args b/tes= ts/qemuxml2argvdata/disk-vhostuser.x86_64-latest.args new file mode 100644 index 0000000000..b24b2c0b4f --- /dev/null +++ b/tests/qemuxml2argvdata/disk-vhostuser.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/tmp/lib/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=3Dnone \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3DQEMUGuest1,debug-threads=3Don \ +-S \ +-object secret,id=3DmasterKey0,format=3Draw,\ +file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=3Dtcg,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dp= c.ram \ +-cpu qemu64 \ +-m 214 \ +-object memory-backend-memfd,id=3Dpc.ram,share=3Dyes,size=3D224395264 \ +-overcommit mem-lock=3Doff \ +-smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server,nowait \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-no-acpi \ +-boot strict=3Don \ +-device piix3-usb-uhci,id=3Dusb,bus=3Dpci.0,addr=3D0x1.0x2 \ +-chardev socket,id=3Dchr-vu-virtio-disk0,path=3D/tmp/vhost1.sock \ +-device vhost-user-blk-pci,bus=3Dpci.0,addr=3D0x2,chardev=3Dchr-vu-virtio-= disk0,\ +id=3Dvirtio-disk0,bootindex=3D1 \ +-chardev socket,id=3Dchr-vu-virtio-disk1,path=3D/tmp/vhost1.sock,reconnect= =3D10 \ +-device vhost-user-blk-pci,bus=3Dpci.0,addr=3D0x3,chardev=3Dchr-vu-virtio-= disk1,\ +id=3Dvirtio-disk1 \ +-device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x4 \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ +resourcecontrol=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 0f4ec4533c..faa71a7a16 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1268,6 +1268,7 @@ mymain(void) VIR_FREE(driver.config->vxhsTLSx509certdir); DO_TEST("disk-no-boot", NONE); DO_TEST_CAPS_LATEST("disk-nvme"); + DO_TEST_CAPS_LATEST("disk-vhostuser"); DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid", QEMU_CAPS_VIRTIO_SCSI); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-nosupport"); --=20 2.29.2