From nobody Fri Dec 12 14:07:31 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=pass; 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1761650310; cv=none; d=zohomail.com; s=zohoarc; b=YNgGIziz+pOaIeos3OXoIQhpObhDfAUlFBXsQQhUei9hLboABd9R9kpuy4caLCBVfP1gOYgcB60PP0KT45s6Cj+Br5kL74EN9LnL8DhYr5HRUk2TVJYQcSIbZAl2aFGftOPB1E3N4JwTik9ReuI1gy5lP9Ky8gH5vXT6bgbmFiM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761650310; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=jQ51FAtMWH9oz3zQUoBZSDG8VBgzV7k6n5p0JbcLz6s=; b=HgvDJCw5/J2SX8b4IW957RF22UAHme/MOpZWy3IFr/Ye/Z6qkGO1GKb9KFrtwEU/zM8sZNU48v/8wrCXkAO+yF4EbIdHGoRh2kxKB/MEzQoWZini9iqxERBT0yJgk0aaFovS/B+tsZGAcR9Kp4y9kmowucb6oe5tqHvDByM0ics= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1761650310512836.0482123544945; Tue, 28 Oct 2025 04:18:30 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8CC29417E8; Tue, 28 Oct 2025 07:18:17 -0400 (EDT) Received: from [172.19.199.25] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B844F3F969; Tue, 28 Oct 2025 07:16:44 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1A5CA4655D; Sat, 25 Oct 2025 04:18:02 -0400 (EDT) Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 29F7A4655E for ; Sat, 25 Oct 2025 04:18:01 -0400 (EDT) Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b6d78062424so352123366b.1 for ; Sat, 25 Oct 2025 01:18:01 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b6d85398463sm139688766b.34.2025.10.25.01.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 01:17:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761380279; x=1761985079; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jQ51FAtMWH9oz3zQUoBZSDG8VBgzV7k6n5p0JbcLz6s=; b=YUdQycaYomeaDfw2BUHpwaZbHxYXZYOed9HHKaOSR3BrLRWJmy8yxj03YJcxhKUzzk ZVwJD9i5lESpWVIsB7AAYDKKaImTTWscApfuk9A1wvRdTT+fdKnE9KUeKl0BuABR69WJ BehJc2oH7cuY4ilpBRUWK1wDGCRLZkoQ0jkawFst0jP7kphxo2GEf/rY0D71gYSAPnv0 vYXmM4X7Yl8XHaNu8ITG3nEVKdB1t2Z8x15i+EEM8ObSetRPfHP6esfYhj9Bq7KheP64 bDFlJmgYCzRIQDVrU5tvVCRV+rxJmrWQWGTTF4RkxjQf5Cz+ETAHqMrxmrvH7qZdVvBq 9dPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761380279; x=1761985079; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jQ51FAtMWH9oz3zQUoBZSDG8VBgzV7k6n5p0JbcLz6s=; b=anJ/AXY9l7yT/iLmpNjrbLTVe7SjoSdtXF3gdM85FqcRvNzOP4qCPEolfS+aMzbiDt 5fTCfwP9lRYPz/8ZSmxVzzwNGAwPd73FMsaL6e8BaK1SuuqncYrQ8Ggm4UeJ+IgH1tAT bzj3LqkhxYiJhUaYc2vgZTuN1qRDs1CD6pa+l1Uvt8UajZrx49ABNxuJq/CMQfxMTYxv XlKPT2wPdk0Ut1X41MkB7OPZeGisk9HwJ2XrZ7HhFq9USpHGnDqOPZxA/Qg8uLYq5pAQ ntJMqvS3jnFhfqvP6E41s+kRy74wHmxcb74tbf5jwwjINAnPa4DEizyO4nXtpGDbBuRx 9sIg== X-Gm-Message-State: AOJu0YxbHyVm4M80hWJECU8tgK6nt/AGQfmWO/R9xEOL2Fw8F859EVsp aX8GTRxbvjE1vqR93OofZzFUA+foFeK/plgrKhibReL0f1bemBuJl0vkMrtijTnDD92mVA== X-Gm-Gg: ASbGncvyxZLXH5PggoiPLsniJfhqs6zvMPMeIAFYMX0weE3QR7SOZOP28hEWFOcWD+o pCdmRPg0xHTedA20EPFp+JF+ZHYhvkkEPHDMFRDBmM/PWlJk+zVLF8pz5GQerBgDsn2NJdUS1Po FXzm6EbGgJRwEEe3Ak89sZO4idN5Rl3heEETktxlqxOTIlUHiRt56d2VBuJY9YEH+a8jzvZbF13 o/DYV4FVq4kbmgNkYeAou/KNjjG2Ymk155yhKbzECuLHat/hcDoAh7RPncAOhEXs0g+9JRuHpya 6RsNiaM+XMLmU9w0DUje1sgioC+hAXTb0YHUzk91Q7kfU6FYdXVEivYayq7utjju/Bf4xmdSGYt FMG7eTAHnGXt3Gdet8HQqXPzLajIQ3fFcsJsovBG+RTEy27rKM7fWG00TxOn7tsGbw/85BDnFg6 EBPrf308REYPsH/kZO4zF0Rc3/qQRj4X1WrP24H3x7W0cPNg== X-Google-Smtp-Source: AGHT+IEgPTbmBPp1RpcSg3kWHRT2glY2rTUPbbcFsbs/Le03y5cCEon3xc7HDyjqcDTv78pXD54jxA== X-Received: by 2002:a17:907:25c5:b0:b40:da21:bf38 with SMTP id a640c23a62f3a-b6474b36a51mr3588100466b.36.1761380279102; Sat, 25 Oct 2025 01:17:59 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 1/4] bhyve: implement NVMe device support Date: Sat, 25 Oct 2025 10:15:55 +0200 Message-ID: <20251025081558.18715-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251025081558.18715-1-bogorodskiy@gmail.com> References: <20251025081558.18715-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: PEM6MR23AFVX7GMWPNZOQP3EUBGGM3TH X-Message-ID-Hash: PEM6MR23AFVX7GMWPNZOQP3EUBGGM3TH X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1761650313388154100 Content-Type: text/plain; charset="utf-8" NVMe devices in bhyve are modeled this way: -s $pciaddr,nvme,devpath[,opts] devpath can be a path to the image or the block device. It also can be "ram=3Dsize_in_MiB", but this is not covered by this series. There could be only a single device per PCI address. Optional configuration options (such as max number of queues, concurrent I/O requests, etc) are also not covered by this series. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_capabilities.c | 14 +++++++ src/bhyve/bhyve_capabilities.h | 1 + src/bhyve/bhyve_command.c | 41 ++++++++++++++++++- src/bhyve/bhyve_device.c | 1 + src/bhyve/bhyve_domain.c | 15 +++++-- .../bhyvexml2argvdata/bhyvexml2argv-nvme.args | 9 ++++ .../bhyvexml2argv-nvme.ldargs | 4 ++ .../bhyvexml2argvdata/bhyvexml2argv-nvme.xml | 16 ++++++++ tests/bhyvexml2argvtest.c | 4 +- .../bhyvexml2xmlout-nvme.xml | 27 ++++++++++++ tests/bhyvexml2xmltest.c | 1 + 11 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-nvme.args create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-nvme.ldargs create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-nvme.xml create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-nvme.xml diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 04a5a4cf29..aad757e801 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -355,6 +355,17 @@ bhyveProbeCapsVirtioRnd(unsigned int *caps, char *bina= ry) } =20 =20 +static int +bhyveProbeCapsNvme(unsigned int *caps, char *binary) +{ + return bhyveProbeCapsDeviceHelper(caps, binary, + "-s", + "0,nvme", + "pci slot 0:0: unknown device \"nvme= \"", + BHYVE_CAP_NVME); +} + + int virBhyveProbeCaps(unsigned int *caps) { @@ -395,6 +406,9 @@ virBhyveProbeCaps(unsigned int *caps) if ((ret =3D bhyveProbeCapsVirtioRnd(caps, binary))) goto out; =20 + if ((ret =3D bhyveProbeCapsNvme(caps, binary))) + goto out; + out: VIR_FREE(binary); return ret; diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h index 9b24241dc1..500b235397 100644 --- a/src/bhyve/bhyve_capabilities.h +++ b/src/bhyve/bhyve_capabilities.h @@ -54,6 +54,7 @@ typedef enum { BHYVE_CAP_VNC_PASSWORD =3D 1 << 8, BHYVE_CAP_VIRTIO_9P =3D 1 << 9, BHYVE_CAP_VIRTIO_RND =3D 1 << 10, + BHYVE_CAP_NVME =3D 1 << 11, } virBhyveCapsFlags; =20 int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps); diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index ab6d6e92e4..9f2d02b484 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -328,6 +328,38 @@ bhyveBuildUSBControllerArgStr(const virDomainDef *def, return 0; } =20 +static int +bhyveBuildNVMeControllerArgStr(const virDomainDef *def, + virDomainControllerDef *controller, + struct _bhyveConn *driver G_GNUC_UNUSED, + virCommand *cmd) +{ + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + const char *disk_source; + size_t i; + + for (i =3D 0; i < def->ndisks; i++) { + virDomainDiskDef *disk =3D def->disks[i]; + + if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_NVME) + continue; + + if (disk->info.addr.drive.controller !=3D controller->idx) + continue; + + VIR_DEBUG("disk %zu controller %d", i, controller->idx); + + disk_source =3D virDomainDiskGetSource(disk); + + virCommandAddArg(cmd, "-s"); + virCommandAddArgFormat(cmd, "%d:0,nvme,%s", + controller->info.addr.pci.slot, + disk_source); + } + + return 0; +} + static int bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_GNUC_UNUSED, virDomainDiskDef *disk, @@ -370,6 +402,9 @@ bhyveBuildDiskArgStr(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: /* Handled by bhyveBuildAHCIControllerArgStr() */ break; + case VIR_DOMAIN_DISK_BUS_NVME: + /* Handled by bhyveBuildNVMeControllerArgStr() */ + break; case VIR_DOMAIN_DISK_BUS_VIRTIO: if (bhyveBuildVirtIODiskArgStr(def, disk, cmd) < 0) return -1; @@ -382,7 +417,6 @@ bhyveBuildDiskArgStr(const virDomainDef *def, 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_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -432,13 +466,16 @@ bhyveBuildControllerArgStr(const virDomainDef *def, virCommandAddArgFormat(cmd, "%d:0,lpc", controller->info.addr.pci.slot); break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (bhyveBuildNVMeControllerArgStr(def, controller, driver, cmd) <= 0) + return -1; + break; case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: 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/bhyve/bhyve_device.c b/src/bhyve/bhyve_device.c index 68983d5bc4..49cfccaeba 100644 --- a/src/bhyve/bhyve_device.c +++ b/src/bhyve/bhyve_device.c @@ -114,6 +114,7 @@ bhyveAssignDevicePCISlots(virDomainDef *def, for (i =3D 0; i < def->ncontrollers; i++) { if ((def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_P= CI) || (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_S= ATA) || + (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_N= VME) || ((def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_= USB) && (def->controllers[i]->model =3D=3D VIR_DOMAIN_CONTROLLER_MODE= L_USB_NEC_XHCI)) || def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IS= A) { diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 9dec300a99..79ac336430 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -111,9 +111,10 @@ bhyveDomainDiskDefAssignAddress(struct _bhyveConn *dri= ver, virDomainDiskDef *def, const virDomainDef *vmdef G_GNUC_UNUSED) { - int idx =3D virDiskNameToIndex(def->dst); + int idx =3D -1; + int nvme_ctrl =3D 0; =20 - if (idx < 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); @@ -134,6 +135,15 @@ bhyveDomainDiskDefAssignAddress(struct _bhyveConn *dri= ver, =20 def->info.addr.drive.bus =3D 0; break; + + 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.unit =3D 0; + def->info.addr.drive.bus =3D idx; + break; + case VIR_DOMAIN_DISK_BUS_SCSI: case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_FDC: @@ -143,7 +153,6 @@ bhyveDomainDiskDefAssignAddress(struct _bhyveConn *driv= er, 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_LAST: default: break; diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.args b/tests/bhyvex= ml2argvdata/bhyvexml2argv-nvme.args new file mode 100644 index 0000000000..bd39db1fe6 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.args @@ -0,0 +1,9 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,nvme,/tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.ldargs b/tests/bhyv= exml2argvdata/bhyvexml2argv-nvme.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.xml b/tests/bhyvexm= l2argvdata/bhyvexml2argv-nvme.xml new file mode 100644 index 0000000000..8daaa11e85 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-nvme.xml @@ -0,0 +1,16 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index cc6b17233d..0a5202e425 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -195,7 +195,8 @@ mymain(void) BHYVE_CAP_NET_E1000 | BHYVE_CAP_LPC_BOOTROM | \ BHYVE_CAP_FBUF | BHYVE_CAP_XHCI | \ BHYVE_CAP_CPUTOPOLOGY | BHYVE_CAP_SOUND_HDA | \ - BHYVE_CAP_VNC_PASSWORD | BHYVE_CAP_VIRTIO_9P; + BHYVE_CAP_VNC_PASSWORD | BHYVE_CAP_VIRTIO_9P | \ + BHYVE_CAP_NVME; =20 DO_TEST("base"); DO_TEST("wired"); @@ -259,6 +260,7 @@ mymain(void) DO_TEST("serial-tcp"); DO_TEST("4-consoles"); DO_TEST_FAILURE("serial-invalid-port"); + DO_TEST("nvme"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-nvme.xml b/tests/bhy= vexml2xmloutdata/bhyvexml2xmlout-nvme.xml new file mode 100644 index 0000000000..d4ab69b15f --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-nvme.xml @@ -0,0 +1,27 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index df093a5539..be69e21484 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -117,6 +117,7 @@ mymain(void) DO_TEST_DIFFERENT("virtio-rnd"); DO_TEST_DIFFERENT("serial-tcp"); DO_TEST_DIFFERENT("4-consoles"); + DO_TEST_DIFFERENT("nvme"); =20 /* Address allocation tests */ DO_TEST_DIFFERENT("addr-single-sata-disk"); --=20 2.51.0 From nobody Fri Dec 12 14:07:31 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=pass; 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1761650835; cv=none; d=zohomail.com; s=zohoarc; b=TVuSfpso14iXPFFQu4kuWvnLOmg0twUfjYmnOEbC2mBUBkWKJNBpIBXU0HhqXIk7x1Gs39XJl2u4t09Pf1+XOwCIfUEQdRZdmZIHG9yGQA+jYCZ96hFGgiuK8ppTiQ3K9SzJbWkh5SuTvDUFm4zENJYb6Eeh7WYnY6F5gK2/YEQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761650835; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=VeVMjcvQNS9ZBPR7vc1PjIt+aVpV0pDbQH6Ezd4Lsck=; b=MJBord2FejQAd91FXFolx8qSLyuU5aADB+AW6km5HwS26ebPzBB3ykrpXbePqb0PKz5SdpvFZEO8OgexnYJt5wJL+I3c9v3xaDtdJJzSr6cpGxuamkkmeg31jbOK/zCi+u7o0c5vm6v3Gcu59utfv0xcWn1z6NaZKbXTQSWPU2s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1761650835347807.3135299908976; Tue, 28 Oct 2025 04:27:15 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id ADDD43F36E; Tue, 28 Oct 2025 07:26:59 -0400 (EDT) Received: from [172.19.199.25] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 16A6241873; Tue, 28 Oct 2025 07:18:34 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4330A4655F; Sat, 25 Oct 2025 04:18:03 -0400 (EDT) Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id BA7BC46560 for ; Sat, 25 Oct 2025 04:18:02 -0400 (EDT) Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b50645ecfbbso581798666b.1 for ; Sat, 25 Oct 2025 01:18:02 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b6d85398463sm139688766b.34.2025.10.25.01.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 01:17:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761380281; x=1761985081; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VeVMjcvQNS9ZBPR7vc1PjIt+aVpV0pDbQH6Ezd4Lsck=; b=RE5uIcvxnYFrGBfJ5o4zZfmqhCHcmPOQ20FBpSWD10qubJtP/Vt31bn2d2hjM2mhfe c/9I8U7BcPeIy2qMTKygG6WY9M5KLS1pBD1sG9RcFgAcH7DnBjWWgSqvU+0jfqPIC2UQ PlAPSDVOznhtGdFumuD7XaLsMl88aUwCq08dmdXY97p3+dkUVTd7JcTLNZivkmNCXciK 0MHgEiakSY586i6e6J9gMXaET/hWTOMXwnXMRc6HGLxPW/n7hG9Xr3WEHaWvA+tqJ5OF Mp88VviUoxaD7MWlxaA0dPFTBg5NHILQ0vHg9iXIV+EN1eBS5r4y+obQtuAMlVleVIGc eU1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761380281; x=1761985081; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VeVMjcvQNS9ZBPR7vc1PjIt+aVpV0pDbQH6Ezd4Lsck=; b=VIn2hAhACGcyq2cmIyNZeELgRlFH7XMtnpe0Sws6KBWyEnK5rqRPQ0MxmILURvxcci EA42xfJCFCR4SX6xolLVvKYQJ43mWHcrrTmhbEni2HhMMKYMwQYr/vgWw31j04qhifCF OCQZEhg7vkwce6RDMwUA/xiyWdQ89zrvVa9ymqOttop6jdB/V4nSEmkKo1161ota3vMm lTA/fOYqo3lyS4tkQq9dPtAZwJIAS6Ige+zZuh2gJ6LifITbAkbEk4r1IAhUpB2vLE+8 0Fvxil8JWBczaHer+bidp73SqRdPewPAMQAQvYOIll1xdzSx+pxB3hgWjtu5YVPDsZ3H AMYg== X-Gm-Message-State: AOJu0YxM5tOnGU2Q6U/bvzF/5UOtr/QNUQnn0wtWYmW2MUaDsCl/6ftm QJYwOJWsQAG6ogUJJyJSHSt4SNGcKqMLeglZAmUxSkcWY9lTEd8iI1KsyOyayU5TkBhPwA== X-Gm-Gg: ASbGncsPhOFd1uJoOB0Xv4Moa13HcLXSpCPav4v7uKLv05Zkdy9GosvFaXKexHWOh3o oW5n/xMJFW7i+KGBol97QXqQR+vRQRv/I9BBQCw+OUK8u5fkdAA8UOWyD/BxZ34hei/U+hfVDX6 hEcSZA5EkkKSUWcQ0c/CsA6PX17Z6RbwUIId/5eYCTJjuWwpvSd9mBjD6BxPfuvd1yVxkebOyC1 HQW4n8dDBEVGMxSPdxh8HTKOR3qYxst7At0pv6MIGwCK//ePxuA8+IGRhH9Gs27E2qHQrqXL+NJ Tz6lnx050rtOGkIaMFYyofQWAk0gZxTdnJV4Ool+5vHZfk4/yuX5UFCOyLwpIKtuCklgid16xjS 7rbRy35zxPbFcQ+qTrTMgJEAPRQpaJNH1crWa5loDM2eyfRRRCRm1VionKLMUYBVApvIk+LcnQT sExdapeNPYN0ZWZUdZfFtjVQG/rh3RkDtul0GQnK45tGo45J/q/QDZTPAF X-Google-Smtp-Source: AGHT+IF/53ypw9c+//cTIT1AiWq5Hhj30chO8/iF0qbOyI0570Bgy3PNHrxnGugl0G7/LnnPhnWxRw== X-Received: by 2002:a17:907:3f04:b0:b3f:a960:e057 with SMTP id a640c23a62f3a-b64749411b1mr3983210166b.31.1761380280692; Sat, 25 Oct 2025 01:18:00 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 2/4] bhyve: tests: cover 2 NVMe devices on 2 controllers case Date: Sat, 25 Oct 2025 10:15:56 +0200 Message-ID: <20251025081558.18715-3-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251025081558.18715-1-bogorodskiy@gmail.com> References: <20251025081558.18715-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GDM2Z63GNA5OSDGK4RL25XF2YYE3PJ46 X-Message-ID-Hash: GDM2Z63GNA5OSDGK4RL25XF2YYE3PJ46 X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1761650837337154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- .../bhyvexml2argv-2-nvme-2-controllers.args | 10 ++++++ .../bhyvexml2argv-2-nvme-2-controllers.ldargs | 4 +++ .../bhyvexml2argv-2-nvme-2-controllers.xml | 21 +++++++++++ tests/bhyvexml2argvtest.c | 1 + .../bhyvexml2xmlout-2-nvme-2-controllers.xml | 36 +++++++++++++++++++ tests/bhyvexml2xmltest.c | 1 + 6 files changed, 73 insertions(+) create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controll= ers.args create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controll= ers.ldargs create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controll= ers.xml create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-2-nvme-2-cont= rollers.xml diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.arg= s b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.args new file mode 100644 index 0000000000..664eec99bc --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,nvme,/tmp/freebsd.img \ +-s 3:0,nvme,/tmp/data.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.lda= rgs b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.xml= b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.xml new file mode 100644 index 0000000000..30f337197e --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-2-controllers.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 0a5202e425..9d20e5669e 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -261,6 +261,7 @@ mymain(void) DO_TEST("4-consoles"); DO_TEST_FAILURE("serial-invalid-port"); DO_TEST("nvme"); + DO_TEST("2-nvme-2-controllers"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-2-nvme-2-controllers= .xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-2-nvme-2-controllers.xml new file mode 100644 index 0000000000..d0eb9c7fc8 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-2-nvme-2-controllers.xml @@ -0,0 +1,36 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + + +
+ + + +
+ + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index be69e21484..226eaccc6a 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -118,6 +118,7 @@ mymain(void) DO_TEST_DIFFERENT("serial-tcp"); DO_TEST_DIFFERENT("4-consoles"); DO_TEST_DIFFERENT("nvme"); + DO_TEST_DIFFERENT("2-nvme-2-controllers"); =20 /* Address allocation tests */ DO_TEST_DIFFERENT("addr-single-sata-disk"); --=20 2.51.0 From nobody Fri Dec 12 14:07:31 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=pass; 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1761651337; cv=none; d=zohomail.com; s=zohoarc; b=Efp68LwmBODNx1WlrKp/m1Rm7imNtyttU+CVHe0Wb3lrD+K4gSP2Rc9aA4fJOBlELtCecaNa91+NEamFRKg8yAV7Z0FzPzugTRJop7CYI/uW4kTdWNzSG270y+kYM1gyfdVbMbgnREBYUsoyjUsAG1sbm6dBEh0BhMQxa/+M3/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761651337; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Tz3PP0w8y5EkdTcDyX8P2BMrqHpYKhEJTzumjoIc02c=; b=LwT7riKNE6xWniI4pnV94j+Azr1PGWQOqrkxiKQAYMqongW05C8AyTSC59wR6RUcKbw+BlK+ccYcEGGmuQQ7JwZkLS0JFRibQasD3uuwjp+JavqXQScmQqlHG/YhE+aY8V02V+ZPu2xSdgcynVpJkIgSiNLAKlraXz6yPFoqTwU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1761651337479654.477721088103; Tue, 28 Oct 2025 04:35:37 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8A1EA4190F; Tue, 28 Oct 2025 07:35:20 -0400 (EDT) Received: from [172.19.199.25] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B312441C80; Tue, 28 Oct 2025 07:20:17 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id DAF1446561; Sat, 25 Oct 2025 04:18:04 -0400 (EDT) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5296646561 for ; Sat, 25 Oct 2025 04:18:04 -0400 (EDT) Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-b3d196b7eeeso595890666b.0 for ; Sat, 25 Oct 2025 01:18:04 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b6d85398463sm139688766b.34.2025.10.25.01.18.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 01:18:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761380283; x=1761985083; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Tz3PP0w8y5EkdTcDyX8P2BMrqHpYKhEJTzumjoIc02c=; b=JIoynC4e1NGllWfxr3pgu1KKeGYcVQm6L+un/sqKsUR/R4IlwystSJtlOti7P6a5WU bxUrL66odGXiNF/n1YyuXuyqMBpZRBq8aZmykw130zrlQMSwz8jeCz+aHyzqXx3rgi8F A/UdLwHWijdjXi1KcAJoDzlkS2iNmDy1CRtssCEMofeWgLkCsRjwQADnsUoVgqvmDsQh 4V65es/RezZewlA7wBvsRYoPLng3Rm586Q9vzUP95PPw9A23MFo/i4cG3eQHALY/j486 9TPdGHPTAC2/iXYBcLEkylMcIWS7BJTZd+3+feOmFbJxzeSEf/9viMi2AccragJux4BS YPDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761380283; x=1761985083; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Tz3PP0w8y5EkdTcDyX8P2BMrqHpYKhEJTzumjoIc02c=; b=qQjRVYs0wDrUd8kW8Hnw9XzyKdr+gdfIT0n5TUfOsO60fejlxX5KDxl8UWpTLM4QNW 881faT7PVj9di28mwMH8xYi2gozCYJOA+ZsBvnzLL4olBJQ3nlH8dfQ+DEYfRlNYAGTE GefEbsJl90s/RORAGtV+QxvQG+IQ6o7AJ79XxcSpYndZOcYmir4MCwgeLkOIC+NA55RV 1cKEqdvj9NX6bD2miPP81Bu3aC4UmT/9b6OTUe9bPgbsiPgtDNvKJ7X09lZ0VgruyiXa Bh3M6r928UwZ4D7naHxUeMkjHDPfdDwRwNXv8BRnAldZ7Zy2RIUz0dZSiyk+DClaoejh 7jEg== X-Gm-Message-State: AOJu0Yxr/LyAenVFme9KXeDa/Hvp6MQ2lVnbmhlYLdYkNq/AEeA2CnU2 g2U6BoogGrh8E4yVBVNlUXECnhJe5+Q4N3+niRIY7qOqVBQzXQ8pKvzqYxNhBYi1jqvWXw== X-Gm-Gg: ASbGncty3s2Nt4KOK2GmI7Gxz0thIvjTuJ5Xv2kT81+djPeI/4wxKxZ2LS1WqUKWzRh ZeiORRkMh02MHqntuoZS/aODP6LN7IV+BX3C3iyYRlTfaCK1UzqXDd8ya1NUH4/os1bSwpiK/vg lbQ6aNZuzp7wWK9Yu14GuknJ37okjnrRV+dJN7DQU1vWPtDRo9Ntrxrg/HgJxYCM69t1SJsZ9m2 LJ4c+rrsic1AK57MD/+t6fkBeb46x10sHrOzs76ZlCy5HwdX35xVJuJmjR61GlRBFkS3ZxWICzT nyDqkcTq/P+CIknNrijlEbtt3E8gzCyIuUlWeWbpdyH2rCFfxFkJopw0hsZYj+QfDPBdscAscQZ X3i2LeUEU+ZrGXwODpMyDr1/j+vYVTGtUsukgeNc/CU3MAyTN14RWoZDBLurpIq3fUe+6uDU4E3 U7LYkpSL+ggcdQkWDPOvsrpN34AuyNUOk6HHt3oFmrQ2au9+E8/Idi0b8w X-Google-Smtp-Source: AGHT+IG5+NFPHZc8ySOA+Z8WpmECQvXgPFLPf4ndxgdmjfVIbqp0PNjK/1NSGKHnCImL13vS4EYoMg== X-Received: by 2002:a17:907:3d91:b0:b55:befd:8f8d with SMTP id a640c23a62f3a-b647500ec03mr4021807666b.57.1761380282393; Sat, 25 Oct 2025 01:18:02 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 3/4] bhyve: do not allow more than one NVMe device per controller Date: Sat, 25 Oct 2025 10:15:57 +0200 Message-ID: <20251025081558.18715-4-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251025081558.18715-1-bogorodskiy@gmail.com> References: <20251025081558.18715-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EBXYXN2BRKXB3SLMQ5GQNU6FXPCU3IPL X-Message-ID-Hash: EBXYXN2BRKXB3SLMQ5GQNU6FXPCU3IPL X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1761651339381154100 Content-Type: text/plain; charset="utf-8" As bhyve does not have explicit notion of controllers, and for NVMe devices it allows to specify one a single source for for a given PCI address, it effectively means that there could be only one device per controller. Update validation code to check this case. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_domain.c | 27 +++++++++++++++++++ .../bhyvexml2argv-2-nvme-same-controller.args | 10 +++++++ ...hyvexml2argv-2-nvme-same-controller.ldargs | 4 +++ .../bhyvexml2argv-2-nvme-same-controller.xml | 21 +++++++++++++++ tests/bhyvexml2argvtest.c | 1 + 5 files changed, 63 insertions(+) create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-contr= oller.args create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-contr= oller.ldargs create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-contr= oller.xml diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 79ac336430..6b47890c93 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -310,7 +310,34 @@ bhyveDomainDefValidate(const virDomainDef *def, void *opaque G_GNUC_UNUSED, void *parseOpaque G_GNUC_UNUSED) { + size_t i; virStorageSource *src =3D NULL; + g_autoptr(GHashTable) nvme_controllers =3D g_hash_table_new(g_direct_h= ash, + g_direct_equ= al); + + for (i =3D 0; i < def->ndisks; i++) { + virDomainDiskDef *disk =3D def->disks[i]; + int nvme_ctrl =3D 0; + int idx =3D -1; + + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_NVME) { + if (virDiskNameParse(disk->dst, &nvme_ctrl, &idx, NULL) < 0) { + virReportError(VIR_ERR_XML_ERROR, + _("Unknown disk name '%1$s' and no address = specified"), + disk->dst); + return -1; + } + + if (g_hash_table_contains(nvme_controllers, GINT_TO_POINTER(nv= me_ctrl))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + "%s", + _("Cannot have more than one disk per NVMe = controller")); + return -1; + } + + g_hash_table_add(nvme_controllers, GINT_TO_POINTER(nvme_ctrl)); + } + } =20 if (!def->os.loader) return 0; diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.a= rgs b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.args new file mode 100644 index 0000000000..664eec99bc --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,nvme,/tmp/freebsd.img \ +-s 3:0,nvme,/tmp/data.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.l= dargs b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.x= ml b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.xml new file mode 100644 index 0000000000..dc4e3c621b --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-2-nvme-same-controller.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 9d20e5669e..3c6d530f66 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -262,6 +262,7 @@ mymain(void) DO_TEST_FAILURE("serial-invalid-port"); DO_TEST("nvme"); DO_TEST("2-nvme-2-controllers"); + DO_TEST_FAILURE("2-nvme-same-controller"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); --=20 2.51.0 From nobody Fri Dec 12 14:07:31 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=pass; 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1761652801; cv=none; d=zohomail.com; s=zohoarc; b=WolENotTMb6kGhTmRpYB5SEc6c+jVkwq83GFnwVTpAclQE4fe9wIo/mMLzUNbkFXw4A1rDnr1YcD2H0hZH3EGyg/Kv33ebAT6LMYqxJnYiFFHxotaUNnLS7dZM+OvoAK3rg2cJfv1V5ehK0tDBkc1X9gf8Uo+vbgpIT+hEbH5ww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761652801; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qmnxPQ68YQjaeFSZVnjz1fkGX7t9Rxzh3ZJfDUhqFHw=; b=l+trVxbRSQLLWuM4j/IjNS374ryc9oy1+UykOsH1jfSp0+40pgNPF5G9KZAbdasoqEu2WtI3lgdLZZ1Gcx/FOuF8f+bFL8L4A3jRoXFVIrbS4WKeE02h5G051yk5PeDhrHh3APLLoKqJvKBFaWOiMwW+vlTZ80aR/SHUGsjUCnw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 176165280108146.35315020243081; Tue, 28 Oct 2025 05:00:01 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 0400841830; Tue, 28 Oct 2025 07:59:37 -0400 (EDT) Received: from [172.19.199.25] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 22CDD4192F; Tue, 28 Oct 2025 07:58:30 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3211E46562; Sat, 25 Oct 2025 04:18:05 -0400 (EDT) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D82C146564 for ; Sat, 25 Oct 2025 04:18:04 -0400 (EDT) Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-b6d83bf1077so122950966b.3 for ; Sat, 25 Oct 2025 01:18:04 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b6d85398463sm139688766b.34.2025.10.25.01.18.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 01:18:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761380283; x=1761985083; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qmnxPQ68YQjaeFSZVnjz1fkGX7t9Rxzh3ZJfDUhqFHw=; b=Cd9PNXKvWOo8cEcsmOdCnFitQnhxLokQpM3gl5MjtPUNxSUAsp5R1oFk8LIwoy/j+n 5BbjeS1mxjaXwqvegRDgOqz987kq1KO2TNyQ+ipBbgoraS7QerI6QCpOjswR8uumMK2H +cQ5J9bFIuW5rOfoHLeOTBUHd+kt3fL9coi42nDP4xAOPtEWKIG1vXnGUkiPu+MMfP9v 7/0m5xHFP2U5D5YnZXUwctzsqV8uxZsd4RWvL9mAw2LK/gd2IdmdZxYDm8gf1zvFi+rn xas25aUzpEDmhnJWN66v50anZ0WMwSxpiHmu3jPv01klkHAhm0gnW94YsJgdgPFTtsap Z0LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761380283; x=1761985083; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qmnxPQ68YQjaeFSZVnjz1fkGX7t9Rxzh3ZJfDUhqFHw=; b=aGrtbHFRyfARyJqv95E2bqDWqPbTBlXl+64UlE53rr1oy4JvBQcSiXMhLn1qiM2rLf ciSidbRd686ap0l+qQWy9ehCxc/HiylVqc3BjmyN1dSGhcrQFGZbFf8DgFod0KJ1RcyZ mkWkhpYB1AufnGOEIriHEK/YpLDEYEcoVnWOmK4bri/siKaZQAmXdEu9YUnI5/FUYh5x Xdr4QI0/tDxYAB9SfjydAjAj1YN3KkdU2fuor5fG+/J13CLNvfi6eyjV+7HIHhOvr10R qTy94muRmCQGv1JwMMAYejUeZLURFVmIbS4kMX7W6mgRQvBNb8XRVnNEiNOfuclVT9Do f0cA== X-Gm-Message-State: AOJu0Yz/gGwNCcyzi9dICh37sxXU6s2LnGvd4A1kf1DCfdcX2d9VRIDC sDsrO0yqWybqf67U7bHI2b5F0knJBYEUBldpZfE3qkY3ul9PPD6bWgTpOjHZAcnZgRlsvA== X-Gm-Gg: ASbGncsalEhiqx9X4Gr8yfq6sBRSNTcsDtPGcD/VGoj5oFDh7Y1WMEavK/sxxiTlmyh t88puX7dl0BM6MWTSZ4OALxQCH7S/Uf1U460fJSXrdD+H9ExaMO1T+WXe1hhW0ReAx7o6N9pHHq +fTU1MUxPaikFqcCyLK1tqwe76/JgywxqaqTSqZrYntKYhFXQ3PQ2e6Z+niXIVmZaI+vELXE6qk +QEPjOeX2EnWz/+iZIzPLEG28eAC1eLs/wf4dmO99k0B//rzTbmGZG98GeJ6kBg4E5p6PfpsEiC FeXvffVyer4NjGoi6+H+lgdoFc/awW4KZDn6YAr+/nsB+64R+KJoJR9cfJvFcXb6DYKIUPA6t7I YvZFi8oZ87IOrBch6vOIbb/wdODkVNAk/wtscq670Mcz+T+YgM4RYKcGoDdFE2L0CH6gz7l9qii nBJNNORwwgj/kxzpWDTjESKy4DkiC2XZMHUbZsvbhngNG/bs6lqw5czuAJ X-Google-Smtp-Source: AGHT+IEa2u1/N7BtAXoCPvoirFwXy5FpwVyC17KmqZjX6zdpZEoG4xe4s4UwkLeeK3f0MbdWA1cp/A== X-Received: by 2002:a17:907:3f12:b0:b6d:5718:d43f with SMTP id a640c23a62f3a-b6d5718d7b1mr881705466b.39.1761380283319; Sat, 25 Oct 2025 01:18:03 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 4/4] bhyve: nvme: check if NVMe is supported by bhyve Date: Sat, 25 Oct 2025 10:15:58 +0200 Message-ID: <20251025081558.18715-5-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251025081558.18715-1-bogorodskiy@gmail.com> References: <20251025081558.18715-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GTYMW5WP3HUE6ZBJJMLTARWSQXQTJKXF X-Message-ID-Hash: GTYMW5WP3HUE6ZBJJMLTARWSQXQTJKXF X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: <> List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1761652802115158500 Content-Type: text/plain; charset="utf-8" For domains using NVMe disks make sure that the bhyve binary supports that by checking capabilities. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_command.c | 8 +++++++- tests/bhyvexml2argvtest.c | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 9f2d02b484..14d07909ae 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -331,7 +331,7 @@ bhyveBuildUSBControllerArgStr(const virDomainDef *def, static int bhyveBuildNVMeControllerArgStr(const virDomainDef *def, virDomainControllerDef *controller, - struct _bhyveConn *driver G_GNUC_UNUSED, + struct _bhyveConn *driver, virCommand *cmd) { g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; @@ -344,6 +344,12 @@ bhyveBuildNVMeControllerArgStr(const virDomainDef *def, if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_NVME) continue; =20 + if (!(bhyveDriverGetBhyveCaps(driver) & BHYVE_CAP_NVME)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Bhyve version does not support NVMe")); + return -1; + } + if (disk->info.addr.drive.controller !=3D controller->idx) continue; =20 diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 3c6d530f66..eb4a1eb2fd 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -311,6 +311,9 @@ mymain(void) driver.bhyvecaps &=3D ~BHYVE_CAP_VNC_PASSWORD; DO_TEST_FAILURE("vnc-password"); =20 + driver.bhyvecaps &=3D ~BHYVE_CAP_NVME; + DO_TEST_FAILURE("nvme"); + driver.config->bhyveloadTimeout =3D 300; driver.config->bhyveloadTimeoutKill =3D 20; DO_TEST("bhyveload-timeout"); --=20 2.51.0