From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860440; cv=none; d=zohomail.com; s=zohoarc; b=V5PUUUNhdtt1aYNS2JPOubBAO3+ttbkrpMkUHw0JRXeZNVws/XwV9guWxEbToDPxwxs1eVctX83t2e7o6pbxr761FQoPciCQnO251c+7GGvA/p7RKAd/+nbhm3MFJs8fZAX2zegMOD3c2VJ/tvq5UmDwvduib6YGQS4i2eI+Q0Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860440; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=/kWAs2Q9vkMd4SFaDD4i90aUAGbK421uV5qG/sTu914=; b=FYizcmuKbtKsirAFn4PUWjQkf/9m0b8ep5rBNfXj7tsLe75cVvmVGJUaAjq2mTtvNP9iS7vOgp5ZK2wyJaCsdelCxNnLCMI00dSea9Qgq3Ha5LCJtLuKXgOyRo4s3pgoQOq4A6ImiDZH6ve1AHJZqHhcD43CbWjVC2drZJLL5uk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860440375211.277926551478; Mon, 2 Jun 2025 03:34:00 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 48D68135A; Mon, 2 Jun 2025 06:33:59 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 47A4014A9; Mon, 2 Jun 2025 06:31:17 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 66F3FE77; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F3CB8E87 for ; Mon, 2 Jun 2025 06:31:02 -0400 (EDT) Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-632-EsSRnVSnOaC83EWlVrY6lA-1; Mon, 02 Jun 2025 06:31:01 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-450df53d461so16959805e9.1 for ; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d800658csm116668005e9.27.2025.06.02.03.30.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:30:57 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 4C7A1B55DC70 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860262; h=from:from: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; bh=TNIel87zqpg/l1MXRtY1wmMqex6RJFmHae1IDuJ+6cM=; b=FcU9G3oXqmbNKxJp06mDau0aUWCyv9HoydOHtwWc8pAuiKUs6RC4pcmqhBfpw9RYANv7HY DFEiQLlbDKGRc4v02AWZhzr9rDi/jobxPM59/poYuBPcEUjm8wO1tcvpqar9wG+aj5+m4P C80p28rwiKyNYM9MFYq6tiNLKv1dUu8= X-MC-Unique: EsSRnVSnOaC83EWlVrY6lA-1 X-Mimecast-MFC-AGG-ID: EsSRnVSnOaC83EWlVrY6lA_1748860260 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860260; x=1749465060; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TNIel87zqpg/l1MXRtY1wmMqex6RJFmHae1IDuJ+6cM=; b=L8ESMPv+wOL1KV2UTgEhaDtzyjktUXeIq3UUcdS9pgxTrnT/WimThtH11rfnRVH4MC /mzHXZPdwgHBppfVYZ5D55D28cDGECHpDQpA3VQElFnJptriO2PjFzV0hKeB4pM8MOKf zTuncuf/2TU1BOOPZbsciatd209rnJ2udDVzXIT8FON+yyMvGfPL5Zr/py9WUa0qrCmg u/WG7rdqwcC+AehHWBSBfeVp4MtvCsqYA9CJEJL49iV9tfjRiVgaHCu+/2NaElYnhMDS NIpNNALzy6MyfPp1nhWCTjqJL7S27W32RYFFWzZGkmlrdF/jOzJC0q8AnYvvxn3ZFi+0 kzgw== X-Gm-Message-State: AOJu0YxNj/WJVZtcwgfnGbmzQ9zRneQuSjpcENNDrYoTsSeEN1v8gkb3 dVgl9jL8tqeyuolbnqfK0skKF4p5Jxb28FGnk4wGBfzosp/Kn9we2IHyxhFhG5rmHIksIxcTMEY Qain6GeZh3ssmt6yhl55Ake48EldupK5IyqAkxbFQaVM02go1gxF0ZqFUvZRrar4USflRpj+4Av yIz3P43Q3q15dA3SDEQGm+3FCr28R37263qERhEe1kwNk= X-Gm-Gg: ASbGncsH1SFB8/QiiwXuuLb2/xFLPsDnsQCHw8yXe5g3nIihbBaCJGfTiJgI7JJ8ywY MuhdDmDnqzJ/8FDdgrnTucvnhwlosL6jEh0VuiyaqsKp8ptom/pyvfFmpESOZu9vhfJL/Ec+ozZ JQX4bwhVdESO4WdeJqW4T4xZe6EOaH/v/KdCeeo5Im3BGtmgzoJMvbsbgPDxqtqcrV8oCKYVqAo A1/ZwSiQeD36RPgdDdluaWqD9yWjSEPS7mBe5hvZddY4pm2w64l7woxeVSKEtYIkBuNSlm4HK6g 84F36NQUlcsv+oRDOk6Dpr2ifahKE4M= X-Received: by 2002:a05:600c:4e47:b0:43d:fa59:be39 with SMTP id 5b1f17b1804b1-450d8872f48mr91536665e9.33.1748860260029; Mon, 02 Jun 2025 03:31:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFMXuktEFmPc8IkNp/t5smOR66VKAFBGK7yVT9h5UDAHSUXZ9zaJaBx/52Jjq1PDT255cAwQg== X-Received: by 2002:a05:600c:4e47:b0:43d:fa59:be39 with SMTP id 5b1f17b1804b1-450d8872f48mr91536335e9.33.1748860259528; Mon, 02 Jun 2025 03:30:59 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 01/11] docs, conf, schemas: Add support for NVMe controller Date: Mon, 2 Jun 2025 12:30:44 +0200 Message-ID: <20eaead3b70cb782db2dda5730662b08ebea8701.1748860220.git.mkletzan@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: cb9CSS37w5ebJJrM961UH1K3fSZ_UnqnHa8RPsBbWHE_1748860260 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: TTJ3IJBFPOLNI7XPHXIDW5UUNMSV7EPH X-Message-ID-Hash: TTJ3IJBFPOLNI7XPHXIDW5UUNMSV7EPH X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860443147116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- docs/formatdomain.rst | 10 +++++++++ src/bhyve/bhyve_command.c | 1 + src/conf/domain_conf.c | 16 ++++++++++++++ src/conf/domain_conf.h | 6 ++++++ src/conf/schemas/domaincommon.rng | 10 +++++++++ src/conf/virconftypes.h | 2 ++ src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain_address.c | 2 ++ src/qemu/qemu_hotplug.c | 5 +++++ src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 1 + src/vbox/vbox_common.c | 1 + .../genericxml2xmlindata/controller-nvme.xml | 21 +++++++++++++++++++ tests/genericxml2xmltest.c | 2 ++ 14 files changed, 79 insertions(+) create mode 100644 tests/genericxml2xmlindata/controller-nvme.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 8753ee9c23a8..fdc90c61f86d 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4140,6 +4140,10 @@ device hotplug is expected.
+ + + ... + ... ... @@ -4186,6 +4190,12 @@ specific features, such as: specifies maximum number of event channels (PV interrupts) that can be = used by the guest. =20 +``nvme`` + Supported :since:`Since 11.5.0`, the ``nvme`` controller can be used to + support NVMe disks. It has an optional ``serial`` sub-element just like + regular disks do. + + Note: The PowerPC64 "spapr-vio" addresses do not have an associated contro= ller. =20 For controllers that are themselves devices on a PCI or USB bus, an option= al diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index cd1ccf61f3a0..916d699c8030 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -425,6 +425,7 @@ bhyveBuildControllerArgStr(const virDomainDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b3b0bd732955..1b09e25b53b6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -420,6 +420,7 @@ VIR_ENUM_IMPL(virDomainController, "pci", "xenbus", "isa", + "nvme", ); =20 VIR_ENUM_IMPL(virDomainControllerModelPCI, @@ -2563,6 +2564,7 @@ virDomainControllerDefNew(virDomainControllerType typ= e) case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } @@ -2581,6 +2583,9 @@ void virDomainControllerDefFree(virDomainControllerDe= f *def) virDomainDeviceInfoClear(&def->info); g_free(def->virtio); =20 + if (def->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME) + g_free(def->opts.nvmeopts.serial); + g_free(def); } =20 @@ -8784,6 +8789,7 @@ virDomainControllerModelTypeFromString(const virDomai= nControllerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return -1; } @@ -8812,6 +8818,7 @@ virDomainControllerModelTypeToString(virDomainControl= lerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return NULL; } @@ -9048,6 +9055,10 @@ virDomainControllerDefParseXML(virDomainXMLOption *x= mlopt, break; } =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + def->opts.nvmeopts.serial =3D virXPathString("string(./serial)", c= txt); + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: @@ -24039,6 +24050,11 @@ virDomainControllerDefFormat(virBuffer *buf, } break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + virBufferEscapeString(&childBuf, "%s\n", + def->opts.nvmeopts.serial); + break; + case VIR_DOMAIN_CONTROLLER_TYPE_PCI: if (virDomainControllerDefFormatPCI(&childBuf, def, flags) < 0) return -1; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 58b97a2b5490..f184a4b9b774 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -611,6 +611,7 @@ typedef enum { VIR_DOMAIN_CONTROLLER_TYPE_PCI, VIR_DOMAIN_CONTROLLER_TYPE_XENBUS, VIR_DOMAIN_CONTROLLER_TYPE_ISA, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, =20 VIR_DOMAIN_CONTROLLER_TYPE_LAST } virDomainControllerType; @@ -766,6 +767,10 @@ struct _virDomainXenbusControllerOpts { int maxEventChannels; /* -1 =3D=3D undef */ }; =20 +struct _virDomainNVMeControllerOpts { + char *serial; +}; + /* Stores the virtual disk controller configuration */ struct _virDomainControllerDef { virDomainControllerType type; @@ -782,6 +787,7 @@ struct _virDomainControllerDef { virDomainPCIControllerOpts pciopts; virDomainUSBControllerOpts usbopts; virDomainXenbusControllerOpts xenbusopts; + virDomainNVMeControllerOpts nvmeopts; } opts; virDomainDeviceInfo info; virDomainVirtioOptions *virtio; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 5597d5a66baf..029d4ed4ec7a 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -3044,6 +3044,16 @@ + + + nvme + + + + + + + diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index c70437bc05fd..8c6fcdbeaabd 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -276,6 +276,8 @@ typedef struct _virDomainXMLPrivateDataCallbacks virDom= ainXMLPrivateDataCallback =20 typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; =20 +typedef struct _virDomainNVMeControllerOpts virDomainNVMeControllerOpts; + typedef enum { VIR_DOMAIN_DISK_IO_DEFAULT =3D 0, VIR_DOMAIN_DISK_IO_NATIVE, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fec48edfc1da..07963e33b351 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2851,6 +2851,7 @@ qemuBuildControllerDevProps(const virDomainDef *domai= nDef, =20 break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index e89cdee487bc..7bc769fc1934 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -616,6 +616,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, } break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -1919,6 +1920,7 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index e84ad816a0f1..7a1170b2ddd1 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5856,6 +5856,10 @@ qemuDomainDiskControllerIsBusy(virDomainObj *vm, continue; break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + /* nvme is not supported by the qemu driver */ + break; + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: /* xenbus is not supported by the qemu driver */ continue; @@ -5905,6 +5909,7 @@ qemuDomainControllerIsBusy(virDomainObj *vm, case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SATA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: return qemuDomainDiskControllerIsBusy(vm, detach); =20 case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index ed4af9ca8e8c..8150dffac67c 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -429,6 +429,7 @@ qemuDomainControllerDefPostParse(virDomainControllerDef= *cont, case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index e45f63641864..23a4d70b3441 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -4402,6 +4402,7 @@ qemuValidateDomainDeviceDefController(const virDomain= ControllerDef *controller, qemuCaps); break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 349ac832dc0a..6ffe7cc20bde 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -494,6 +494,7 @@ vboxSetStorageController(virDomainControllerDef *contro= ller, case VIR_DOMAIN_CONTROLLER_TYPE_PCI: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("The vbox driver does not support %1$s controlle= r type"), diff --git a/tests/genericxml2xmlindata/controller-nvme.xml b/tests/generic= xml2xmlindata/controller-nvme.xml new file mode 100644 index 000000000000..b2e8556c9d45 --- /dev/null +++ b/tests/genericxml2xmlindata/controller-nvme.xml @@ -0,0 +1,21 @@ + + bar + 00010203-0405-4607-8809-0a0b0c0d0e0f + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + CDEFGAHC + + + diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c index dd26a8589dda..f4e04d84f825 100644 --- a/tests/genericxml2xmltest.c +++ b/tests/genericxml2xmltest.c @@ -231,6 +231,8 @@ mymain(void) =20 DO_TEST("fibrechannel-appid"); =20 + DO_TEST("controller-nvme"); + #define DO_TEST_BACKUP_FULL(name, intrnl) \ do { \ const struct testCompareBackupXMLData data =3D { .testname =3D nam= e, \ --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860316; cv=none; d=zohomail.com; s=zohoarc; b=MK56hngwkUq1EljOoVFU8y1+tlJffrBFRAuYR3BRuLJ3OW2uKNmrnGrxd9+90qV+pPnZZzjMLZrjdfICG84cTQr4jCz2oh9WemiWb8nfXBkdaliqghDAxgA4ssnr41O0Xl17sH9TUFPuTH2fpd2nPNnqSTJpsW7lGGnIGedc7gY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860316; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=k+CDE71taglmMhf72RAMwL8UDaiDdt05MaNswT5otZ4=; b=fUszl3wsFfgweiT2t4SxvYvAokToUZdqYsjq14cZ1p2x9ZuLdotDhPhmv9gBDstYK0X1AOlQwtA/dJ5/JdoOW//+YHCHypvLGLScRgSrKzXTRXvoG1vNR2NXWbPyNss/rfjwim8j90nXQfYzWYuAWPg9710rCdIg+ckXKsq8Nk0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17488603165951013.4453172434734; Mon, 2 Jun 2025 03:31:56 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 818B91085; Mon, 2 Jun 2025 06:31:55 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 1620A10F2; Mon, 2 Jun 2025 06:31:08 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 8D5C6E77; Mon, 2 Jun 2025 06:31:04 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 29D0FE77 for ; Mon, 2 Jun 2025 06:31:02 -0400 (EDT) Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-zyrXXYWrPbaZfIE_kBoPPA-1; Mon, 02 Jun 2025 06:31:00 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-451deff247cso2280225e9.1 for ; Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d8000e3esm116758025e9.22.2025.06.02.03.30.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:30:57 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 57DA9B55DC73 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860261; h=from:from: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; bh=SG2TAULP+rgVRsnjFoNBnQJRSpAN/XOkTEHdBfNs7xs=; b=cIzdoXIFxPAo1cHbwF1KTGDS8Az8W546wLFP31SRXnLn4NReqm2Z62HmeU7cNTRqz1pZrq cJlSJHvIbMT+AYjcE4RbVekFATuBSAONwwxBExpyJfEwu8FJv7Qoq4bXmx11RSkWNDpfat o3DyzQkJpUT/3FCiwjvEO66l1/gmQJE= X-MC-Unique: zyrXXYWrPbaZfIE_kBoPPA-1 X-Mimecast-MFC-AGG-ID: zyrXXYWrPbaZfIE_kBoPPA_1748860259 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860259; x=1749465059; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SG2TAULP+rgVRsnjFoNBnQJRSpAN/XOkTEHdBfNs7xs=; b=APECxjPhHaZPeTLqs4XMsOjiAwrNzMRlBF/cYQeILv/c3CbofBzvDu6X8NnPp8iKi+ 3TtXhyZdltR3YPJ9ycy9Ucg+vu6IpTaL2GPDZrrvGgY8xSMdpaEslYFJA6SthCYzuHKG 6VI4WRvHP3KW/UUpPzsZLQdFBjCUrqKvWwBzvfBwvCd9eR+FGF/hWG5BvNH4z23PhlQK l8s/RUqopUf4hd5oqS6WiqfLP7xBqsUqomjS2YTppeeMpcImQzNY7Pxjl1km3JH0VpaX bxU3MulYDNUrBYja/hIlsJZ/4z9P7jyE7Yk0/DIi0Z5WC7Wl0BF8uct30KHRf52jFcxK 4F8A== X-Gm-Message-State: AOJu0YwWr9azG/8w+EcygAz0E1MBrCZi0lDJKaXxM3BA+oA3iG1OrsmO ZHruZmsVZsm1LFCsz6B2+4ZfGfvDo0bTRu1soxodb7jBYm/K9l1XFaHJQqmvuNfELq6y8tHxkxU 10jqJSuA4GUDfHkgFRF5HzJORdTwRSMuoWV4rHdUIIxrBEiZm0WMEEQtrMPiGNiQQ3NM2au6ywf y4aKtWRv8SzJj33LytBmD/GjukqAkuNXEYvTn3dy4BjtQ= X-Gm-Gg: ASbGncu7HF9Qzs9DI/j5cM6kM770gF2VmJxt308WZ/2Ds4NVSBKv1lHWGTSc3R1s24C 6/X0ugEQT3Zl2G4IPAQvJpGfkGT5WFSrgQZLGqkzAuNEiquU5uRJ9sKI6aBl4Z2xEOYyhP8X//K dTb45VND6PIuursibMgJ8CuKgHlRUGZg3fYvJ9RdCvHa9IEuGGfa5QyE5ujGwij49XwLFsLBtkL ZTpVv6zPy7YWypXKwaZ06J6PxaXvuCcfHI4bJIA32CcLiCWBPkrhENv7STXRvyXtWJ5qg3DbS4k vhx0F7tdbYmpM8MJ++Bs X-Received: by 2002:a05:600c:810c:b0:442:cd12:c68a with SMTP id 5b1f17b1804b1-450d6b356bfmr112929955e9.1.1748860259008; Mon, 02 Jun 2025 03:30:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHvi/CBJcs8DFt0HvHvTbS5u1PtVmRxtZNbiq+qwVuYj41wyD2kjQCe5pOHhdz9B8er0WnGxw== X-Received: by 2002:a05:600c:810c:b0:442:cd12:c68a with SMTP id 5b1f17b1804b1-450d6b356bfmr112929625e9.1.1748860258465; Mon, 02 Jun 2025 03:30:58 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 02/11] util: Add support for parsing nvmeXnY(pZ) strings Date: Mon, 2 Jun 2025 12:30:45 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jfO4tF4ut5vE4UOq3SF-5i1z_8dK1s7MHbgCycZ8Nhk_1748860259 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3GX32HHHHH7MXU73OLIIDMEBHY7WIXEM X-Message-ID-Hash: 3GX32HHHHH7MXU73OLIIDMEBHY7WIXEM X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860320784116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander We do not guarantee that the disk names will be the same in guest as they are in the XML, but that should not stop us from trying to be consistent with the naming. And since we use the same naming as the linux kernel does, let's stick with it with nvme drives too. Signed-off-by: Martin Kletzander Reviewed-by: J=C3=A1n Tomko --- src/libxl/libxl_driver.c | 2 +- src/qemu/qemu_validate.c | 2 +- src/util/virutil.c | 94 +++++++++++++++++++++++++++++++++++++--- src/util/virutil.h | 7 ++- src/vbox/vbox_common.c | 2 +- src/vmx/vmx.c | 2 +- src/vz/vz_sdk.c | 6 +-- tests/utiltest.c | 38 +++++++++++----- 8 files changed, 126 insertions(+), 27 deletions(-) diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 0fb256e5c06d..308c0372aaf4 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -5440,7 +5440,7 @@ libxlDiskPathToID(const char *virtpath) /* Find any disk prefixes we know about */ for (i =3D 0; i < G_N_ELEMENTS(drive_prefix); i++) { if (STRPREFIX(virtpath, drive_prefix[i]) && - !virDiskNameParse(virtpath, &disk, &partition)) { + !virDiskNameParse(virtpath, NULL, &disk, &partition)) { fmt =3D i; break; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 23a4d70b3441..8acc44747456 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3445,7 +3445,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDe= f *disk, return -1; } =20 - if (virDiskNameParse(disk->dst, &idx, &partition) < 0) { + if (virDiskNameParse(disk->dst, NULL, &idx, &partition) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("invalid disk target '%1$s'"), disk->dst); return -1; diff --git a/src/util/virutil.c b/src/util/virutil.c index 2abcb282fe52..fb64237692bb 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -314,15 +314,82 @@ virFormatIntPretty(unsigned long long val, } =20 =20 +static int +virDiskNameParseNvme(const char *name, int *controller, int *disk, int *pa= rtition) +{ + int ctrl =3D 0; + int ns =3D 0; + int part =3D 0; + char *end_ptr =3D NULL; + const char *tmp =3D STRSKIP(name, "nvme"); + + if (!controller) + return -1; + + if (!tmp) + return -1; + + if (virStrToLong_i(tmp, &end_ptr, 10, &ctrl) < 0) + return -1; + + if (*end_ptr !=3D 'n') + return -1; + + if (ctrl < 0) + return -1; + + tmp =3D end_ptr + 1; + + if (virStrToLong_i(tmp, &end_ptr, 10, &ns) < 0) + return -1; + + if (*end_ptr !=3D '\0' && *end_ptr !=3D 'p') + return -1; + + /* NSIDs start from 1, but we need to map them to [0..] for the contro= ller + * address. */ + if (ns < 1) + return -1; + ns--; + + if (partition) { + *partition =3D 0; + + if (*end_ptr !=3D '\0') { + tmp =3D end_ptr + 1; + + if (virStrToLong_i(tmp, NULL, 10, &part) < 0) + return -1; + + /* Partitions on NVMe disks also from 1 */ + if (part < 1) + return -1; + + *partition =3D part - 1; + } + } + + *controller =3D ctrl; + *disk =3D ns; + + return 0; +} + + /* Translates a device name of the form (regex) /^[fhv]d[a-z]+[0-9]*$/ - * into the corresponding index and partition number - * (e.g. sda0 =3D> (0,0), hdz2 =3D> (25,2), vdaa12 =3D> (26,12)) + * or nvme[0-9]+n[0-9]+(p[0-9]+) for NVMe devices + * into the corresponding nvme controller (see below), index and partition= number + * (e.g. sda0 =3D> (0,0,0), hdz2 =3D> (0,25,2), vdaa12 =3D> (0,26,12)) as = these do not + * support namespaces and controller is calculated from the disk index + * for nvme disks disks: (nvme1n2p3 =3D> (1, 1, 2) as nvme namespaces and + * partitions are numbered from 1 and not 0). * @param name The name of the device + * @param nvme_ctrl The disk namespace to be returned * @param disk The disk index to be returned * @param partition The partition index to be returned * @return 0 on success, or -1 on failure */ -int virDiskNameParse(const char *name, int *disk, int *partition) +int virDiskNameParse(const char *name, int *nvme_ctrl, int *disk, int *par= tition) { const char *ptr =3D NULL; char *rem; @@ -331,6 +398,12 @@ int virDiskNameParse(const char *name, int *disk, int = *partition) size_t i; size_t n_digits; =20 + if (STRPREFIX(name, "nvme")) + return virDiskNameParseNvme(name, nvme_ctrl, disk, partition); + + if (nvme_ctrl) + *nvme_ctrl =3D 0; + for (i =3D 0; i < G_N_ELEMENTS(drive_prefix); i++) { if (STRPREFIX(name, drive_prefix[i])) { ptr =3D name + strlen(drive_prefix[i]); @@ -381,6 +454,8 @@ int virDiskNameParse(const char *name, int *disk, int *= partition) /* Translates a device name of the form (regex) /^[fhv]d[a-z]+[0-9]*$/ * into the corresponding index (e.g. sda =3D> 0, hdz =3D> 25, vdaa =3D> 2= 6) * Note that any trailing string of digits is simply ignored. + * Since NVMe disks require controller devices, this function should not b= e used + * for nvme* names unless the caller does not need to know then controller= index * @param name The name of the device * @return name's index, or -1 on failure */ @@ -388,17 +463,24 @@ int virDiskNameToIndex(const char *name) { int idx; =20 - if (virDiskNameParse(name, &idx, NULL) < 0) + if (virDiskNameParse(name, NULL, &idx, NULL) < 0) idx =3D -1; =20 return idx; } =20 -char *virIndexToDiskName(unsigned int idx, const char *prefix) +char *virIndexToDiskName(unsigned int nvme_ctrl, + unsigned int idx, + const char *prefix) { - GString *str =3D g_string_new(NULL); + GString *str =3D NULL; long long ctr; =20 + if (STREQ_NULLABLE(prefix, "nvme")) + return g_strdup_printf("nvme%dn%d", nvme_ctrl, idx + 1); + + str =3D g_string_new(NULL); + for (ctr =3D idx; ctr >=3D 0; ctr =3D ctr / 26 - 1) g_string_prepend_c(str, 'a' + (ctr % 26)); =20 diff --git a/src/util/virutil.h b/src/util/virutil.h index 6c07aa42c8b5..ca6fd95363b5 100644 --- a/src/util/virutil.h +++ b/src/util/virutil.h @@ -51,9 +51,12 @@ unsigned long long virFormatIntPretty(unsigned long long val, const char **unit); =20 -int virDiskNameParse(const char *name, int *disk, int *partition); +int virDiskNameParse(const char *name, int *nvme_ctrl, + int *disk, int *partition); int virDiskNameToIndex(const char* str); -char *virIndexToDiskName(unsigned int idx, const char *prefix); +char *virIndexToDiskName(unsigned int nvme_ctrl, + unsigned int idx, + const char *prefix); =20 /* No-op workarounds for functionality missing in mingw. */ #ifndef WITH_GETUID diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 6ffe7cc20bde..95c70671a752 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -447,7 +447,7 @@ vboxGenerateMediumName(PRUint32 storageBus, return NULL; } =20 - name =3D virIndexToDiskName(total, prefix); + name =3D virIndexToDiskName(0, total, prefix); =20 return name; } diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 0dd03c1a88e7..4a9ad11b42c4 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2257,7 +2257,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, return -1; } =20 - def->dst =3D virIndexToDiskName(idx, prefix); + def->dst =3D virIndexToDiskName(0, idx, prefix); return 0; } =20 diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index c2226c409dee..684b76ffa057 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -596,16 +596,16 @@ prlsdkGetDiskId(PRL_HANDLE disk, virDomainDiskBus *bu= s, char **dst) switch (ifType) { case PMS_IDE_DEVICE: *bus =3D VIR_DOMAIN_DISK_BUS_IDE; - *dst =3D virIndexToDiskName(pos, "hd"); + *dst =3D virIndexToDiskName(0, pos, "hd"); break; case PMS_SCSI_DEVICE: case PMS_UNKNOWN_DEVICE: *bus =3D VIR_DOMAIN_DISK_BUS_SCSI; - *dst =3D virIndexToDiskName(pos, "sd"); + *dst =3D virIndexToDiskName(0, pos, "sd"); break; case PMS_SATA_DEVICE: *bus =3D VIR_DOMAIN_DISK_BUS_SATA; - *dst =3D virIndexToDiskName(pos, "sd"); + *dst =3D virIndexToDiskName(0, pos, "sd"); break; default: virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/tests/utiltest.c b/tests/utiltest.c index b30bfbed70fb..0bef502a84c8 100644 --- a/tests/utiltest.c +++ b/tests/utiltest.c @@ -22,19 +22,25 @@ static const char* diskNames[] =3D { struct testDiskName { const char *name; + int ctrl; int idx; int partition; }; =20 static struct testDiskName diskNamesPart[] =3D { - {"sda0", 0, 0}, - {"sdb10", 1, 10}, - {"sdc2147483647", 2, 2147483647}, + {"sda", 0, 0, 0}, + {"sda0", 0, 0, 0}, + {"sdb10", 0, 1, 10}, + {"sdc2147483647", 0, 2, 2147483647}, + {"nvme0n1", 0, 0, 0}, + {"nvme0n1p1", 0, 0, 0}, + {"nvme1n2p3", 1, 1, 2}, }; =20 static const char* diskNamesInvalid[] =3D { "sda00", "sda01", "sdb-1", - "vd2" + "vd2", + "nvme0n0", "nvme0n1p0", }; =20 static int @@ -45,7 +51,7 @@ testIndexToDiskName(const void *data G_GNUC_UNUSED) for (i =3D 0; i < G_N_ELEMENTS(diskNames); ++i) { g_autofree char *diskName =3D NULL; =20 - diskName =3D virIndexToDiskName(i, "sd"); + diskName =3D virIndexToDiskName(0, i, "sd"); =20 if (virTestCompareToString(diskNames[i], diskName) < 0) { return -1; @@ -66,7 +72,7 @@ testDiskNameToIndex(const void *data G_GNUC_UNUSED) for (i =3D 0; i < 100000; ++i) { g_autofree char *diskName =3D NULL; =20 - diskName =3D virIndexToDiskName(i, "sd"); + diskName =3D virIndexToDiskName(0, i, "sd"); idx =3D virDiskNameToIndex(diskName); =20 if (idx < 0 || idx !=3D i) { @@ -85,30 +91,38 @@ static int testDiskNameParse(const void *data G_GNUC_UNUSED) { size_t i; + int nvme_ctrl; int idx; int partition; struct testDiskName *disk =3D NULL; =20 for (i =3D 0; i < G_N_ELEMENTS(diskNamesPart); ++i) { disk =3D &diskNamesPart[i]; - if (virDiskNameParse(disk->name, &idx, &partition)) + partition =3D 0; + if (virDiskNameParse(disk->name, &nvme_ctrl, &idx, &partition)) return -1; =20 + if (disk->ctrl !=3D nvme_ctrl) { + VIR_TEST_DEBUG("\nExpect NVMe controller [%d]", disk->ctrl); + VIR_TEST_DEBUG("Actual NVMe controller [%d]", nvme_ctrl); + return -1; + } + if (disk->idx !=3D idx) { - VIR_TEST_DEBUG("\nExpect [%d]", disk->idx); - VIR_TEST_DEBUG("Actual [%d]", idx); + VIR_TEST_DEBUG("\nExpect index [%d]", disk->idx); + VIR_TEST_DEBUG("Actual index [%d]", idx); return -1; } =20 if (disk->partition !=3D partition) { - VIR_TEST_DEBUG("\nExpect [%d]", disk->partition); - VIR_TEST_DEBUG("Actual [%d]", partition); + VIR_TEST_DEBUG("\nExpect partition [%d]", disk->partition); + VIR_TEST_DEBUG("Actual partition [%d]", partition); return -1; } } =20 for (i =3D 0; i < G_N_ELEMENTS(diskNamesInvalid); ++i) { - if (!virDiskNameParse(diskNamesInvalid[i], &idx, &partition)) { + if (!virDiskNameParse(diskNamesInvalid[i], &nvme_ctrl, &idx, &part= ition)) { VIR_TEST_DEBUG("Should Fail [%s]", diskNamesInvalid[i]); return -1; } --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860401; cv=none; d=zohomail.com; s=zohoarc; b=AJURUTRgdrTap/aY/++vjE4Hwaz+GEuT9Aw+Mo+obxm0Mo+buk0JQWD51TApzDoBpPWXBR/mmdkkKWyiSbGlz/bk4exUd+2VNkG/anQn5+uYBTb6DxMaF6oIJGqnD54cSubtQU3+KqKfkPvvYUnmdriYM0WUULjc0e167pOe0/I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860401; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=CF0kxAE908rKa17Q4A8mY0j8pKOHfw6IHJq0kNo/gI4=; b=ZtgxeTC+mXYAhDk7PesMe4wc6nfpN4UNvkR3wi2dJeorEJUd781gW1jZGKg64XiihU+PHGSGCRhzl1BeK+p8F0MKeO+DQfI4k1JNGHrZGMu7H8eQDV1rKntn1nSOMerIm2O7ufxFInSxa68cFNj9+x3LjkQiDwGSPVsK6q6Gk7U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860401003387.9527324957645; Mon, 2 Jun 2025 03:33:21 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id F1F2D14F3; Mon, 2 Jun 2025 06:33:19 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6CF611481; Mon, 2 Jun 2025 06:31:14 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 157DFE77; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 125C9E8C for ; Mon, 2 Jun 2025 06:31:03 -0400 (EDT) Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-455-2JpA-Qm1OJeSZP_ErAxxYA-1; Mon, 02 Jun 2025 06:31:01 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-442f90418b0so22196485e9.2 for ; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d7f0803fsm85770355e9.1.2025.06.02.03.30.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:30:57 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 63AB4B55DC75 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860262; h=from:from: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; bh=yMk9/AjSlzY1CejobW8L0mEyJGKyg7OFJBEkAEp4ooM=; b=GMF0/bA/ZzhZR5Vh5ENZcmhk2jZoyqSOCM0118Peqz3zZ7NwL/sC4Y2AL6ZOvzkMdJUpWf WbaMQHwIDmFxUJe7OKIK2zOoa/F0oo+NrItL7oRb93fmeu6yaX+sCtM2JFcdesZBzXx/zr 9yH8RN+IHGVDOnj4ZRA9hVsUJNeHLws= X-MC-Unique: 2JpA-Qm1OJeSZP_ErAxxYA-1 X-Mimecast-MFC-AGG-ID: 2JpA-Qm1OJeSZP_ErAxxYA_1748860260 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860260; x=1749465060; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yMk9/AjSlzY1CejobW8L0mEyJGKyg7OFJBEkAEp4ooM=; b=INz6nozr3veR9lPOThABfzb2dPi7i1bXKgoeRpxwzwRTddEh7Fct60JlWo/pbX+szq thiPUzKjNEXwDxkRrl2i8Q1esgYTZsIv2Hm3aJ+C11GVbk5ruYGeCECAeORm5suJHMOx pyLa6dU9g4Lt6YHgCgFgi6B+WFjMsaMv3zJ7cK5QS4otb+DejDhywNAINGy0H9KVggM0 DVsWuWu3kP1d3zlAjOqy8Db1LJOc3lit4gJGrySdfEGwWvCgwdA/ohCteagHVg3PEtWT KqMKfJhfPzbQghIZo0vuPshsHElSg83bUEAzt2toxmH9BI2OP7RQdQBFjqVaH8Ijt2pt qKQQ== X-Gm-Message-State: AOJu0YxCmaH9EvbwGMMit0onfcLMoeJg+HRBrKof18Kyipf1TL5Vrwya If3wjhzA1sbQyDyvUJHYeZhcl/R5Vqwkg5bfyp+icC3Z9Yu9y9b8em65xa+Z8RqYOtelSokjjLk Yfe0QBv8vZzCTcD7IUTB1sbk7VR5ooLKDpYwJUlT4WhTyrqBbB/5ErvT+SzYkqqlQqmIQkxqehv RG+UONBhp9G0bvHePGSt1rM9AMnvsBZO7L1cgrXzsoJ7U= X-Gm-Gg: ASbGncsRLfpip/vN5sfnMmwmi6MFWaIhH/NwQoYgPa5YPuLqm5CC9qhVFv4ONigZnlt WEIcK8uIs0alUn6DjnkavWCpXIhGwF2s544IO3LzUNFIwcvnv1XCY1Ky4R8oz9O/wQOc989qeUq CRpocp6wKAL7/QfDjZ2Uh85w/hLq9V2HCV9gMLZy+/kx4X/I3Enl4VipO0MKFtVmLnYAuRgh9X8 JEDslImLjt3lHbhPVXS1ofraEbYzdK3HBRLB3xPXq0GjHFydAUa951GU0wQtxTgrppoAqZ6pXsL vvEA2jc1Af0X3E3k0sey X-Received: by 2002:a05:600c:1d81:b0:442:e03b:589d with SMTP id 5b1f17b1804b1-4511edf2931mr58483245e9.24.1748860260341; Mon, 02 Jun 2025 03:31:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEp6GRlCkapSf7kd60SK/Gqhl8QkPaomUHpO2EF4A+wU6y/qtyjtH3KzjtPIayJQzJJWWbbVQ== X-Received: by 2002:a05:600c:1d81:b0:442:e03b:589d with SMTP id 5b1f17b1804b1-4511edf2931mr58483015e9.24.1748860259963; Mon, 02 Jun 2025 03:30:59 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 03/11] conf: Add virDomainDeviceFindNvmeController Date: Mon, 2 Jun 2025 12:30:46 +0200 Message-ID: <29473ce35c59bddbe7195be6822314d90fe4ddc8.1748860220.git.mkletzan@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: CfnYQDcb-RaY_AUo9ZZx4sh8rQW57ea4PqPgakIbbFQ_1748860260 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: QN2T2CT6GBUI7ZOTQVSUH2MJNS5CIJMA X-Message-ID-Hash: QN2T2CT6GBUI7ZOTQVSUH2MJNS5CIJMA X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860402364116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Same as for the SCSI controller, but this time for NVMe, will be used later to do some post parse modifications. Signed-off-by: Martin Kletzander Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_conf.c | 17 +++++++++++++++++ src/conf/domain_conf.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1b09e25b53b6..c046f5e7cbe5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6791,6 +6791,23 @@ virDomainDeviceFindSCSIController(const virDomainDef= *def, return NULL; } =20 + +virDomainControllerDef * +virDomainDeviceFindNvmeController(const virDomainDef *def, + const virDomainDeviceDriveAddress *addr) +{ + size_t i; + + for (i =3D 0; i < def->ncontrollers; i++) { + if (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_NV= ME && + def->controllers[i]->idx =3D=3D addr->controller) + return def->controllers[i]; + } + + return NULL; +} + + int virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED, virDomainDiskDef *def, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f184a4b9b774..c54e4759a783 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3700,6 +3700,9 @@ void virDomainDiskSetFormat(virDomainDiskDef *def, in= t format); virDomainControllerDef * virDomainDeviceFindSCSIController(const virDomainDef *def, const virDomainDeviceDriveAddress *addr); +virDomainControllerDef * +virDomainDeviceFindNvmeController(const virDomainDef *def, + const virDomainDeviceDriveAddress *addr); virDomainControllerDef *virDomainControllerDefNew(virDomainControllerType = type); void virDomainControllerDefFree(virDomainControllerDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainControllerDef, virDomainControllerD= efFree); --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860600; cv=none; d=zohomail.com; s=zohoarc; b=LaK3Uece9LYtQqErA7ZAeOTF9mkpG2Maax+CYNPbtd+Hn6gE/7ANSvHdIrCT1kZOUq2tuSIpEWz0tgHmtut8ZrsWGZV9mZyEMG7aphXTxPfgWmFgTczllMFOzEkcI7b4hwJF9WsPTeRSTF/aE26jyLIfavWueTyowfsNn7xF9cw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860600; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=dqqpb0j7IVAHvezCSZRR1dLhVQibz9KL8oPCdv0BEpI=; b=am5rEXoScGjNw+YsqdnaXS0AamUk14lMHe2bvl7iehJOE6tYyl5WRvSRHcw7GeCOVl8pTKCjHsY2zpqUwrk9M40VztqCirCgA9E4PPP0JqxEVIM/SpOoV4rgMLpTd70w4Qyl2Gjeq1ch7acQsZ/OsdYZGW/jpsE2YJBwBUZm6tM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860600253431.7169179515513; Mon, 2 Jun 2025 03:36:40 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 4EC6213DC; Mon, 2 Jun 2025 06:36:39 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id F165314F0; Mon, 2 Jun 2025 06:31:25 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id CE5E6E7A; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E38391083 for ; Mon, 2 Jun 2025 06:31:03 -0400 (EDT) Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-693-kMavpO2kPIOJ0o_9XsZcUg-1; Mon, 02 Jun 2025 06:31:02 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a4f6ba526eso2071218f8f.1 for ; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d7f8ed1bsm121516705e9.8.2025.06.02.03.30.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:30:58 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 70994B55DC76 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860263; h=from:from: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; bh=jFcmBF9tYEGhFFxfsxig44L74ZpnxWn3O8SqcqivFjA=; b=RLBLmqrKfUp7JS6NuodsT9bixHJovw0bvjaHdIW5nkRa17kBLtvuZrAdLJ/r/UGayZVc5h 1Lzb7VNT7z9n1spMIUKZgDaizSnX4FASfmADvhRZtDNbcnDxMSnUIR0KhfhU07oVtktJ5Q W88x6pnb6pvCdagk7k61vWl7JBI7SPY= X-MC-Unique: kMavpO2kPIOJ0o_9XsZcUg-1 X-Mimecast-MFC-AGG-ID: kMavpO2kPIOJ0o_9XsZcUg_1748860261 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860261; x=1749465061; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jFcmBF9tYEGhFFxfsxig44L74ZpnxWn3O8SqcqivFjA=; b=DR4Wk70locKtutpKJlymvT3qP/R0MlYdnSSiEZImDuIzUBJ9z3pT+5ta4+tYOrbuiP hASY93Z0OkoE6TxHlTmbkTJsjMbj6GIS3GeDAuvLFf0kbt2eBdrwUhgXljscpVhwmQJG ZAGDtTEHhrBIZI1tUSoCYVo03b2Kfq1ks9IVY0KiRoNbdNA3uFt9YxsSs3SpDUGPOeXI mmgKP2Ggy8Z/bf0aLDz26AhKFqXb/iKQEDUVz3wGUAO5gZTQXubpGeQUshQjelRr4u9m Y6Zpi3jH2HcDZsBxj/2f/5YaJgKMiGYywXvPXayJsk791qZ5CNOs6imAULH0/6Ydc/ZV vUrQ== X-Gm-Message-State: AOJu0YwzNDDriqbA1XOeCHTDEXcjR1AG+rkFmquSf0SwQhQe+RJ4rhl1 NIOa/RYhrgHL8EthB3jTCPOQsbM2KIe+HV8jPWr2xS7iaE1oulcS4xSDIhL0/ydwNNrtmSQubqH J6kCAy0d/n6cNJ1uXRgPF1y61IuK1hhYi0fhyWZ/tE0o/+zLoqoHJySQSjU7J3nPD0gBm0MUfIe EEEN8rPY/lp/i59k2NUifyyJOFB+lD4DKoXVs+tk5NDFw= X-Gm-Gg: ASbGnctp+J3s7JBKIzzmjOVSZJKt2w3cs8Rp8NfsSYOIIe/9DnjUDP2f+MQcHoeQUER r7YNfFQ3GtZVsE74q9+KeI15bMzAyF6H91eQ23C7x96haDTWT9stmnK2ARYpzp/xQ1fuOwe2Eyd OGFITgoEhS+hX00ptDqDFDv1o5nSBThJhvf+x0YwVX2NK+VeA7h5BulOYFLQnpxonIREijieebt T+bn/ci9uD14td3a1y9Plup1eHqzt9C/BP1RDrmLu/PjuL/IamH+3fnRvb0014tBi0AWZcD88kq IeqK3XOd80JycXHlQIKQ9f4kpCc8LdU= X-Received: by 2002:a5d:5f50:0:b0:3a4:d994:be4b with SMTP id ffacd0b85a97d-3a4f89a47a7mr9643268f8f.1.1748860261125; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFRPuPsthvQDXGpDE1HF+qcBCbIakIKW3inHtkJZgqIdbvzQIiBZFam+DgEVMx77kDxwxLZwA== X-Received: by 2002:a5d:5f50:0:b0:3a4:d994:be4b with SMTP id ffacd0b85a97d-3a4f89a47a7mr9643232f8f.1.1748860260446; Mon, 02 Jun 2025 03:31:00 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 04/11] docs, conf, schemas: Add support for NVMe disks Date: Mon, 2 Jun 2025 12:30:47 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: gZEHmjTCUUyTZxGPx-i6XNGKtharhxt658IzydygC_4_1748860261 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: UQ2YLRO4I2CT67B7FK55IFAOAFWGXIQX X-Message-ID-Hash: UQ2YLRO4I2CT67B7FK55IFAOAFWGXIQX X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860601415116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander NVMe disks are essentially a namespace of an NVMe controller, but to make it easier for the users to just add a disk, the necessary details like adding the proper controller, setting the serial number for the controller based on the disk, are done automatically. Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- docs/formatdomain.rst | 9 ++- src/conf/domain_conf.c | 63 +++++++++++++++++-- src/conf/domain_conf.h | 1 + src/conf/domain_postparse.c | 2 + src/conf/domain_validate.c | 4 +- src/conf/schemas/domaincommon.rng | 12 +++- src/hyperv/hyperv_driver.c | 2 + src/qemu/qemu_alias.c | 1 + src/qemu/qemu_command.c | 2 + src/qemu/qemu_domain_address.c | 1 + src/qemu/qemu_hotplug.c | 2 + src/qemu/qemu_validate.c | 7 ++- src/test/test_driver.c | 2 + src/vbox/vbox_common.c | 1 + src/vmx/vmx.c | 1 + .../disk-nvme-invalid-serials.xml | 29 +++++++++ tests/genericxml2xmlindata/disk-nvme.xml | 32 ++++++++++ tests/genericxml2xmloutdata/disk-nvme.xml | 38 +++++++++++ tests/genericxml2xmltest.c | 2 + 19 files changed, 199 insertions(+), 12 deletions(-) create mode 100644 tests/genericxml2xmlindata/disk-nvme-invalid-serials.xml create mode 100644 tests/genericxml2xmlindata/disk-nvme.xml create mode 100644 tests/genericxml2xmloutdata/disk-nvme.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index fdc90c61f86d..9f3d09ba1e32 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -2824,7 +2824,7 @@ paravirtualized driver is specified via the ``disk`` = element. - + @@ -3313,7 +3313,8 @@ paravirtualized driver is specified via the ``disk`` = element. name in the guest OS. Treat it as a device ordering hint. The optional ``bus`` attribute specifies the type of disk device to emulate; possible values are driver specific, with typical values being "ide", "scsi", - "virtio", "xen", "usb", "sata", or "sd" :since:`"sd" since 1.1.2`. If + "virtio", "xen", "usb", "sata", "sd", or "nvme" + :since:`"sd" since 1.1.2, "nvme" since 11.5.0`. If omitted, the bus type is inferred from the style of the device name (e.= g. a device named 'sda' will typically be exported using a SCSI bus). The op= tional attribute ``tray`` indicates the tray status of the removable disks (i.= e. @@ -3651,7 +3652,9 @@ paravirtualized driver is specified via the ``disk`` = element. If present, this specify serial number of virtual hard drive. For examp= le, it may look like ``WD-WMAP9A966149``. Not supported for scsi-block devices, that is those using disk ``type`` 'block' using - ``device`` 'lun' on ``bus`` 'scsi'. :since:`Since 0.7.1` + ``device`` 'lun' on ``bus`` 'scsi'. Also not supported for multiple NVMe + devices on the same controller since those have serial number per contr= oller + and not per disk. :since:`Since 0.7.1` =20 Note that depending on hypervisor and device type the serial number may= be truncated silently. IDE/SATA devices are commonly limited to 20 charact= ers. diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c046f5e7cbe5..f3a118e8fc8a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -372,6 +372,7 @@ VIR_ENUM_IMPL(virDomainDiskBus, "uml", "sata", "sd", + "nvme", ); =20 VIR_ENUM_IMPL(virDomainDiskCache, @@ -6813,8 +6814,10 @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xm= lopt G_GNUC_UNUSED, virDomainDiskDef *def, const virDomainDef *vmdef) { - int idx =3D virDiskNameToIndex(def->dst); - if (idx < 0) { + int idx =3D 0; + int nvme_ctrl =3D 0; + + if (virDiskNameParse(def->dst, &nvme_ctrl, &idx, NULL) < 0) { virReportError(VIR_ERR_XML_ERROR, _("Unknown disk name '%1$s' and no address specifie= d"), def->dst); @@ -6891,6 +6894,13 @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xm= lopt G_GNUC_UNUSED, def->info.addr.drive.unit =3D idx % 2; break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: + def->info.type =3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE; + def->info.addr.drive.controller =3D nvme_ctrl; + def->info.addr.drive.bus =3D 0; + def->info.addr.drive.unit =3D idx; + break; + case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: @@ -15026,6 +15036,10 @@ virDomainDiskControllerMatch(int controller_type, = int disk_bus) disk_bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA) return true; =20 + if (controller_type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME && + disk_bus =3D=3D VIR_DOMAIN_DISK_BUS_NVME) + return true; + return false; } =20 @@ -22675,6 +22689,36 @@ virDomainDefMaybeAddSmartcardController(virDomainD= ef *def) } } =20 +static int +virDomainDefMaybeAssignNvmeControllerSerials(virDomainDef *def) +{ + size_t i =3D 0; + + for (i =3D 0; i < def->ndisks; i++) { + virDomainDiskDef *disk =3D def->disks[i]; + virDomainControllerDef *ctrl =3D NULL; + + if (!disk->serial || + disk->bus !=3D VIR_DOMAIN_DISK_BUS_NVME || + def->disks[i]->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_D= RIVE) + continue; + + ctrl =3D virDomainDeviceFindNvmeController(def, &disk->info.addr.d= rive); + if (ctrl) { + if (!ctrl->opts.nvmeopts.serial) { + ctrl->opts.nvmeopts.serial =3D g_strdup(disk->serial); + } else if (STRNEQ_NULLABLE(disk->serial, ctrl->opts.nvmeopts.s= erial)) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("Conflicting NVME disk serial number, all= disks on a controller must have the same serial number as the controller i= tself")); + return -1; + } + } + } + + return 0; +} + + /* * Based on the declared
info for any devices, * add necessary drive controllers which are not already present @@ -22692,6 +22736,8 @@ virDomainDefAddImplicitControllers(virDomainDef *de= f) VIR_DOMAIN_DISK_BUS_IDE); virDomainDefAddDiskControllersForType(def, VIR_DOMAIN_CONTROLLER_TYPE_= SATA, VIR_DOMAIN_DISK_BUS_SATA); + virDomainDefAddDiskControllersForType(def, VIR_DOMAIN_CONTROLLER_TYPE_= NVME, + VIR_DOMAIN_DISK_BUS_NVME); =20 virDomainDefMaybeAddVirtioSerialController(def); virDomainDefMaybeAddSmartcardController(def); @@ -22724,6 +22770,9 @@ virDomainDefAddImplicitDevices(virDomainDef *def, v= irDomainXMLOption *xmlopt) } virDomainDefAddImplicitControllers(def); =20 + if (virDomainDefMaybeAssignNvmeControllerSerials(def) < 0) + return -1; + if (virDomainDefAddImplicitVideo(def, xmlopt) < 0) return -1; =20 @@ -29685,8 +29734,10 @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk, int *busIdx, int *devIdx) { - int idx =3D virDiskNameToIndex(disk->dst); - if (idx < 0) + int idx =3D -1; + int nvme_ctrl =3D 0; + + if (virDiskNameParse(disk->dst, &nvme_ctrl, &idx, NULL) < 0 || idx < 0) return -1; =20 switch (disk->bus) { @@ -29698,6 +29749,10 @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk, *busIdx =3D idx / 7; *devIdx =3D idx % 7; break; + case VIR_DOMAIN_DISK_BUS_NVME: + *busIdx =3D nvme_ctrl; + *devIdx =3D idx; + break; case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_VIRTIO: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c54e4759a783..3001e51c8ea6 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -401,6 +401,7 @@ typedef enum { VIR_DOMAIN_DISK_BUS_UML, VIR_DOMAIN_DISK_BUS_SATA, VIR_DOMAIN_DISK_BUS_SD, + VIR_DOMAIN_DISK_BUS_NVME, =20 VIR_DOMAIN_DISK_BUS_LAST } virDomainDiskBus; diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index bf33f29638ff..a07ec8d94e65 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -523,6 +523,8 @@ virDomainDiskDefPostParse(virDomainDiskDef *disk, disk->bus =3D VIR_DOMAIN_DISK_BUS_XEN; else if (STRPREFIX(disk->dst, "ubd")) disk->bus =3D VIR_DOMAIN_DISK_BUS_UML; + else if (STRPREFIX(disk->dst, "nvme")) + disk->bus =3D VIR_DOMAIN_DISK_BUS_NVME; } } =20 diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index d0d4bc0bf4b7..96f76f2f7bba 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -260,6 +260,7 @@ virDomainDiskAddressDiskBusCompatibility(virDomainDiskB= us bus, case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_SCSI: case VIR_DOMAIN_DISK_BUS_SATA: + case VIR_DOMAIN_DISK_BUS_NVME: return addressType =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE; case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: @@ -948,7 +949,8 @@ virDomainDiskDefValidate(const virDomainDef *def, !STRPREFIX(disk->dst, "sd") && !STRPREFIX(disk->dst, "vd") && !STRPREFIX(disk->dst, "xvd") && - !STRPREFIX(disk->dst, "ubd")) { + !STRPREFIX(disk->dst, "ubd") && + !STRPREFIX(disk->dst, "nvme")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid harddisk device name: %1$s"), disk->dst); return -1; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 029d4ed4ec7a..a5a0f337684c 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -2517,9 +2517,14 @@ =20 - - (ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]+<= /param> - + + + (ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]= + + + + nvme[0-9]+n[0-9]+(p[0-9]+)? + + =20 @@ -2539,6 +2544,7 @@ uml sata sd + nvme diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 0d1e388c08d7..126453eda4ab 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -948,6 +948,7 @@ hypervDomainAttachStorage(virDomainPtr domain, virDomai= nDef *def, const char *ho case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported co= ntroller type")); @@ -3078,6 +3079,7 @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, co= nst char *xml, unsigned int case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid disk b= us in definition")); diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index 3e6bced4a885..9d39ebd63da1 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -258,6 +258,7 @@ qemuAssignDeviceDiskAlias(virDomainDef *def, case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME: diskPriv->qomName =3D g_strdup(disk->info.alias); break; =20 diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 07963e33b351..528a8fc8ca86 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -532,6 +532,7 @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props, =20 break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_XEN: @@ -1722,6 +1723,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def, driver =3D "floppy"; break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 7bc769fc1934..9b2faf1e8e37 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -739,6 +739,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: return 0; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 7a1170b2ddd1..9427eec64384 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1058,6 +1058,7 @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver = *driver, /* Note that SD card hotplug support should be added only once * they support '-device' (don't require -drive only). * See also: qemuDiskBusIsSD */ + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -5776,6 +5777,7 @@ qemuDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_SCSI: break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_XEN: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 8acc44747456..a264185f5f43 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2945,6 +2945,7 @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDom= ainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOThreads not available for bus %1$s target %2$s= "), @@ -3086,6 +3087,7 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDoma= inDiskDef *disk, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("disk device=3D'lun' is not supported for bus= =3D'%1$s'"), virDomainDiskBusTypeToString(disk->bus)); @@ -3201,6 +3203,7 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDoma= inDiskDef *disk, =20 break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: @@ -3397,6 +3400,7 @@ qemuValidateDomainDeviceDefDiskTransient(const virDom= ainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: default: @@ -3418,6 +3422,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDe= f *disk, { const char *driverName =3D virDomainDiskGetDriver(disk); virStorageSource *n; + int nvme_ctrl; int idx; int partition; =20 @@ -3445,7 +3450,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDe= f *disk, return -1; } =20 - if (virDiskNameParse(disk->dst, NULL, &idx, &partition) < 0) { + if (virDiskNameParse(disk->dst, &nvme_ctrl, &idx, &partition) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("invalid disk target '%1$s'"), disk->dst); return -1; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6f18b2b2c820..25335d90027e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10344,6 +10344,7 @@ testDomainAttachDeviceDiskLiveInternal(testDriver *= driver G_GNUC_UNUSED, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -10792,6 +10793,7 @@ testDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); return -1; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 95c70671a752..ed21798b2c7e 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -1239,6 +1239,7 @@ vboxAttachDrives(virDomainDef *def, struct _vboxDrive= r *data, IMachine *machine) case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 4a9ad11b42c4..7fa00669a717 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2240,6 +2240,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, prefix =3D "fd"; break; =20 + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_USB: diff --git a/tests/genericxml2xmlindata/disk-nvme-invalid-serials.xml b/tes= ts/genericxml2xmlindata/disk-nvme-invalid-serials.xml new file mode 100644 index 000000000000..dcfe6eaacfbf --- /dev/null +++ b/tests/genericxml2xmlindata/disk-nvme-invalid-serials.xml @@ -0,0 +1,29 @@ + + bar + 00010203-0405-4607-8809-0a0b0c0d0e0f + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + + abcdefgh + + + + + + IJKLMNOP + + + diff --git a/tests/genericxml2xmlindata/disk-nvme.xml b/tests/genericxml2xm= lindata/disk-nvme.xml new file mode 100644 index 000000000000..bdfec4ef7b7c --- /dev/null +++ b/tests/genericxml2xmlindata/disk-nvme.xml @@ -0,0 +1,32 @@ + + bar + 00010203-0405-4607-8809-0a0b0c0d0e0f + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + + + + + + + abcdefgh + + + + CDEFGAHC + + + diff --git a/tests/genericxml2xmloutdata/disk-nvme.xml b/tests/genericxml2x= mloutdata/disk-nvme.xml new file mode 100644 index 000000000000..4251e1288eaf --- /dev/null +++ b/tests/genericxml2xmloutdata/disk-nvme.xml @@ -0,0 +1,38 @@ + + bar + 00010203-0405-4607-8809-0a0b0c0d0e0f + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + + + abcdefgh +
+ + + + CDEFGAHC + + + + abcdefgh + + + diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c index f4e04d84f825..6757fc44ded1 100644 --- a/tests/genericxml2xmltest.c +++ b/tests/genericxml2xmltest.c @@ -232,6 +232,8 @@ mymain(void) DO_TEST("fibrechannel-appid"); =20 DO_TEST("controller-nvme"); + DO_TEST_DIFFERENT("disk-nvme"); + DO_TEST_FAIL_INACTIVE("disk-nvme-invalid-serials"); =20 #define DO_TEST_BACKUP_FULL(name, intrnl) \ do { \ --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860844; cv=none; d=zohomail.com; s=zohoarc; b=hGcH+sbGhJa5b+B0YJI45wZLklHSbVqKPwOO+ce2ATaLOYDuGQAXyyTX9JixOarLfvjeY5FNMlNhF1V0WK+Ry5qCDfBD60273kH5jXE0RZmn/o8rpkxgEGMcTrlynepMZa/dt2QAyvSB/dzl0bqnJVoca8RY4Mfdg8e7gpaRXs0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860844; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=J6TP4VS6c/aXxTv8bR4uKFP3NvUxet9dr8L38YpwS5k=; b=IsGRo2BKVwpjaUUx9ksyi2jui0ZDetn/uXiNMR1u49/McyD8cTEypA+hplrFzYpFXQE+jqm3gQA2QhvA4ZzTaDc7L1qdRIX2XGLJonK9mQo2Wc5YT72EK1Za9ZdZXYxa/LpYRZhKBxoQrrWsHgJydUQehMB6kDNzRaROgFS/BVo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860844205905.291645248001; Mon, 2 Jun 2025 03:40:44 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3459AE77; Mon, 2 Jun 2025 06:40:43 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BB8BE155D; Mon, 2 Jun 2025 06:31:39 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 894191433; Mon, 2 Jun 2025 06:31:10 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A40D6E77 for ; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-648-_qP1irOWNMqbSErepSicAQ-1; Mon, 02 Jun 2025 06:31:04 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-450cf229025so11059845e9.1 for ; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4f00971efsm14724935f8f.62.2025.06.02.03.30.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 7C8AFB55DC77 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860265; h=from:from: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; bh=J6TP4VS6c/aXxTv8bR4uKFP3NvUxet9dr8L38YpwS5k=; b=iQIFQPiicr+GdMkHi0ipJETwYYOtc/NazMbgu0kSDKk1GJvjB056CzZgvr8xhVPovcV9G9 b9VarFEG6RdRbbgmdY5iG71LNyYCkYHCmGfcrr59XQnU7q17Rm7j0o9Dth4UFBsRjfJuZV J1MbFQDTXHNeCxddlO12ud7vJq+w4jc= X-MC-Unique: _qP1irOWNMqbSErepSicAQ-1 X-Mimecast-MFC-AGG-ID: _qP1irOWNMqbSErepSicAQ_1748860263 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860263; x=1749465063; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UUueeGYv3Tn7KI+ZIQfU/Nz0FmX3Y3XXTgWFqDPvuuo=; b=gRN5dIKQfFrQFXWe6qUXfvuPxOfS3b6TYkG2W9+/IYswKDTcQZGo/nFbHaWY8NFYMo FlPkpahOEWpPjksAEpMth3m9hhnx+l+vzJKZUMKh0h0zK3XQu55MJ24MCAY1P6ugutoK EgtaWt9eRwDkYX28kDsp697OddULAMjn2TEG4Angma+vukWkiThWUdVOIHNjJUSPLMne e8hJtFnOIk42S6lsQkbg6JdMQeWNROKXABqKpSAE9T2vm1kpW/qVzJOjTIv5uMPqfsvv FW5rBnDxQgFJIfVdPOIlGJY8E+a+h3pHFNozO3UuQmH4GLn7qcfBcZ+WIo1HHWhamVeI 812g== X-Gm-Message-State: AOJu0YyzRs7lFnSMytGOh0As9xGQuTPUGKQRvyxUTgZ2Ee7JQfvCRGHn t44QdkKJWeBKq5FiiAI/v8LRmIC5aFDC+oM2FxrJj8zo2wiJfo3u3uWy+f7nKOiIzDv2B5JCiYw Tk+UT31AlbZS7WCGjzbSXWyC3ZK5lHQNNR5PoqyoVFwaMF1aEZqaJ8XCkHmy63axooLlT8sbam4 OKL8hTP1C3L+XoQrt684drpT6MHcv4eycOBL8KARgM86g= X-Gm-Gg: ASbGncvdEUs0Zn/kflpKyLeLTDW9rRhSCTL+auasksZ9PKGJJvqtKmdGRgKwSV+5or6 OTz7zDMIYueyWoDlu0t1E2a/VavlwOv3cMLLcTfBiqXyMM1MHijlvBu/KXjnPvKuoFcENOuiPR4 JG6pBsAiIwN/EzQ1w9h/h6DsyXW+D1ZU+dTCqQ6ABr6Ey0absZoNm58ThXPKd5ANke7p+xNt9pI VcD1NG7bYlKuKn761vnsrmMynmwhivkNOBe1IAXhmrm/zecs267gZs0/Xb0tmRDgvPH5GZ1kEfz bzCXscm0zdjtQDH1w86n X-Received: by 2002:a05:6000:4023:b0:3a0:b1f7:c1da with SMTP id ffacd0b85a97d-3a4fe3989b2mr5550058f8f.46.1748860262408; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGRzAGrPDGm1asd1YmIZ7+Gquiaze5ZQndsBd8qcuimAmq/Gez0aOmlPEuwS100GyXwrLTLrg== X-Received: by 2002:a05:6000:4023:b0:3a0:b1f7:c1da with SMTP id ffacd0b85a97d-3a4fe3989b2mr5550009f8f.46.1748860261631; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 05/11] vmx: Add support for NVMe disks Date: Mon, 2 Jun 2025 12:30:48 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: sKtz14xc72QvseTnaCPvDEkww5kvcIrrJsErL2vctd4_1748860263 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GTDVFXYSOBEN5SFTDZKS33234YXI37YF X-Message-ID-Hash: GTDVFXYSOBEN5SFTDZKS33234YXI37YF X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860846035116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Resolves: https://issues.redhat.com/browse/RHEL-7390 Signed-off-by: Martin Kletzander Reviewed-by: J=C3=A1n Tomko --- src/vmx/vmx.c | 84 ++++++++++++++++++- tests/vmx2xmldata/esx-in-the-wild-15.vmx | 100 +++++++++++++++++++++++ tests/vmx2xmldata/esx-in-the-wild-15.xml | 45 ++++++++++ tests/vmx2xmldata/esx-in-the-wild-16.vmx | 91 +++++++++++++++++++++ tests/vmx2xmldata/esx-in-the-wild-16.xml | 37 +++++++++ tests/vmx2xmltest.c | 2 + 6 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 tests/vmx2xmldata/esx-in-the-wild-15.vmx create mode 100644 tests/vmx2xmldata/esx-in-the-wild-15.xml create mode 100644 tests/vmx2xmldata/esx-in-the-wild-16.vmx create mode 100644 tests/vmx2xmldata/esx-in-the-wild-16.xml diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 7fa00669a717..47eabe33c64e 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -97,6 +97,7 @@ def->os sata[0..3]:[0..29] -> = : with 1 bus per controller ide[0..1]:[0..1] -> :<= unit> with 1 controller floppy[0..1] -> = with 1 controller and 1 bus per controller + nvme[0..3]:[0..14] -> : with 1 bus per controller =20 def->disks[0]... =20 @@ -308,6 +309,19 @@ def->disks[0]... ->slotnum =20 =20 +## disks: nvme hard drive ################################################= ###### + + nvme[0...3].present =3D "true" = # defaults to "false" + nvme[0...3]:[0...14].present =3D "= true" # defaults to "false" +# Limits are taken from https://configmax.broadcom.com/guest?vmwareproduct= =3DvSphere&release=3DvSphere%208.0&categories=3D1-0 +... +->type =3D _DISK_TYPE_FILE +->device =3D _DISK_DEVICE_DISK +->bus =3D _DISK_BUS_NVME +->src =3D .vmdk <=3D> nvme0:0.fileName =3D ".= vmdk" +->dst =3D nvmen +->cachemode <=3D> nvme0:0.writeThrough =3D "" # defaults to false, true -> _DISK_CACHE_WRITETHRU, false _DISK_C= ACHE_DEFAULT + =20 ##########################################################################= ###### ## filesystems ###########################################################= ###### @@ -573,6 +587,7 @@ static int virVMXParseVNC(virConf *conf, virDomainGraph= icsDef **def); static int virVMXParseSCSIController(virConf *conf, int controller, bool *= present, int *virtualDev); static int virVMXParseSATAController(virConf *conf, int controller, bool *= present); +static int virVMXParseNVMEController(virConf *conf, int controller, bool *= present); static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, virConf *conf, int device, int busType, int controllerOrBus, int unit, virDomainDiskDef= **def, @@ -1843,6 +1858,30 @@ virVMXParseConfig(virVMXContext *ctx, VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk); } =20 + /* def:disks (nvme) */ + for (controller =3D 0; controller < 4; ++controller) { + if (virVMXParseNVMEController(conf, controller, &present) < 0) + goto cleanup; + + if (!present) + continue; + + for (unit =3D 0; unit < 15; unit++) { + g_autoptr(virDomainDiskDef) disk =3D NULL; + + if (virVMXParseDisk(ctx, xmlopt, conf, VIR_DOMAIN_DISK_DEVICE_= DISK, + VIR_DOMAIN_DISK_BUS_NVME, controller, unit, + &disk, def) < 0) { + goto cleanup; + } + + if (!disk) + continue; + + VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk); + } + } + /* def:fss */ if (virVMXGetConfigBoolean(conf, "isolation.tools.hgfs.disable", &hgfs_disabled, true, true) < 0) { @@ -2156,6 +2195,27 @@ virVMXParseSATAController(virConf *conf, int control= ler, bool *present) } =20 =20 +static int +virVMXParseNVMEController(virConf *conf, int controller, bool *present) +{ + char present_name[32]; + + if (controller < 0 || controller > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("NVMe controller index %1$d out of [0..3] range"), + controller); + return -1; + } + + g_snprintf(present_name, sizeof(present_name), "nvme%d.present", contr= oller); + + if (virVMXGetConfigBoolean(conf, present_name, present, false, true) <= 0) + return -1; + + return 0; +} + + static int virVMXGenerateDiskTarget(virDomainDiskDef *def, virDomainDef *vmdef, @@ -2164,6 +2224,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, { const char *prefix =3D NULL; unsigned int idx =3D 0; + unsigned int nvme_ctrl =3D 0; =20 switch (def->bus) { case VIR_DOMAIN_DISK_BUS_SCSI: @@ -2241,6 +2302,25 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, break; =20 case VIR_DOMAIN_DISK_BUS_NVME: + if (controllerOrBus < 0 || controllerOrBus > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("NVMe controller index %1$d out of [0..3] ran= ge"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > 14) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("NVMe NSID %1$d out of [0..14] range"), + unit); + return -1; + } + + prefix =3D "nvme"; + nvme_ctrl =3D controllerOrBus; + idx =3D unit; + break; + case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_USB: @@ -2258,7 +2338,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, return -1; } =20 - def->dst =3D virIndexToDiskName(0, idx, prefix); + def->dst =3D virIndexToDiskName(nvme_ctrl, idx, prefix); return 0; } =20 @@ -2339,6 +2419,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= n *xmlopt, virConf *conf, prefix =3D g_strdup_printf("sata%d:%d", controllerOrBus, unit); } else if (busType =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { prefix =3D g_strdup_printf("ide%d:%d", controllerOrBus, unit); + } else if (busType =3D=3D VIR_DOMAIN_DISK_BUS_NVME) { + prefix =3D g_strdup_printf("nvme%d:%d", controllerOrBus, unit); } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type = '%2$s'"), diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.vmx b/tests/vmx2xmldata/e= sx-in-the-wild-15.vmx new file mode 100644 index 000000000000..5a37e3c1a64a --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-15.vmx @@ -0,0 +1,100 @@ +.encoding =3D "UTF-8" +config.version =3D "8" +virtualHW.version =3D "19" +vmci0.present =3D "TRUE" +floppy0.present =3D "FALSE" +numvcpus =3D "2" +memSize =3D "2048" +tools.upgrade.policy =3D "manual" +sched.cpu.units =3D "mhz" +vm.createDate =3D "1576746358597648" +nvme0.present =3D "TRUE" +ide0:0.startConnected =3D "FALSE" +ide0:0.deviceType =3D "atapi-cdrom" +ide0:0.fileName =3D "/vmfs/devices/cdrom/mpx.vmhba0:C0:T0:L0" +ide0:0.present =3D "TRUE" +nvme0:0.fileName =3D "dokuwiki.vmdk" +sched.nvme0:0.shares =3D "normal" +sched.nvme0:0.throughputCap =3D "off" +nvme0:0.present =3D "TRUE" +nvme0:1.fileName =3D "dokuwiki_1.vmdk" +sched.nvme0:1.shares =3D "normal" +sched.nvme0:1.throughputCap =3D "off" +nvme0:1.present =3D "TRUE" +ethernet0.virtualDev =3D "vmxnet3" +ethernet0.networkName =3D "inside" +ethernet0.addressType =3D "vpx" +ethernet0.generatedAddress =3D "00:50:56:83:c9:0c" +ethernet0.uptCompatibility =3D "TRUE" +ethernet0.present =3D "TRUE" +displayName =3D "dokuwiki" +guestOS =3D "debian11-64" +toolScripts.afterPowerOn =3D "TRUE" +toolScripts.afterResume =3D "TRUE" +toolScripts.beforeSuspend =3D "TRUE" +toolScripts.beforePowerOff =3D "TRUE" +tools.syncTime =3D "FALSE" +uuid.bios =3D "42 03 38 bd 1c 9e ad 50-99 a2 59 e9 2d dd a8 b6" +vc.uuid =3D "50 03 41 d5 fe 23 ac 46-8c b3 77 a8 e5 a1 14 3d" +tools.guest.desktop.autolock =3D "FALSE" +nvram =3D "dokuwiki.nvram" +pciBridge0.present =3D "TRUE" +svga.present =3D "TRUE" +pciBridge4.present =3D "TRUE" +pciBridge4.virtualDev =3D "pcieRootPort" +pciBridge4.functions =3D "8" +pciBridge5.present =3D "TRUE" +pciBridge5.virtualDev =3D "pcieRootPort" +pciBridge5.functions =3D "8" +pciBridge6.present =3D "TRUE" +pciBridge6.virtualDev =3D "pcieRootPort" +pciBridge6.functions =3D "8" +pciBridge7.present =3D "TRUE" +pciBridge7.virtualDev =3D "pcieRootPort" +pciBridge7.functions =3D "8" +hpet0.present =3D "TRUE" +sched.cpu.latencySensitivity =3D "normal" +svga.autodetect =3D "TRUE" +ethernet0.pciSlotNumber =3D "192" +monitor.phys_bits_used =3D "45" +numa.autosize.cookie =3D "20012" +numa.autosize.vcpu.maxPerVirtualNode =3D "2" +pciBridge0.pciSlotNumber =3D "17" +pciBridge4.pciSlotNumber =3D "21" +pciBridge5.pciSlotNumber =3D "22" +pciBridge6.pciSlotNumber =3D "23" +pciBridge7.pciSlotNumber =3D "24" +softPowerOff =3D "FALSE" +vmci0.pciSlotNumber =3D "32" +vmotion.checkpointFBSize =3D "4194304" +vmotion.checkpointSVGAPrimarySize =3D "16777216" +svga.guestBackedPrimaryAware =3D "TRUE" +viv.moid =3D "b06e4d96-3801-44bc-a80b-000c9d5011de:vm-4132:xfcr8Wfnh0NDebe= 8d4RfGMCmMZwHgM/hdwwwZBOfda0=3D" +toolsInstallManager.updateCounter =3D "5" +guestInfo.detailed.data =3D "architecture=3D'X86' bitness=3D'64' distroAdd= lVersion=3D'12 (bookworm)' distroName=3D'Debian GNU/Linux' distroVersion=3D= '12' familyName=3D'Linux' kernelVersion=3D'6.1.0-31-amd64' prettyName=3D'De= bian GNU/Linux 12 (bookworm)'" +nvme0.pciSlotNumber =3D "224" +vmotion.svga.mobMaxSize =3D "16777216" +vmotion.svga.graphicsMemoryKB =3D "16384" +nvme0.subnqnUUID =3D "52 1c 76 62 33 0a 35 92-ec d2 e8 fb b6 1e 48 40" +migrate.hostLog =3D "dokuwiki-4798ad89.hlog" +sched.cpu.min =3D "0" +sched.cpu.shares =3D "normal" +sched.mem.min =3D "0" +sched.mem.minSize =3D "0" +sched.mem.shares =3D "normal" +migrate.encryptionMode =3D "opportunistic" +ftcpt.ftEncryptionMode =3D "ftEncryptionOpportunistic" +guestinfo.vmtools.buildNumber =3D "21223074" +guestinfo.vmtools.description =3D "open-vm-tools 12.2.0 build 21223074" +guestinfo.vmtools.versionNumber =3D "12352" +guestinfo.vmtools.versionString =3D "12.2.0" +guestinfo.vmware.components.available =3D "none" +sched.swap.derivedName =3D "/vmfs/volumes/730da1ed-8e83d87a-0000-000000000= 000/dokuwiki/dokuwiki-dc0a874b.vswp" +uuid.location =3D "56 4d 1b 77 e4 d9 3e 43-31 31 2a 9b d2 d5 b1 18" +nvme0:0.redo =3D "" +nvme0:1.redo =3D "" +svga.vramSize =3D "16777216" +vmci0.id =3D "769501366" +cleanShutdown =3D "FALSE" +config.readOnly =3D "FALSE" +guestinfo.appInfo =3D "{|0A|22version|22:|221|22, |0A|22updateCounter|22:|= 224|22, |0A|22publishTime|22:|222025-03-07T05:47:53.504Z|22, |0A|22applicat= ions|22:[|0A{|22a|22:|22kworker/1:2-ata_sff|22,|22v|22:|22|22},|0A{|22a|22:= |22kworker/1:0-ata_sff|22,|22v|22:|22|22},|0A{|22a|22:|22kworker/0:1|22,|22= v|22:|22|22},|0A{|22a|22:|22kworker/1:1-events|22,|22v|22:|22|22},|0A{|22a|= 22:|22kworker/u4:2-events_unbound|22,|22v|22:|22|22},|0A{|22a|22:|22apache2= |22,|22v|22:|22|22},|0A{|22a|22:|22kworker/0:3-events|22,|22v|22:|22|22},|0= A{|22a|22:|22kworker/u4:0-events_unbound|22,|22v|22:|22|22},|0A{|22a|22:|22= exim4|22,|22v|22:|22|22},|0A{|22a|22:|22sshd: /usr/sbin/sshd -D [listener] = 0 of 10-100 startups|22,|22v|22:|22|22},|0A{|22a|22:|22agetty|22,|22v|22:|2= 2|22},|0A{|22a|22:|22cron|22,|22v|22:|22|22},|0A{|22a|22:|22systemd-logind|= 22,|22v|22:|22|22},|0A{|22a|22:|22rsyslogd|22,|22v|22:|22|22},|0A{|22a|22:|= 22dbus-daemon|22,|22v|22:|22|22},|0A{|22a|22:|22acpid|22,|22v|22:|22|22},|0= A{|22a|22:|22xprtiod|22,|22v|22:|22|22},|0A{|22a|22:|22rpciod|22,|22v|22:|2= 2|22},|0A{|22a|22:|22vmtoolsd|22,|22v|22:|22|22},|0A{|22a|22:|22VGAuthServi= ce|22,|22v|22:|22|22},|0A{|22a|22:|22systemd-timesyncd|22,|22v|22:|22|22},|= 0A{|22a|22:|22rpcbind|22,|22v|22:|22|22},|0A{|22a|22:|22irq/16-vmwgfx|22,|2= 2v|22:|22|22},|0A{|22a|22:|22irq/63-vmw_vmci|22,|22v|22:|22|22},|0A{|22a|22= :|22irq/62-vmw_vmci|22,|22v|22:|22|22},|0A{|22a|22:|22systemd-udevd|22,|22v= |22:|22|22},|0A{|22a|22:|22systemd-journald|22,|22v|22:|22|22},|0A{|22a|22:= |22ext4-rsv-conver|22,|22v|22:|22|22},|0A{|22a|22:|22jbd2/nvme0n1p1-8|22,|2= 2v|22:|22|22},|0A{|22a|22:|22kworker/1:2H-kblockd|22,|22v|22:|22|22},|0A{|2= 2a|22:|22nvme-delete-wq|22,|22v|22:|22|22},|0A{|22a|22:|22nvme-reset-wq|22,= |22v|22:|22|22},|0A{|22a|22:|22nvme-wq|22,|22v|22:|22|22},|0A{|22a|22:|22sc= si_tmf_1|22,|22v|22:|22|22},|0A{|22a|22:|22scsi_eh_1|22,|22v|22:|22|22},|0A= {|22a|22:|22scsi_tmf_0|22,|22v|22:|22|22},|0A{|22a|22:|22scsi_eh_0|22,|22v|= 22:|22|22},|0A{|22a|22:|22ata_sff|22,|22v|22:|22|22},|0A{|22a|22:|22kworker= /0:1H-kblockd|22,|22v|22:|22|22},|0A{|22a|22:|22kworker/u5:0|22,|22v|22:|22= |22},|0A{|22a|22:|22zswap-shrink|22,|22v|22:|22|22},|0A{|22a|22:|22kstrp|22= ,|22v|22:|22|22},|0A{|22a|22:|22ipv6_addrconf|22,|22v|22:|22|22},|0A{|22a|2= 2:|22mld|22,|22v|22:|22|22},|0A{|22a|22:|22acpi_thermal_pm|22,|22v|22:|22|2= 2},|0A{|22a|22:|22irq/55-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/54-pc= iehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/53-pciehp|22,|22v|22:|22|22},|0A= {|22a|22:|22irq/52-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/51-pciehp|2= 2,|22v|22:|22|22},|0A{|22a|22:|22irq/50-pciehp|22,|22v|22:|22|22},|0A{|22a|= 22:|22irq/49-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/48-pciehp|22,|22v= |22:|22|22},|0A{|22a|22:|22irq/47-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22= irq/46-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/45-pciehp|22,|22v|22:|2= 2|22},|0A{|22a|22:|22irq/44-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/43= -pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/42-pciehp|22,|22v|22:|22|22},= |0A{|22a|22:|22irq/41-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/40-pcieh= p|22,|22v|22:|22|22},|0A{|22a|22:|22irq/39-pciehp|22,|22v|22:|22|22},|0A{|2= 2a|22:|22irq/38-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/37-pciehp|22,|= 22v|22:|22|22},|0A{|22a|22:|22irq/36-pciehp|22,|22v|22:|22|22},|0A{|22a|22:= |22irq/35-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/34-pciehp|22,|22v|22= :|22|22},|0A{|22a|22:|22irq/33-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq= /32-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/31-pciehp|22,|22v|22:|22|2= 2},|0A{|22a|22:|22irq/30-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/29-pc= iehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/28-pciehp|22,|22v|22:|22|22},|0A= {|22a|22:|22irq/27-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22irq/26-pciehp|2= 2,|22v|22:|22|22},|0A{|22a|22:|22irq/25-pciehp|22,|22v|22:|22|22},|0A{|22a|= 22:|22irq/24-pciehp|22,|22v|22:|22|22},|0A{|22a|22:|22kthrotld|22,|22v|22:|= 22|22},|0A{|22a|22:|22kswapd0|22,|22v|22:|22|22},|0A{|22a|22:|22kworker/1:1= H-kblockd|22,|22v|22:|22|22},|0A{|22a|22:|22devfreq_wq|22,|22v|22:|22|22},|= 0A{|22a|22:|22edac-poller|22,|22v|22:|22|22},|0A{|22a|22:|22tpm_dev_wq|22,|= 22v|22:|22|22},|0A{|22a|22:|22blkcg_punt_bio|22,|22v|22:|22|22},|0A{|22a|22= :|22kblockd|22,|22v|22:|22|22},|0A{|22a|22:|22kintegrityd|22,|22v|22:|22|22= },|0A{|22a|22:|22khugepaged|22,|22v|22:|22|22},|0A{|22a|22:|22ksmd|22,|22v|= 22:|22|22},|0A{|22a|22:|22kcompactd0|22,|22v|22:|22|22},|0A{|22a|22:|22writ= eback|22,|22v|22:|22|22},|0A{|22a|22:|22oom_reaper|22,|22v|22:|22|22},|0A{|= 22a|22:|22khungtaskd|22,|22v|22:|22|22},|0A{|22a|22:|22kauditd|22,|22v|22:|= 22|22},|0A{|22a|22:|22inet_frag_wq|22,|22v|22:|22|22},|0A{|22a|22:|22kdevtm= pfs|22,|22v|22:|22|22},|0A{|22a|22:|22ksoftirqd/1|22,|22v|22:|22|22},|0A{|2= 2a|22:|22migration/1|22,|22v|22:|22|22},|0A{|22a|22:|22cpuhp/1|22,|22v|22:|= 22|22},|0A{|22a|22:|22cpuhp/0|22,|22v|22:|22|22},|0A{|22a|22:|22migration/0= |22,|22v|22:|22|22},|0A{|22a|22:|22rcu_preempt|22,|22v|22:|22|22},|0A{|22a|= 22:|22ksoftirqd/0|22,|22v|22:|22|22},|0A{|22a|22:|22rcu_tasks_trace_kthread= |22,|22v|22:|22|22},|0A{|22a|22:|22rcu_tasks_rude_kthread|22,|22v|22:|22|22= },|0A{|22a|22:|22rcu_tasks_kthread|22,|22v|22:|22|22},|0A{|22a|22:|22mm_per= cpu_wq|22,|22v|22:|22|22},|0A{|22a|22:|22kworker/0:0H-events_highpri|22,|22= v|22:|22|22},|0A{|22a|22:|22netns|22,|22v|22:|22|22},|0A{|22a|22:|22slub_fl= ushwq|22,|22v|22:|22|22},|0A{|22a|22:|22rcu_par_gp|22,|22v|22:|22|22},|0A{|= 22a|22:|22rcu_gp|22,|22v|22:|22|22},|0A{|22a|22:|22kthreadd|22,|22v|22:|22|= 22},|0A{|22a|22:|22init|22,|22v|22:|22|22}]}" diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.xml b/tests/vmx2xmldata/e= sx-in-the-wild-15.xml new file mode 100644 index 000000000000..77b094e9d5b5 --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-15.xml @@ -0,0 +1,45 @@ + + dokuwiki + 420338bd-1c9e-ad50-99a2-59e92ddda8b6 + 2097152 + 2097152 + 2 + + 2000 + + + hvm + + + destroy + restart + destroy + + + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + + diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.vmx b/tests/vmx2xmldata/e= sx-in-the-wild-16.vmx new file mode 100644 index 000000000000..ffbb64c30357 --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-16.vmx @@ -0,0 +1,91 @@ +.encoding =3D "UTF-8" +config.version =3D "8" +virtualHW.version =3D "20" +nvram =3D "Auto-esx8.0-rhel9.4-efi-nvme-disk.nvram" +svga.present =3D "TRUE" +vmci0.present =3D "TRUE" +hpet0.present =3D "TRUE" +floppy0.present =3D "FALSE" +svga.vramSize =3D "8388608" +RemoteDisplay.maxConnections =3D "-1" +memSize =3D "2048" +firmware =3D "efi" +powerType.powerOff =3D "default" +powerType.suspend =3D "default" +powerType.reset =3D "default" +tools.upgrade.policy =3D "manual" +sched.cpu.units =3D "mhz" +sched.cpu.affinity =3D "all" +sched.cpu.latencySensitivity =3D "normal" +vm.createDate =3D "1714291828619860" +scsi0.virtualDev =3D "pvscsi" +scsi0.present =3D "TRUE" +sata0.present =3D "TRUE" +sata0:0.deviceType =3D "atapi-cdrom" +sata0:0.fileName =3D "emptyBackingString" +sata0:0.present =3D "TRUE" +ethernet0.allowGuestConnectionControl =3D "FALSE" +ethernet0.virtualDev =3D "vmxnet3" +ethernet0.networkName =3D "VM Network" +ethernet0.addressType =3D "vpx" +ethernet0.generatedAddress =3D "00:50:56:a0:a6:7e" +ethernet0.uptCompatibility =3D "TRUE" +ethernet0.present =3D "TRUE" +displayName =3D "Auto-esx8.0-rhel9.4-efi-nvme-disk" +guestOS =3D "rhel9-64" +chipset.motherboardLayout =3D "acpi" +uefi.secureBoot.enabled =3D "TRUE" +toolScripts.afterPowerOn =3D "TRUE" +toolScripts.afterResume =3D "TRUE" +toolScripts.beforeSuspend =3D "TRUE" +toolScripts.beforePowerOff =3D "TRUE" +uuid.bios =3D "42 20 df 89 e3 a8 85 13-f6 11 ad 25 2b fd 70 47" +vc.uuid =3D "50 20 19 6e c5 c8 73 10-fc db d2 93 3d 0c 4b 2f" +migrate.hostLog =3D "Auto-esx8.0-rhel9.4-efi-nvme-disk-2f773b32.hlog" +sched.cpu.min =3D "0" +sched.cpu.shares =3D "normal" +sched.mem.min =3D "0" +sched.mem.minSize =3D "0" +sched.mem.shares =3D "normal" +migrate.encryptionMode =3D "opportunistic" +ftcpt.ftEncryptionMode =3D "ftEncryptionOpportunistic" +viv.moid =3D "e00e5864-a7ed-4b49-b99a-71da911f679c:vm-1153:hT+j9eNfGClvAYY= IPwnfo375t/28bM62O4s/axWXFiQ=3D" +nvme0.present =3D "TRUE" +nvme0:0.fileName =3D "Auto-esx8.0-rhel9.4-efi-nvme-disk.vmdk" +nvme0:0.present =3D "TRUE" +sched.nvme0:0.shares =3D "normal" +sched.nvme0:0.throughputCap =3D "off" +vmxstats.filename =3D "Auto-esx8.0-rhel9.4-efi-nvme-disk.scoreboard" +numa.autosize.cookie =3D "10012" +numa.autosize.vcpu.maxPerVirtualNode =3D "1" +cpuid.coresPerSocket.cookie =3D "1" +sched.swap.derivedName =3D "/vmfs/volumes/c97af7e9-686a74ad/Auto-esx8.0-rh= el9.4-efi-nvme-disk/Auto-esx8.0-rhel9.4-efi-nvme-disk-c0e0a2b4.vswp" +uuid.location =3D "56 4d 50 90 75 ac 76 f0-75 bb f2 3b ae e2 71 2f" +pciBridge1.present =3D "TRUE" +pciBridge1.virtualDev =3D "pciRootBridge" +pciBridge1.functions =3D "1" +pciBridge1:0.pxm =3D "0" +pciBridge0.present =3D "TRUE" +pciBridge0.virtualDev =3D "pciRootBridge" +pciBridge0.functions =3D "1" +pciBridge0.pxm =3D "-1" +scsi0.pciSlotNumber =3D "32" +ethernet0.pciSlotNumber =3D "33" +sata0.pciSlotNumber =3D "34" +nvme0.pciSlotNumber =3D "35" +nvme0:0.redo =3D "" +scsi0.sasWWID =3D "50 05 05 69 e3 a8 85 10" +vmotion.checkpointFBSize =3D "8388608" +vmotion.checkpointSVGAPrimarySize =3D "8388608" +vmotion.svga.mobMaxSize =3D "8388608" +vmotion.svga.graphicsMemoryKB =3D "8192" +vmci0.id =3D "738029639" +nvme0.subnqnUUID =3D "52 1c e6 f0 b2 e7 62 ee-8e 17 e3 79 14 52 b2 91" +monitor.phys_bits_used =3D "45" +cleanShutdown =3D "TRUE" +softPowerOff =3D "TRUE" +svga.guestBackedPrimaryAware =3D "TRUE" +tools.syncTime =3D "FALSE" +guestInfo.detailed.data =3D "architecture=3D'X86' bitness=3D'64' cpeString= =3D'cpe:/o:redhat:enterprise_linux:9::baseos' distroAddlVersion=3D'9.4 (Plo= w)' distroName=3D'Red Hat Enterprise Linux' distroVersion=3D'9.4' familyNam= e=3D'Linux' kernelVersion=3D'5.14.0-383.el9.x86_64' prettyName=3D'Red Hat E= nterprise Linux 9.4 Beta (Plow)'" +sata0:0.startConnected =3D "FALSE" +sata0:0.clientDevice =3D "TRUE" diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/e= sx-in-the-wild-16.xml new file mode 100644 index 000000000000..147bc0825a09 --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -0,0 +1,37 @@ + + Auto-esx8.0-rhel9.4-efi-nvme-disk + 4220df89-e3a8-8513-f611-ad252bfd7047 + 2097152 + 2097152 + 1 + + 1000 + + + hvm + + + + + + + destroy + restart + destroy + + + + +
+ + + + + + + + + + diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c index 3ca954100085..bcd95ed87dcc 100644 --- a/tests/vmx2xmltest.c +++ b/tests/vmx2xmltest.c @@ -265,6 +265,8 @@ mymain(void) DO_TEST("esx-in-the-wild-12"); DO_TEST("esx-in-the-wild-13"); DO_TEST("esx-in-the-wild-14"); + DO_TEST("esx-in-the-wild-15"); + DO_TEST("esx-in-the-wild-16"); =20 DO_TEST("gsx-in-the-wild-1"); DO_TEST("gsx-in-the-wild-2"); --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860527; cv=none; d=zohomail.com; s=zohoarc; b=HSj0O5HnOyawX/aZzIVNQANtg9ElTgD892cLIsNiB5HPjBteh6KNJXYLV+Ler6l3v4sJsKJrud4QRuBxenUZiq/Ief7/X99J1/kpn+zLqm4jUXRaVndMwD1KdmCzPAsyafSu9oFJMB/DPQzSuOVrjdwlo7FfQ3lJxMQvdWkGQDY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860527; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=mDp1g4PwiD+Xy6rHCKVQS+jhIGa7EI/u5/3j5AKJAT0=; b=XIHhueIzDkVrPgH6DG31f2p9MulJr46SQFb6Es0fhPJFad9XI5sh8SbAZW4/zqbyuYvUmpWcV0iIU/0qHQfqpKjlel1LyvC/VqUSNOJFPMSdVs/VuS1tyrbK49+J2bvOfMHeLhNvgJ5awEDjGByGYFBH0N0KLLuW7m3AOVWeYH0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860527615330.3329657141885; Mon, 2 Jun 2025 03:35:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 8D29D1424; Mon, 2 Jun 2025 06:35:26 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 5165314DB; Mon, 2 Jun 2025 06:31:22 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id C4172E87; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 81A4210A2 for ; Mon, 2 Jun 2025 06:31:04 -0400 (EDT) Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-76Y9iLokOsCoarkEze5Now-1; Mon, 02 Jun 2025 06:31:03 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a4eee72969so2652616f8f.3 for ; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4efe5b962sm14234334f8f.7.2025.06.02.03.30.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 88B6DB55DC78 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860264; h=from:from: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; bh=XrDUzAsb8/8wH2+QX0wK4D0TdiNUYeSNhElEl0Uv7AU=; b=OY8SoIzYfpwUoYWUtPNb/eDOOl/y7/39lXO9R9TuFsI4YgxJm3z+QJuXe9NZTVg8pSMSYP lXrJv0kwLWEplZ6IHYIXK2g859m41/mhVJUjkOzeYcYVBj1TinvHcXTmZKU7DdsXy2jUuv kojtTUulvCqckPVE87MUva8fZXES7TM= X-MC-Unique: 76Y9iLokOsCoarkEze5Now-1 X-Mimecast-MFC-AGG-ID: 76Y9iLokOsCoarkEze5Now_1748860262 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860262; x=1749465062; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XrDUzAsb8/8wH2+QX0wK4D0TdiNUYeSNhElEl0Uv7AU=; b=vn7/fK2eR9wkBa4HUAua247gvztekNRhqu2FrCe9V4vCq36lMBMxQTvUx2tRcNmHWD u21DgnJExlD0bdvmPUlTmEbWc67HoTmSDGND0SD3fIAXIJ+3sxwOPdwzViUAW7v9K9SJ pYbnAgJouK7GI3Fsj39e3PqXt5boQGcGtEcWaWQdJrIfHpb+Y35zPCkmI7UIEquQ0lm5 tUAFlOi4/QN9b8a1rPCfwmGUcxHqOLHrTWBGdgXQO2svl4w0zEBupLqr/b6pEJX3ay/R xsq5R45neNxgey0tl7J35aJguHA8kQrRJlGviARNwCGftdaKdtYIiXLA+eiGYIXN2dF7 MJQQ== X-Gm-Message-State: AOJu0YxyRl9sd8TrR3dvlLEQ/OXxlQrrTuziNnqYVHFgFIS4RkmCOPUu qoimTiJ09qFJyedFuiBrX8K9k+B6eAe5X0iJ3Zes1vL2V90K7u9wbOYNQGQxch2ow3A4niO3w/5 uZb/IyzFIGYmk6hKfAFEFzW9fC1424d37jxQMLhDcfHercxQdwzzdjCPHbr8QDZ0NR9bHHGfmtK qnyIiYfrApnoRPh1egAYvHdA4EfW3JkDWnyo9BwIPYtsQ= X-Gm-Gg: ASbGnctDf5YJeVa19MxOd9hX45ZaG5Cg86e0EqKZYG7Sqdf8o8N3sWs3OPnN5Ehcewg /v+a06iL2NrDFf30mjsYaUOfH06v1O0Hps7S7HSaUeo4jUhQqiIVniBW1KjvlEs3qQLQ2W70h3z 4MV0VE3YrlAHwV85QigJS9GC6VR30zqD3cWVGL85s397l1H7uiHATEptvNL1+QN281uXLSeayHK 6BFaTc3wMfJEQUsc5C/Nm/U1llvP+Oar5puZietUdeu/ZB32uvWWOE3P2hZFV8booizk1RbDo3g GwZoMD9K9HaOgLO6Bwac X-Received: by 2002:a05:6000:250d:b0:3a1:fe77:9e1d with SMTP id ffacd0b85a97d-3a4f7a4d55amr9484894f8f.16.1748860261731; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEnxfx5qZ3ZChgkBbpiicxj41KW/A3eII0eQiQcfDl/xWNxM0BnZoKeqFYSVZgtmcNzdskGfw== X-Received: by 2002:a05:6000:250d:b0:3a1:fe77:9e1d with SMTP id ffacd0b85a97d-3a4f7a4d55amr9484871f8f.16.1748860261183; Mon, 02 Jun 2025 03:31:01 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 06/11] qemu_capabilities: Add NVMe controller and disk capabilities Date: Mon, 2 Jun 2025 12:30:49 +0200 Message-ID: <98e97bb3457aa9f5a9e84f395977edee69930356.1748860220.git.mkletzan@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: CS27Wfwu5A90xeP1QikAi7IC6P21xdW6XmF8rd3Sm7U_1748860262 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AP4354LKJQWH7UAZR4ZVZ34DRW6VSHLB X-Message-ID-Hash: AP4354LKJQWH7UAZR4ZVZ34DRW6VSHLB X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860528231116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander The "nvme" device is the controller and "nvme-ns" are the namespaces (individual disks) plugged into it. Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 2 ++ 31 files changed, 64 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 39cf23ebe7a8..848f1cfebf7d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -734,6 +734,8 @@ VIR_ENUM_IMPL(virQEMUCaps, "virtio-scsi.iothread-mapping", /* QEMU_CAPS_VIRTIO_SCSI_IOT= HREAD_MAPPING */ "machine.virt.highmem-mmio-size", /* QEMU_CAPS_MACHINE_VIRT_= HIGHMEM_MMIO_SIZE */ "bus-floppy", /* QEMU_CAPS_BUS_FLOPPY */ + "nvme", /* QEMU_CAPS_DEVICE_NVME */ + "nvme-ns", /* QEMU_CAPS_DEVICE_NVME_NS */ ); =20 =20 @@ -1423,6 +1425,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "sev-snp-guest", QEMU_CAPS_SEV_SNP_GUEST }, { "acpi-erst", QEMU_CAPS_DEVICE_ACPI_ERST }, { "virtio-mem-ccw", QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW }, + { "nvme", QEMU_CAPS_DEVICE_NVME }, + { "nvme-ns", QEMU_CAPS_DEVICE_NVME_NS }, }; =20 =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 814ad222aec9..713cb268e2f4 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -715,6 +715,8 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING, /* virtio-scsi supports per-vi= rtqueue iothread mapping */ QEMU_CAPS_MACHINE_VIRT_HIGHMEM_MMIO_SIZE, /* -machine virt,highmem-mmi= o-size=3D */ QEMU_CAPS_BUS_FLOPPY, /* floppy bus supported (isa-fdc/sysbus-fdc) */ + QEMU_CAPS_DEVICE_NVME, /* -device nvme */ + QEMU_CAPS_DEVICE_NVME_NS, /* -device nvme-ns */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml b/tests/qem= ucapabilitiesdata/caps_10.0.0_aarch64.xml index 7fd50185575a..95752eb22341 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml @@ -161,6 +161,8 @@ + + 10000000 61700285 v10.0.0 diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml b/tests/qemuc= apabilitiesdata/caps_10.0.0_ppc64.xml index 967b5e0cbc55..12afb64af81d 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml @@ -169,6 +169,8 @@ + + 10000000 42900285 v10.0.0 diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml b/tests/qemuc= apabilitiesdata/caps_10.0.0_s390x.xml index 17b516b03c95..032b527188a8 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml @@ -135,6 +135,8 @@ + + 10000000 39100285 v10.0.0 diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml b/tes= ts/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml index 8da17978fbe4..ec79c6d4b1b4 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml @@ -206,6 +206,8 @@ + + 10000000 43100285 v10.0.0 diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemu= capabilitiesdata/caps_10.0.0_x86_64.xml index 09332805f268..014aca00326b 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -205,6 +205,8 @@ + + 10000000 43100285 v10.0.0 diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemuca= pabilitiesdata/caps_6.2.0_ppc64.xml index bbd4e7972a84..7f4633eb36e5 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -131,6 +131,8 @@ + + 6002000 42900244 v6.2.0 diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_6.2.0_x86_64.xml index e638778ae4f1..e894479a61fa 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -173,6 +173,8 @@ + + 6002000 43100244 v6.2.0 diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemuca= pabilitiesdata/caps_7.0.0_ppc64.xml index 5a277432ad9b..f57e72c3a1ee 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -150,6 +150,8 @@ + + 7000000 42900243 v7.0.0 diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_7.0.0_x86_64.xml index 74f2d2772e69..0556d930d1ca 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -181,6 +181,8 @@ + + 7000000 43100243 v7.0.0 diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemuca= pabilitiesdata/caps_7.1.0_ppc64.xml index 5ad6f203951f..2f1996189dcb 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -151,6 +151,8 @@ + + 7001000 42900244 v7.1.0 diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_7.1.0_x86_64.xml index 750f9920921e..481634cb68c2 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -186,6 +186,8 @@ + + 7001000 43100244 v7.1.0 diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapa= bilitiesdata/caps_7.2.0_ppc.xml index 8166b37514c1..615dce08af97 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -146,6 +146,8 @@ + + 7002000 0 qemu-7.2.0-6.fc37 diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/q= emucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index 942484e85cd6..570b3a5758e0 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -190,6 +190,8 @@ + + 7002000 43100245 v7.2.0 diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_7.2.0_x86_64.xml index a40383c637f3..2ee28761acf0 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -190,6 +190,8 @@ + + 7002000 43100245 v7.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_8.0.0_x86_64.xml index 7a7e567f35e5..b09ec334e3d5 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -194,6 +194,8 @@ + + 8000000 43100244 v8.0.0 diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_8.1.0_x86_64.xml index b9c3952c480e..7c4602aa7793 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -196,6 +196,8 @@ + + 8001000 43100245 v8.1.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemu= capabilitiesdata/caps_8.2.0_aarch64.xml index 837502c336aa..e8c6201ec232 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -160,6 +160,8 @@ + + 8002000 61700246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemuc= apabilitiesdata/caps_8.2.0_armv7l.xml index f062f31abcad..96d602753dc0 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -167,6 +167,8 @@ + + 8002000 0 qemu-8.2.0-7.fc39 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/= qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index 2a376313818c..ba8eaa2fe176 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -150,6 +150,8 @@ + + 8002000 106300246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemuca= pabilitiesdata/caps_8.2.0_s390x.xml index 086fa2c7150a..37e98624ed10 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -114,6 +114,8 @@ + + 8002000 39100246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_8.2.0_x86_64.xml index 669c9a23048f..93ab4bd2b9ce 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -199,6 +199,8 @@ + + 8002000 43100246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_9.0.0_x86_64.xml index b7bd10271a4b..009d14a4a8f8 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -201,6 +201,8 @@ + + 9000000 43100245 v9.0.0 diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml b/tests/qemu= capabilitiesdata/caps_9.1.0_riscv64.xml index 3b1445718a8b..5833e4b26978 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml @@ -160,6 +160,8 @@ + + 9001000 0 v9.1.0 diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml b/tests/qemuca= pabilitiesdata/caps_9.1.0_s390x.xml index 0d566d13d527..c2f2377b8c36 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml @@ -125,6 +125,8 @@ + + 9001000 39100246 v9.1.0 diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_9.1.0_x86_64.xml index aed9ba65646d..e6ef686d3db0 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -200,6 +200,8 @@ + + 9001000 43100246 v9.1.0 diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml b/tests/= qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml index ac25159eff75..179958d331f8 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml @@ -133,6 +133,8 @@ + + 9002002 61700247 diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml b/tests/qemuca= pabilitiesdata/caps_9.2.0_s390x.xml index e1323f9b7291..5bc535a4d172 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml @@ -128,6 +128,8 @@ + + 9002000 39100247 v9.2.0 diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml b/test= s/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml index 96426a28a753..bd11b702e445 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml @@ -204,6 +204,8 @@ + + 9002000 43100247 v9.2.0 diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_9.2.0_x86_64.xml index adb9202ff2e3..2db0672110e9 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml @@ -202,6 +202,8 @@ + + 9002000 43100247 v9.2.0 --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860733; cv=none; d=zohomail.com; s=zohoarc; b=K6F9Yx/zoLbFNuW8My4oq3ywZ48/4OyIoDgh47k4KAXDwZ3Ubd+/MxdjSpSy/PvPu5oYpbGxFdSdDDZxD/8k5wKKfJdYcCy9pf5LKDGu5S7NHFOwuONHCVWIsXiWkFTbqra/TL4MrvazC8So7LasdALT8yEeTLUdalgjrSCU4H4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860733; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=g7e8cfIJiS39qZftv/o6JA5OWUNm5jQ+gGimRfCMBx4=; b=CO482MxM1tQvXhhJGt87HSgWGAQGk+auaV+D7JUeUOcNQ1yVOpAzTVD/XgMIBWAvhBs2DPQu45cPQBM3+GiLL6Iy+g9Huixmkz5QNF8ShH3zNSdR2EtMiv8Y1MVc3ZMDVWfMwLAE1a4+XKiZT6/wM6Mjstu+mXOr17LpByFheYU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860732792571.9331163322469; Mon, 2 Jun 2025 03:38:52 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 9D133131B; Mon, 2 Jun 2025 06:38:51 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A273A1526; Mon, 2 Jun 2025 06:31:34 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A3E7EE97; Mon, 2 Jun 2025 06:31:07 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F26D5E7A for ; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-85-1mD3rW8zOsSEWPdBVHrzvQ-1; Mon, 02 Jun 2025 06:31:04 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43eed325461so27643615e9.3 for ; Mon, 02 Jun 2025 03:31:04 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4efe6c525sm14335410f8f.23.2025.06.02.03.30.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 958ECB55DC79 for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860265; h=from:from: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; bh=wIE/QJbgxB0wB5QCe/CFlbU7kHQDWLVKXPFWu6UHrQ4=; b=PhK+TCAv67MkgGV3f3vb5elo8RQv8b3SnwdBFpljh/GNr1VM/yLj4CRen5UFNkXxQNoNf9 T1NCCuI8Yup0e3ZFZXFrczoHLDIl6pE9fEjcxL/KLLCB4KHqa61Gn0qaSQk7ZlUUjuRgZa SM0Je4GbQsPFo5xXlydtRCAV9akdos4= X-MC-Unique: 1mD3rW8zOsSEWPdBVHrzvQ-1 X-Mimecast-MFC-AGG-ID: 1mD3rW8zOsSEWPdBVHrzvQ_1748860263 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860263; x=1749465063; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wIE/QJbgxB0wB5QCe/CFlbU7kHQDWLVKXPFWu6UHrQ4=; b=vqpzF+bSgPyWrMA08gFS0JgrEJhJLVexBofDagNWkNUkNS+1FiW3YhOz1QUteIXWRt ZJIzrhE3OJJJfDHljzgISEpghNyB2stPPOwIBrsl4+bJpiemOa4jzhSH8hPgKEgCxZjO J3uyeeUsRtoZ7zmI397c4WG4Pu9wx/5Pv4zAVUAZRr1XhMO0JS10iX3bHOgo0utmqPnR JJua+6qUF1/ySepProtsFQaIaSfpzEFFjnyYvZnwMPT4yX3AiHZBlFXSk8eewfnIAABw oarL1KMS1u2KIXX1NY6sChnbUvKLKb+Parz1Mq9bEBUbeJRRBgn6jkSFgDdffZSB/XLv pnsw== X-Gm-Message-State: AOJu0YwfUuDHh83Zzm0wcqgB/PIbSTaUIdiKWP0CBPHa2RUH4J74uCiJ ED0FPmNslFNZySsR1vPnd6BmbDwwQdfeUkWj26FC+MTQVPCPpkK2rr51Zb8L5/pHX2B0ZTVyFm/ bZGCSQze8LiOvwGHUhjOpSfMVr2AkPlnvQUhxibo12owghZxT+5cOVu5qegxxm7/KwPnsNvGEXM FhrO6UaiuzsbQRxjDfuLJDSO28Kzoy0GgA1CforjKaW38= X-Gm-Gg: ASbGncu/FwI62CNbWBXjga/04Un4dE2mMGXU+SYzCE9O0u2/nsTqufScCQPsLcBJ17d 6k71aWFxuUb2WxkElzdxn/ukhbOImGluNKTJQuHZ+AVvX00zuBDP4UJgdhCSjpnrOXGEUhNbUaX TZZgypOCiAd2nctUwtn9kT7SKRw+pmEmLfiRDXtUaPeAfLWS/WZLqZe1QGFbchJEGoY/a9e/Ek1 J9B6E+eq1SZ3dlxTLcghz7rJ8uccqmb1EnpLldGLlCgo6HclmdvBmYh6Y8AVynp0hou0eY88GvB BwMf8n13iPUKiVTM4+Oz X-Received: by 2002:a05:6000:18af:b0:3a3:71c2:f753 with SMTP id ffacd0b85a97d-3a4f89d30ccmr9778214f8f.34.1748860263028; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGjov/sJRMQw24K5BBNjfDaAxUuRb+PlVr3Cpxaqek8eoFvy8TmE8LpwKa9rTxXtOtudu0K1Q== X-Received: by 2002:a05:6000:18af:b0:3a3:71c2:f753 with SMTP id ffacd0b85a97d-3a4f89d30ccmr9778178f8f.34.1748860262408; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 07/11] qemu_capabilities: Add emulated NVMe disk support to domain capabilities Date: Mon, 2 Jun 2025 12:30:50 +0200 Message-ID: <2e84defe9be03f534b1f6522e4a2a193a6e5b546.1748860220.git.mkletzan@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: NMh_N60nf-mW4qvpsHBvgGvpa0SV5Q9xP3NY5OdbE0g_1748860263 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4TJUNXMHRPK4UNTXXA45T2R5M7ADTXRH X-Message-ID-Hash: 4TJUNXMHRPK4UNTXXA45T2R5M7ADTXRH X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860734845116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander This is a separate commit for review ease, but who's really going to use a libvirt with this patch in and the actual functionality missing, that ain't gonna happen, right? Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_capabilities.c | 3 +++ tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_10.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_10.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_10.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_10.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0.ppc.xml | 1 + tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 1 + tests/domaincapsdata/qemu_8.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml | 1 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 1 + 61 files changed, 63 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 848f1cfebf7d..d11112c2be37 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -6476,6 +6476,9 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCaps *qemu= Caps, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_SATA); =20 + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) + VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_NVME); + /* disk->model values */ VIR_DOMAIN_CAPS_ENUM_SET(disk->model, VIR_DOMAIN_DISK_MODEL_VIRTIO); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL)) { diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml b/tests= /domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml index b7fa8daa15af..39e3b4094c1b 100644 --- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml @@ -686,6 +686,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml b/tests/domain= capsdata/qemu_10.0.0-q35.x86_64.xml index e1ff01a7a89a..1dac0cb4a709 100644 --- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml @@ -1547,6 +1547,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml b/tests= /domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml index d8a6fe8354d1..4f0915656f14 100644 --- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml @@ -1655,6 +1655,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml b/tests/domain= capsdata/qemu_10.0.0-tcg.x86_64.xml index 3ce5c0c412b4..2772d8449148 100644 --- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml @@ -1655,6 +1655,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0-virt.aarch64.xml b/tests/doma= incapsdata/qemu_10.0.0-virt.aarch64.xml index 8125821c00bc..aac0fa6a854f 100644 --- a/tests/domaincapsdata/qemu_10.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-virt.aarch64.xml @@ -107,6 +107,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0.aarch64.xml b/tests/domaincap= sdata/qemu_10.0.0.aarch64.xml index 8125821c00bc..aac0fa6a854f 100644 --- a/tests/domaincapsdata/qemu_10.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_10.0.0.aarch64.xml @@ -107,6 +107,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0.ppc64.xml b/tests/domaincapsd= ata/qemu_10.0.0.ppc64.xml index ccedde63d1ce..f596ae972fb3 100644 --- a/tests/domaincapsdata/qemu_10.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_10.0.0.ppc64.xml @@ -61,6 +61,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0.s390x.xml b/tests/domaincapsd= ata/qemu_10.0.0.s390x.xml index cf154c098b35..266a65d9a141 100644 --- a/tests/domaincapsdata/qemu_10.0.0.s390x.xml +++ b/tests/domaincapsdata/qemu_10.0.0.s390x.xml @@ -240,6 +240,7 @@ scsi virtio usb + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml b/tests/dom= aincapsdata/qemu_10.0.0.x86_64+amdsev.xml index 1f852adfae8b..4827150742ad 100644 --- a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml @@ -686,6 +686,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml b/tests/domaincaps= data/qemu_10.0.0.x86_64.xml index 66c4dfed9f50..b472bca40948 100644 --- a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml @@ -1547,6 +1547,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_6.2.0-q35.x86_64.xml index d1a83998120b..dd38511ec047 100644 --- a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml @@ -1012,6 +1012,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_6.2.0-tcg.x86_64.xml index 8c8f01623380..73b799c9f550 100644 --- a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml @@ -1814,6 +1814,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml b/tests/domaincapsda= ta/qemu_6.2.0.ppc64.xml index 39b07955dd84..2608a81189be 100644 --- a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.ppc64.xml @@ -65,6 +65,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml b/tests/domaincapsd= ata/qemu_6.2.0.x86_64.xml index 1f21b8be4edf..d4a869a2a39e 100644 --- a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.x86_64.xml @@ -1012,6 +1012,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_7.0.0-q35.x86_64.xml index 8fa50785b7ee..ed65320d7409 100644 --- a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml @@ -1039,6 +1039,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_7.0.0-tcg.x86_64.xml index 2686989d64a5..02d88891eba7 100644 --- a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml @@ -1838,6 +1838,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml b/tests/domaincapsda= ta/qemu_7.0.0.ppc64.xml index 52c73d10a4ab..7aee664dc697 100644 --- a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.ppc64.xml @@ -65,6 +65,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml b/tests/domaincapsd= ata/qemu_7.0.0.x86_64.xml index 6ab377445299..595861141484 100644 --- a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.x86_64.xml @@ -1039,6 +1039,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_7.1.0-q35.x86_64.xml index 75565c44955e..9e6f277cbfe3 100644 --- a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml @@ -1006,6 +1006,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_7.1.0-tcg.x86_64.xml index 4e44dbaf659b..1a059c66d0ce 100644 --- a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml @@ -1786,6 +1786,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml b/tests/domaincapsda= ta/qemu_7.1.0.ppc64.xml index ca0bc6f0b5af..a9de7f426389 100644 --- a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.ppc64.xml @@ -60,6 +60,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml b/tests/domaincapsd= ata/qemu_7.1.0.x86_64.xml index 898b081df0c0..b61320390321 100644 --- a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.x86_64.xml @@ -1006,6 +1006,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml b/tests/dom= aincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml index 0fbbc8118c85..b6b7620ffee3 100644 --- a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml @@ -1011,6 +1011,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_7.2.0-q35.x86_64.xml index cfbe7e5dd11b..d976abde9b03 100644 --- a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml @@ -1011,6 +1011,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml b/tests/dom= aincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml index 805a636ec6c2..360769bf3077 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml @@ -1491,6 +1491,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_7.2.0-tcg.x86_64.xml index 805a636ec6c2..360769bf3077 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml @@ -1491,6 +1491,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0.ppc.xml b/tests/domaincapsdata= /qemu_7.2.0.ppc.xml index 21dbe730c5c1..6c763a2646f5 100644 --- a/tests/domaincapsdata/qemu_7.2.0.ppc.xml +++ b/tests/domaincapsdata/qemu_7.2.0.ppc.xml @@ -54,6 +54,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml b/tests/domaincapsd= ata/qemu_7.2.0.x86_64.xml index 2b402f59c80d..e75cdbdc514d 100644 --- a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0.x86_64.xml @@ -1011,6 +1011,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_8.0.0-q35.x86_64.xml index c1f7b96465eb..0a01cce8ada1 100644 --- a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml @@ -1093,6 +1093,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_8.0.0-tcg.x86_64.xml index 4d8d4c77021b..470d9f8e73ff 100644 --- a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml @@ -1586,6 +1586,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml b/tests/domaincapsd= ata/qemu_8.0.0.x86_64.xml index 7db506386cdd..02ea89e3a1bd 100644 --- a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml @@ -1093,6 +1093,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_8.1.0-q35.x86_64.xml index 4c9b674c1ed2..4d185761b0c9 100644 --- a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml @@ -1352,6 +1352,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_8.1.0-tcg.x86_64.xml index 52f0d339bb6c..b5d0885067e1 100644 --- a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml @@ -1608,6 +1608,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml b/tests/domaincapsd= ata/qemu_8.1.0.x86_64.xml index 8389909b747f..f695c21f4e23 100644 --- a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml @@ -1352,6 +1352,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_8.2.0-q35.x86_64.xml index dcb46e06ea6a..9e36dcde711b 100644 --- a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml @@ -1353,6 +1353,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml b/tes= ts/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml index 8aeab0bbdb71..fcae4fd62282 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml @@ -59,6 +59,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_8.2.0-tcg.x86_64.xml index fae61e895522..2979d1c17649 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml @@ -1574,6 +1574,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml b/tests/domai= ncapsdata/qemu_8.2.0-virt.aarch64.xml index e5c49e909539..cdef52558515 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml @@ -107,6 +107,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml b/tests/d= omaincapsdata/qemu_8.2.0-virt.loongarch64.xml index 5637efb4127e..e448e0c15a5a 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml @@ -63,6 +63,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml b/tests/domaincaps= data/qemu_8.2.0.aarch64.xml index e5c49e909539..cdef52558515 100644 --- a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.aarch64.xml @@ -107,6 +107,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml b/tests/domaincapsd= ata/qemu_8.2.0.armv7l.xml index 2e3514471f73..5add866c69e9 100644 --- a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml +++ b/tests/domaincapsdata/qemu_8.2.0.armv7l.xml @@ -56,6 +56,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0.s390x.xml b/tests/domaincapsda= ta/qemu_8.2.0.s390x.xml index e7834e19821c..d556d93aa218 100644 --- a/tests/domaincapsdata/qemu_8.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_8.2.0.s390x.xml @@ -329,6 +329,7 @@ scsi virtio usb + nvme virtio diff --git a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml b/tests/domaincapsd= ata/qemu_8.2.0.x86_64.xml index 97b3795b5a80..59227efe9a67 100644 --- a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml @@ -1353,6 +1353,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_9.0.0-q35.x86_64.xml index d55bc239a955..9b63893f4632 100644 --- a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml @@ -1353,6 +1353,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_9.0.0-tcg.x86_64.xml index 48300b14f58b..6d8a1d6196b7 100644 --- a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml @@ -1503,6 +1503,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml b/tests/domaincapsd= ata/qemu_9.0.0.x86_64.xml index 52f01a7cfc22..38f3161529de 100644 --- a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml @@ -1353,6 +1353,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_9.1.0-q35.x86_64.xml index 5449244329dd..d961ab33dd6a 100644 --- a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml @@ -1489,6 +1489,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml b/tests/d= omaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml index 1abc098bc3d0..8444939b5339 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml @@ -69,6 +69,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_9.1.0-tcg.x86_64.xml index 927a5a6d3609..56eeddf2682e 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml @@ -1608,6 +1608,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml b/tests/domai= ncapsdata/qemu_9.1.0-virt.riscv64.xml index 5ff79a9244cb..46322170b993 100644 --- a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml @@ -58,6 +58,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0.s390x.xml b/tests/domaincapsda= ta/qemu_9.1.0.s390x.xml index c335cb8339c3..7e768af379b9 100644 --- a/tests/domaincapsdata/qemu_9.1.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.1.0.s390x.xml @@ -192,6 +192,7 @@ scsi virtio usb + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml b/tests/domaincapsd= ata/qemu_9.1.0.x86_64.xml index dc2521135c36..3846a9b9b2e8 100644 --- a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml @@ -1489,6 +1489,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml b/tests/do= maincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml index 84f9ca786bb7..a09f1a212c6d 100644 --- a/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml +++ b/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml @@ -106,6 +106,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml b/tests/= domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml index 62c61b9de5f7..d20b03931513 100644 --- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml @@ -686,6 +686,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml b/tests/domainc= apsdata/qemu_9.2.0-q35.x86_64.xml index 49f5e64bfaa7..f051b30ce6d1 100644 --- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml @@ -1547,6 +1547,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml b/tests/= domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml index 265680b197f1..ed0bad007ea7 100644 --- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml @@ -1655,6 +1655,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml b/tests/domainc= apsdata/qemu_9.2.0-tcg.x86_64.xml index 884228db7284..256b340412f4 100644 --- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml @@ -1655,6 +1655,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0.s390x.xml b/tests/domaincapsda= ta/qemu_9.2.0.s390x.xml index e12aa5627bb6..a65e1cab7306 100644 --- a/tests/domaincapsdata/qemu_9.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.2.0.s390x.xml @@ -192,6 +192,7 @@ scsi virtio usb + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml b/tests/doma= incapsdata/qemu_9.2.0.x86_64+amdsev.xml index ee82f2905ba9..20e41d5a88fc 100644 --- a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml @@ -686,6 +686,7 @@ virtio usb sata + nvme virtio diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml b/tests/domaincapsd= ata/qemu_9.2.0.x86_64.xml index d587c1316a34..4135990230ee 100644 --- a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml @@ -1547,6 +1547,7 @@ virtio usb sata + nvme virtio --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860471; cv=none; d=zohomail.com; s=zohoarc; b=M4+g4ullkKGbZSGR2WHb+7025YlEAJp1e46zqSsuZXZhkDCfNKLsYxt9F61CY0xhI1rnFMXsBa0Jf5ynwA+DJ7uyp0e3E5TBJ2YBnj+zO617ll8SoUKCzVIFxi/OXibrgbhQ+9WClBD25apCiapF6p3mLABPMl7H2ILTl28GI1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860471; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=UF8Ta7rbuU4+oiRjcDZ6KWGfV0rGyLcKN2jOaAWeAJ0=; b=mzlkqbyTvpOYzrcSaK6oUrVp/c6Y4n1ps5lyqMLNObvVUdCtvXQCzRT8/6e28tgDNkP/sdzxlgS0oJvWZBIxN7hWc7fBRYDfk5gGywmBJBoZ5lBY+l9WFAPyQMmVnxG8sfw3Zzs0Mn7TpFMLkkRnKN5FHCOmUry4nHHH5sSXrBo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860471216310.6511341979084; Mon, 2 Jun 2025 03:34:31 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 220FB1477; Mon, 2 Jun 2025 06:34:30 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3915F137A; Mon, 2 Jun 2025 06:31:19 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A4789E8C; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 121A9E79 for ; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-19-yU4qtujPNt231XdHVzO12Q-1; Mon, 02 Jun 2025 06:31:03 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-442fda1cba7so19393285e9.1 for ; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d30e2746sm82664525e9.1.2025.06.02.03.30.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id A269CB55DC7A for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860264; h=from:from: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; bh=WbJmbAEnvdFqqipYgExs8S7RN5pCI9UaCdqISUUc8zQ=; b=LDRm7jusEr1iMm03q3KMy/apUqFl32YMXK1/v92nmdRFG2owpFg4tD0lECZNqN1tQHNk/e HBbfWXzgo0ZbMknLpA1GIhGWhsHlkuavx6XbYzUAKjtD9OUnfPes6ChAL+khX5rzw1vE8k AI5e2oKOIu4RWWSODZGWttE0ZKilN/M= X-MC-Unique: yU4qtujPNt231XdHVzO12Q-1 X-Mimecast-MFC-AGG-ID: yU4qtujPNt231XdHVzO12Q_1748860263 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860262; x=1749465062; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WbJmbAEnvdFqqipYgExs8S7RN5pCI9UaCdqISUUc8zQ=; b=pjB5u+FnpFyyUmzXAr4NAuANYe1AV9mlCc05cfMW9jy+keKzxyJXGnOhwkPxpRZ3QT chwYsEsaTYZ8c6zJTfzhYxJlFGMLfzbZLGE44yVtY6ccFj/fYhIpGbn7kv3NYiY8qHs/ llNRshqThLc0QrtgMjO3QcZB7bFZzwCEok7I9zImPqgxoNJzJTw5+SMQSkdvt5ruynho bgxOT0CuE1JZ3wnvnWwMjxwAGaRwwchPx7xRGh89BUPOQWYl4fa1qGxD0dj4pWx7aLhl JwATFX9ypqGyLn0QhtDd6EQ7QUO6kXFTRrA+ceWFgavQNUjF2q4ovzPBDTWGw0F42WuR 49bA== X-Gm-Message-State: AOJu0YzU3rpm5x5R8s9R1IUTk4+z8Lh2T4+CYNEEFRHLSW7XBgPhowWq wl6uZROjgSyVAJMmilKPlav042r4ONyszqDMEemxFZIUjCa6s3HfLUp0Rr6cUlCOxAuvhqivvpZ 9KmpA6Y3gMy0wboS81V6BKVXpqNKHJ1co9Pwe7IgIs6xa3Svc4GsZTv2y67Ia1TVSS3wt75GZdd NQ5CAYLs/+bCvCNqHtmrTvIiHIDvo3X54REtIAisVQGkM= X-Gm-Gg: ASbGncu6P2FwpE3927/zq7CAlSv3aoy5l2U589Arw/48IBywNorunBhgpbPsCqJjDYG iTmSzruUX4a6qqWEN2S7GOS7VH2h0dspEVgmMFZiOp8+cJEnAamMnnCBeIOuHgpMehhtDSg66HF 8JgqPyi1IXqJX4IzEmM2VzSUD50/vjw4+8L8wFYLk19/Kfc5ujvHd2rS2Om6n7BwdyQIWh6gyo8 IvsxENoxFvJRUCMy1hpfM8XwswidKwrZ4AXqHt2m2vXbXJ8iescELhAh6SCWmBnpcVIoAAju357 VZgqa1rrA+FYYIq6+s03BLzfRgQogkE= X-Received: by 2002:a05:600c:45d0:b0:43b:ca39:6c7d with SMTP id 5b1f17b1804b1-450d882b1e0mr120696555e9.3.1748860262520; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkVhbqOuItuxY1U6QGb4XGnhMggr73n8uMoBFFkRlLz8OvntDL5chNykMoAJTMSjbb9Q0Krg== X-Received: by 2002:a05:600c:45d0:b0:43b:ca39:6c7d with SMTP id 5b1f17b1804b1-450d882b1e0mr120696085e9.3.1748860262015; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 08/11] qemu: Add support for NVMe controllers Date: Mon, 2 Jun 2025 12:30:51 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: YzSFzmTicadYaaVOxvHBlH_4CabF58B622VobKgvWSE_1748860263 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LEU3EJXWCAVFBJFZSVLPMYVUO4DZKKLJ X-Message-ID-Hash: LEU3EJXWCAVFBJFZSVLPMYVUO4DZKKLJ X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860473396116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Without any hotplug. Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 12 ++++++++++ src/qemu/qemu_domain_address.c | 2 ++ src/qemu/qemu_hotplug.c | 3 ++- src/qemu/qemu_validate.c | 44 +++++++++++++++++++++++++++------- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 528a8fc8ca86..9ec9ce343b50 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2854,6 +2854,17 @@ qemuBuildControllerDevProps(const virDomainDef *doma= inDef, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (virJSONValueObjectAdd(&props, + "s:driver", "nvme", + "s:id", def->info.alias, + "s:serial", def->opts.nvmeopts.serial, + "p:num_queues", def->queues, + "T:ioeventfd", def->ioeventfd, + NULL) < 0) + return -1; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -3016,6 +3027,7 @@ qemuBuildControllersCommandLine(virCommand *cmd, VIR_DOMAIN_CONTROLLER_TYPE_IDE, VIR_DOMAIN_CONTROLLER_TYPE_SATA, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, }; =20 for (i =3D 0; i < G_N_ELEMENTS(contOrder); i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 9b2faf1e8e37..bb86cfa0c3f3 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -617,6 +617,8 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + return pciFlags; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9427eec64384..e1ed8181e303 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5941,7 +5941,8 @@ qemuDomainDetachPrepController(virDomainObj *vm, int idx; virDomainControllerDef *controller =3D NULL; =20 - if (match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { + if (match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI && + match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("'%1$s' controller cannot be hot unplugged."), virDomainControllerTypeToString(match->type)); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index a264185f5f43..8730cf4e941f 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3633,6 +3633,26 @@ qemuValidateDomainDeviceDefControllerSATA(const virD= omainControllerDef *controll } =20 =20 +static int +qemuValidateDomainDeviceDefControllerNVME(const virDomainControllerDef *co= ntroller, + const virDomainDef *def G_GNUC_U= NUSED, + virQEMUCaps *qemuCaps) +{ + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("NVMe controllers are not supported with this QEM= U binary")); + } + + if (!controller->opts.nvmeopts.serial) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Missing mandatory serial for NVMe controller")); + return -1; + } + + return 0; +} + + static int qemuValidateDomainDeviceDefControllerIDE(const virDomainControllerDef *con= troller, const virDomainDef *def) @@ -3804,10 +3824,17 @@ qemuValidateDomainDeviceDefControllerAttributes(con= st virDomainControllerDef *co (controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_SCSI || controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_TRANSITIONAL || controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_NON_TRANSITIONAL))) { - if (controller->queues) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("'queues' is only supported by virtio-scsi co= ntroller")); - return -1; + if (controller->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME) { + if (controller->queues) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'queues' is only supported by virtio-scs= i and nvme controllers")); + return -1; + } + if (controller->ioeventfd) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'ioeventfd' is only supported by virtio-= scsi and nvme controllers")); + return -1; + } } if (controller->cmd_per_lun) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -3819,11 +3846,6 @@ qemuValidateDomainDeviceDefControllerAttributes(cons= t virDomainControllerDef *co _("'max_sectors' is only supported by virtio-sc= si controller")); return -1; } - if (controller->ioeventfd) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("'ioeventfd' is only supported by virtio-scsi= controller")); - return -1; - } if (controller->iothread) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'iothread' is only supported for virtio-scsi= controller")); @@ -4408,6 +4430,10 @@ qemuValidateDomainDeviceDefController(const virDomai= nControllerDef *controller, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + ret =3D qemuValidateDomainDeviceDefControllerNVME(controller, def, + qemuCaps); + break; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: --=20 2.49.0 From nobody Mon Sep 8 21:39:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860769; cv=none; d=zohomail.com; s=zohoarc; b=Efgu4ADGlj3e2qHDArLPoNpFBNXfQ2sKYJ/YhtO1PAogM69B+F0HS2Qlwam9X79VYV2ulZC9mhDoK89Od9HZvexxpfu1nlDtJ+mgoklgyEKhcBZj6bX+7hPqnuzSRoysSuSl67Ww/XY0dbxMvuYe1U9uScDy+V2Dy4Ah6oJsLR8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860769; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=V1jH5zaC9vJc43rkAVx4rG8OxlXw9yBBj9kz3DEp6Xw=; b=KMOEZpz3v76jiTRAIV/AqH+EfB2Ln2zMbvW0dU1gQravkzLU9MQIq0u8cmCRb7biko4R97Sk+n1YUlVE3GADykjAA1PmcpE7ZzRAkjKWvL6ArGQ59PSn/SLKY121YDmRdzf5WGMyT8RsGhTdi8fJ4SulZg5cuPy2oHcNkONAEU8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860769259720.8140221826574; Mon, 2 Jun 2025 03:39:29 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 4F94D144D; Mon, 2 Jun 2025 06:39:28 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 858F91538; Mon, 2 Jun 2025 06:31:38 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 0CB631386; Mon, 2 Jun 2025 06:31:09 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 2F1AEE7D for ; Mon, 2 Jun 2025 06:31:07 -0400 (EDT) Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-694-lDhh1vptMdOrBiTNgsR6BQ-1; Mon, 02 Jun 2025 06:31:05 -0400 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-3a4ff581df3so777309f8f.1 for ; Mon, 02 Jun 2025 03:31:04 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4f0097539sm14721917f8f.63.2025.06.02.03.30.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id AF0E5B55DC7B for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860266; h=from:from: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; bh=tVnxIQJFVJbf4MNKdZK0SXU5Kgjl4hDfneoz7oi/N/g=; b=SrdX56X7EWHnBqnl+uD/CXZF2YuXZys3VbQhM3Ov36qyKmyWZRPpBFb5dHORKDxfTmz4kX G3/zc24Dgg71utk9oxyfYEt47Wu6QAxIhGrq48C/rXfmsn6RfvkG52KzNazA/L26b72aGE MTL8WL7/FWMUfjL3w5yTpV21JokMcvk= X-MC-Unique: lDhh1vptMdOrBiTNgsR6BQ-1 X-Mimecast-MFC-AGG-ID: lDhh1vptMdOrBiTNgsR6BQ_1748860264 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860264; x=1749465064; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tVnxIQJFVJbf4MNKdZK0SXU5Kgjl4hDfneoz7oi/N/g=; b=F4+JfBF26tfPROdWHdo5xE7IZHWuQpuqnIk3thHRH+Qi72sTxszxaf6uZM+IvpRd3l N53WkYwQ8CA6OfRDozFMZwMts5+FjPeg93spIvQrkD2JTQqiBxrLX3RC7ARNky+FkpBa 8igpRVFiLBSg2lTAfSyj38rf7wATJHmfvgK5y0Oamft/051cvuHiRbfFq5qEYYL6YyCj SbEa7823D1/mItpQ72k5m8sak+o48VmuYncLJBZr9E2iE/nMPV/oQwaqPQ6Q9kmAFjxh u+J/HAgEBfnuZVutRl5RROhTP69r22UVTmPLFnPINb/S3jAbCh1q0KWOB2d24wyoXB9R kBDQ== X-Gm-Message-State: AOJu0YxYt7da3IARaxrRakb444XaGIT1r5rYjijf/oKiDpDG1t3GQxEw GoRF0BICewig4sqG6jjIDOAA2Qae5kIG8XZoaCE+xdD7GxB4lISjUpzEUTRxNcfkd4gthUPLBen HrWDIJYmTskrgGk728xetm8EtFQMy3DujWmwZpS5LalH4Ms50j/8/4SQ18YaY7uriM8X2DWDCbw 9fA4fjZXIw/Ee6nYYEzOQVdGBNBaYRI+n4duapIg2e+q8= X-Gm-Gg: ASbGnctg/8loZWJGOgoCd4L2mXVj59uW8+pmOliS+v2u7QeWCs3616Mbqmqr7cKG+v8 GpmYhubAH2ZK5JEZ6k9qtEhRxpTPHNQQUoM77vJ4cO+TcC52PC+rh1VguGL/3BEDkWq8AYNQmnz k1DJKYpvpfTCPlvIk+r9o9FGRJBqIP5MxJZBlbBTv14vhE8/8X648be8+Eyb/V7xD/zE2IKSvVR CIw4XRhZnSQTtW0AzOsGHJFi1KF8ypeFuUu2SgU7TtBDf2PGlzFELoWtl10tSAZRbRJCMiMcO+y ophNuJGjCEwMYBEmf0OF X-Received: by 2002:a05:6000:4282:b0:3a4:c71a:8119 with SMTP id ffacd0b85a97d-3a4f79e7555mr11376891f8f.25.1748860263676; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFuDVffOx7YI45QNjd+x327/PITh7tlhl/YfdFKGJdTtaz5LZ3gPdRMY+0Korask98vzWY+DQ== X-Received: by 2002:a05:6000:4282:b0:3a4:c71a:8119 with SMTP id ffacd0b85a97d-3a4f79e7555mr11376857f8f.25.1748860263186; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 09/11] qemu: Add support for emulated NVMe disks Date: Mon, 2 Jun 2025 12:30:52 +0200 Message-ID: <1e77c90c8b14a092b7232939fb7e74f57e0cfa57.1748860220.git.mkletzan@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: dJtpjXHggicD0qXTp5mZDI1hfwfQnYq0tfpxv63Rfts_1748860264 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VKLUVPFBYE75QAV3GJ3V3SR25RJTENLT X-Message-ID-Hash: VKLUVPFBYE75QAV3GJ3V3SR25RJTENLT X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860771460116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Without any hotplug. Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 18 ++++++- src/qemu/qemu_validate.c | 13 +++++ .../disk-target-nvme.x86_64-latest.args | 39 ++++++++++++++ .../disk-target-nvme.x86_64-latest.xml | 53 +++++++++++++++++++ tests/qemuxmlconfdata/disk-target-nvme.xml | 32 +++++++++++ tests/qemuxmlconftest.c | 1 + 6 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.ar= gs create mode 100644 tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/disk-target-nvme.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9ec9ce343b50..78bcae380c14 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -533,6 +533,18 @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props, break; =20 case VIR_DOMAIN_DISK_BUS_NVME: + if (!(controllerAlias =3D virDomainControllerAliasFind(domainDef, + VIR_DOMAIN_CO= NTROLLER_TYPE_NVME, + info->addr.dr= ive.controller))) + return -1; + + if (virJSONValueObjectAdd(&props, + "s:bus", controllerAlias, + "u:nsid", info->addr.drive.unit + 1, + NULL) < 0) + return -1; + break; + case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_XEN: @@ -1724,6 +1736,9 @@ qemuBuildDiskDeviceProps(const virDomainDef *def, break; =20 case VIR_DOMAIN_DISK_BUS_NVME: + driver =3D "nvme-ns"; + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: @@ -1793,7 +1808,8 @@ qemuBuildDiskDeviceProps(const virDomainDef *def, if (disk->geometry.trans !=3D VIR_DOMAIN_DISK_TRANS_DEFAULT) biosCHSTrans =3D virDomainDiskGeometryTransTypeToString(disk->geom= etry.trans); =20 - if (disk->serial) { + /* NVMe disks have serial numbers attached to controllers, not namespa= ces */ + if (disk->serial && disk->bus !=3D VIR_DOMAIN_DISK_BUS_NVME) { virBuffer buf =3D VIR_BUFFER_INITIALIZER; =20 virBufferEscape(&buf, '\\', " ", "%s", disk->serial); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 8730cf4e941f..1da5771877ed 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3204,6 +3204,19 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDom= ainDiskDef *disk, break; =20 case VIR_DOMAIN_DISK_BUS_NVME: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("NVMe disks are not supported with this QEMU = binary")); + return -1; + } + + if (disk->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected address type for nvme disk")); + return -1; + } + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: diff --git a/tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.args b/te= sts/qemuxmlconfdata/disk-target-nvme.x86_64-latest.args new file mode 100644 index 000000000000..9551f1f2904b --- /dev/null +++ b/tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-bar \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-bar/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-bar/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-bar/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3Dbar,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-bar/master-key.aes"}' \ +-machine pc,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Doff \ +-accel tcg \ +-cpu qemu64 \ +-m size=3D219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}'= \ +-overcommit mem-lock=3Doff \ +-smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-uuid 00010203-0405-4607-8809-0a0b0c0d0e0f \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot strict=3Don \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ +-device '{"driver":"nvme","id":"nvme0","serial":"abcdefgh","bus":"pci.0","= addr":"0x2"}' \ +-device '{"driver":"nvme","id":"nvme1","serial":"ASDF","num_queues":4,"ioe= ventfd":true,"bus":"pci.0","addr":"0x3"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","no= de-name":"libvirt-2-storage","read-only":false}' \ +-device '{"driver":"nvme-ns","bus":"nvme0","nsid":1,"drive":"libvirt-2-sto= rage","id":"nvme0-0-0","bootindex":1}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest2","no= de-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"nvme-ns","bus":"nvme0","nsid":2,"drive":"libvirt-1-sto= rage","id":"nvme0-0-1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","add= r":"0x4"}' \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.xml b/tes= ts/qemuxmlconfdata/disk-target-nvme.x86_64-latest.xml new file mode 100644 index 000000000000..2a46300e6d36 --- /dev/null +++ b/tests/qemuxmlconfdata/disk-target-nvme.x86_64-latest.xml @@ -0,0 +1,53 @@ + + bar + 00010203-0405-4607-8809-0a0b0c0d0e0f + 219136 + 219136 + 1 + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + + + abcdefgh +
+ + + abcdefgh +
+ + + ASDF + +
+ + +
+ + + + +