From nobody Thu Nov 12 15:08:48 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 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=1793991207; cv=none; d=zohomail.com; s=zohoarc; b=lPvC/T8WoPhFR4BsewpWTeIXJFVI/k6o5Dsa3doOx7YLSlos0Ck+ZOxNwCX2+IvJlZRYN9a3QhYWMCR3GjAO49aKZgaPyFffcleYO1Uz3Gsy24sBqTm40HZPtYtiJA/RfAotMHIRvGRGAp1ZuKsvkoc+MUdr5pe55QMhAQD0+74= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793991207; 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:Subject:Subject:To:To:Message-Id:Reply-To; bh=RIAP9Yb+k5Fl2pkXQq4Hmu+3YuERnOLTWUVCIQp3gX0=; b=Xlyo5gmOxItsXf331liQITl9vYPkWbFtM5Tv4UlHVqidl9PeZnRTYAJyenBfOwWV9OPQWn97rgUnAEo7/rXht5NMUSdxPlyH6o6o93/yWwZnA9ilDyD5tLCSHygn5TVSP+3eHbtiRKQak36u/CvXu9T52NMBgEHDujVUMFPCDXc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 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 [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793991207409448.2238188379961; Fri, 6 Nov 2026 10:53:27 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 19CBA41A29; Fri, 6 Nov 2026 13:53:26 -0500 (EST) Received: from [172.19.199.22] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id F281E41C47; Fri, 6 Nov 2026 13:50:05 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 57F8141A29; Fri, 6 Nov 2026 13:49:49 -0500 (EST) Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) (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 D1C323F289 for ; Fri, 6 Nov 2026 13:49:47 -0500 (EST) Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-6b5669a5100so1334537a12.1 for ; Fri, 06 Nov 2026 10:49:47 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-25f6-628e-6064-de9b.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:25f6:628e:6064:de9b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b664ad2901sm1010147a12.6.2026.11.06.10.49.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Nov 2026 10:49:45 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 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_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793990986; x=1794595786; 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:content-type; bh=RIAP9Yb+k5Fl2pkXQq4Hmu+3YuERnOLTWUVCIQp3gX0=; b=PdaATKGoPCEWxgw44Q56gnCmo5lWJXZoSqZ2Leh4TSCt8OYPaeM0SOvjV+IQSK3L5+ /+af864WA2oCqXBOlImJiNDKs3RSB8oXRszYwpCJZ32W2/RrB/YXczgBZ0YZbSHoO4HR PmMLc7hcuUUPQGBM5hMRz125ZeHM9EJB8VwPnecCacZTIes2ocspKjenqIu4eYTV8Etd xVunNcGLMNd/Ul8XPAmcwM9gzZwwcLGAGZYaqXPsm2rgNCwEZBzy1ygxH9z0tT4TQH4N Ua1XnkqJmj0rYZtjfHUdchLQnYMsGXt/+Towj80Yw0nKDmfr6u2enQFkbU5UyOrt9WAs +OXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793990986; x=1794595786; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=RIAP9Yb+k5Fl2pkXQq4Hmu+3YuERnOLTWUVCIQp3gX0=; b=QMM2tShHgfE5AmaeCrUZBcTea4jKQlVWSxM/taW/J5Y7mPl2vsZ52PZOikLzPP4yKv 9VgpXT+zQ5O3thFujbmHBCotFlD91egJCXFR4GfTJzFxW2myUtlHTTjMTX1AHQzTnoy1 LAh4dOHQ2NVzxW3zpaJJSpHHeO4vQiM8Au1BUcBOUYsPqayaFfY7AYEvHFBi6lpYOui5 VExlIkZKi0CkEF+78Av4U6ynBdAtCONontW2Nb2fKl91yTL21InOM+FryLTaeKF0ukmU 7xs+NKbNlAVLK7lpoqq9YfgFcYALhRIPDODlVfW1eT6S+ebRzxgtLnzx8g4x7kb5Scl5 oeDA== X-Gm-Message-State: APuU4Z9TaJySO5xBqt4Hi20XNDmo0I+V/G38XerucXc0w0Wn8LnqbpOl 0d9JDyeRglrgcNBddVRqKeNJGpf+G3IRU0Qq+DkxeZZuR8fsVWmmCUV/0W6t9WjT X-Gm-Gg: AYBFou17zNK5CU3LMaDgUJ2SoXu/CLEnsIwXEKhRk7HxR8jXL/3j7Mt4+rlYUdb5LRN I8xHqwenZ/Z+dvTpeTPnJ39wlRAUZFqBaIa1Zc+/UxpkR4bGHXLk5aLRcXA/P22rPYRnpGzZzgP 0X/2GWkpLtwD0CMzuMRcfHz5aEhDK03vRAWVUpX0Hbdaq4X2i1i9aQ/DprSYtHyHfW0ZKEIAPS5 MMNOzX77pEf+Jg0cu09cEjzJxQo2FF/4P7b+R579ujLlegrClBluXdw6dIEu+Iif8/IGgNp+h60 LsJkOD/TnZ1pWz17CCC0kRZrQkIOpj/n2psnM6r4ehVvIc3fyFgS9WuWXk4bOiTYQu9sr0PlQdF a+WBMfC8NhWaOJaP+KItttGqZrACzjvc4OFX7hsSzNZpOgnqifhtt5m9SFEU1ZfxlMkM1l/dqAR u+lNjyejirFmblhkMdRQfD9BUoiQlTxgA6Ak4dWpGDtkIomemQq2A8pf2tB3vEa1OeP9+g4GMH7 UGKuc3dnRyh0LCzH/26aI/ICQtA8DwQlW84xq6sHfm2au9yUaGvR8oGEUPQ/qTdVwCjXETDdZvP jMdPexrq4DeR++uFCDLc4ADeEZZqT7Uqf5RNMS8pUJUjrZHAg7RIb7QuqqI56SJDv+9vwYuH3CJ NC0LiKbAqjMI4PP23XQa0HuN7nKN5JKBNtTTXDfF3 X-Received: by 2002:a05:6402:e8a:b0:6b5:7792:d82c with SMTP id 4fb4d7f45d1cf-6b59781621fmr2354642a12.16.1793990986413; Fri, 06 Nov 2026 10:49:46 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 1/4] bhyve: respect for disks Date: Fri, 6 Nov 2026 19:48:22 +0100 Message-ID: <20261106184825.18515-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261106184825.18515-1-bogorodskiy@gmail.com> References: <20261106184825.18515-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: S75WLW2CXBBF3NYD7MBE34FZ7ATGLVUH X-Message-ID-Hash: S75WLW2CXBBF3NYD7MBE34FZ7ATGLVUH 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: 1793991209006158500 Content-Type: text/plain; charset="utf-8" bhyve supports marking disks "readonly" using the "ro" parameter. Update AHCI, NVMe, and virtio-blk command generation to add this parameter when is specified. Signed-off-by: Roman Bogorodskiy Reviewed-by: Jiri Denemark --- src/bhyve/bhyve_command.c | 9 ++++- .../bhyvexml2argv-bhyveload-bootorder.args | 2 +- .../bhyvexml2argv-bhyveload-bootorder1.args | 2 +- .../bhyvexml2argv-bhyveload-bootorder3.args | 2 +- .../x86_64/bhyvexml2argv-disk-cdrom-grub.args | 2 +- .../x86_64/bhyvexml2argv-disk-cdrom.args | 2 +- .../x86_64/bhyvexml2argv-disk-readonly.args | 11 +++++ .../x86_64/bhyvexml2argv-disk-readonly.ldargs | 4 ++ .../x86_64/bhyvexml2argv-disk-readonly.xml | 40 +++++++++++++++++++ tests/bhyvexml2argvtest.c | 1 + 10 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-reado= nly.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-reado= nly.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-reado= nly.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 7e3d3d4553..31ea9d6740 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -369,6 +369,9 @@ bhyveBuildAHCIControllerArgStr(const virDomainDef *def, if (disk->info.bootIndex !=3D 0) virBufferAsprintf(&device, ",bootindex=3D%u", disk->info.bootI= ndex); =20 + if (disk->src->readonly) + virBufferAddLit(&device, ",ro"); + virBufferAddBuffer(&buf, &device); } =20 @@ -391,7 +394,6 @@ bhyveBuildSCSIControllerArgStr(const virDomainDef *def, size_t i; =20 for (i =3D 0; i < def->ndisks; i++) { - g_auto(virBuffer) device =3D VIR_BUFFER_INITIALIZER; virDomainDiskDef *disk =3D def->disks[i]; =20 if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_SCSI) @@ -518,6 +520,8 @@ bhyveBuildNVMeControllerArgStr(const virDomainDef *def, disk->wwn); if (controller->opts.nvmeopts.serial) virBufferAsprintf(&opt, ",ser=3D%s", controller->opts.nvmeopts= .serial); + if (disk->src->readonly) + virBufferAddLit(&opt, ",ro"); =20 nvme_opts =3D virBufferContentAndReset(&opt); =20 @@ -600,6 +604,9 @@ bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_GN= UC_UNUSED, if (disk->info.bootIndex !=3D 0) virBufferAsprintf(&opts, ",bootindex=3D%u", disk->info.bootIndex); =20 + if (disk->src->readonly) + virBufferAddLit(&opts, ",ro"); + virCommandAddArg(cmd, "-s"); virCommandAddArgFormat(cmd, "%d:0,virtio-blk,%s%s", disk->info.addr.pci.slot, diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootord= er.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder.= args index a6df2a673e..6ecc2ef181 100644 --- a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder.args +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder.args @@ -5,6 +5,6 @@ bhyve \ -H \ -P \ -s 0:0,hostbridge \ --s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso \ +-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso,ro \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:8d:10:e1 \ bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootord= er1.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder= 1.args index f10304cc9f..e554ab84d4 100644 --- a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder1.args +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder1.args @@ -5,6 +5,6 @@ bhyve \ -H \ -P \ -s 0:0,hostbridge \ --s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso \ +-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso,ro \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:92:68:0e \ bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootord= er3.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder= 3.args index bdcd73499b..2d78b21299 100644 --- a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder3.args +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-bhyveload-bootorder3.args @@ -5,6 +5,6 @@ bhyve \ -H \ -P \ -s 0:0,hostbridge \ --s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso,bootindex=3D1 \ +-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso,bootindex=3D1,ro \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:7a:f5:a4 \ bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom-grub.a= rgs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom-grub.args index f54ebbc8b3..64af5e8c09 100644 --- a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom-grub.args +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom-grub.args @@ -5,6 +5,6 @@ bhyve \ -H \ -P \ -s 0:0,hostbridge \ --s 2:0,ahci,cd:/tmp/cdrom.iso \ +-s 2:0,ahci,cd:/tmp/cdrom.iso,ro \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:6f:6a:53 \ bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom.args b= /tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom.args index ba6ddeffbe..a2f2ea8d71 100644 --- a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom.args +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-cdrom.args @@ -5,6 +5,6 @@ bhyve \ -H \ -P \ -s 0:0,hostbridge \ --s 2:0,ahci,cd:/tmp/cdrom.iso \ +-s 2:0,ahci,cd:/tmp/cdrom.iso,ro \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:e3:ec:9b \ bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.arg= s b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.args new file mode 100644 index 0000000000..9cb5abc162 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,nvme,/tmp/nvme-readonly.img,maxq=3D2,qsz=3D256,eui64=3D0x01000000ef= beadde,ser=3DBHYVE-NVME0-01234,ro \ +-s 3:0,ahci,hd:/tmp/sata-readonly.img,nmrr=3D7200,ser=3DBHYVE-SATA-RO,ro,h= d:/tmp/sata-writable.img,nmrr=3D5400,ser=3DBHYVE-SATA-RW \ +-s 4:0,virtio-blk,/tmp/virtio-readonly.img,ro \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.lda= rgs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.ldargs new file mode 100644 index 0000000000..02a3ac0f73 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/sata-readonly.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.xml= b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.xml new file mode 100644 index 0000000000..2dbc1a9bd2 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-readonly.xml @@ -0,0 +1,40 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + BHYVE-NVME0-01234 + + + BHYVE-SATA-RO + + + + + + + BHYVE-SATA-RW + + + + + + + + + + + + + + + 01000000efbeadde + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 0b700cc5b0..c208db6311 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -239,6 +239,7 @@ mymain(void) DO_TEST_FAILURE("acpiapic"); DO_TEST("disk-cdrom"); DO_TEST("disk-virtio"); + DO_TEST("disk-readonly"); DO_TEST("macaddr"); DO_TEST("serial"); DO_TEST("console"); --=20 2.55.0 From nobody Thu Nov 12 15:08:48 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 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=1793991322; cv=none; d=zohomail.com; s=zohoarc; b=TlB6rJHH3OcJHbexdl7by29Zi+OhDDjG9+YmHUwaZlgtExuL0PSYertIO2qQSEI+UxH/2zy/lxr3IUrTSPj6K7P6LwRVLeBfS7x++X0Pn9ZCqrWZt3id+IDou2o6S6lJuVakC2lW/vfwaeZkOgPiGOK1exRlFAPwjsCSX0IFWd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793991322; 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:Subject:Subject:To:To:Message-Id:Reply-To; bh=PL5CshiIqeGQ+jraVUSP9SddjMURRQv6ovMCpJCUgTg=; b=daxUPvon2TFffWexKwpYbt4u0lSb/f2jkEC8wUS6Pd3mdZb+AqXILKzFa6I+W+M+UhYMrEjsC3M9ALDRf6Do0QfcQRQqxL076g2DRhrn8OeObdZ6t4T2dDrCX3aUACdwYwEGZX1tzV+9QyLT4hta0tF6L4cv+66RLOjwwbYRRhw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 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 [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793991322638560.1244738188592; Fri, 6 Nov 2026 10:55:22 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 217D641BE8; Fri, 6 Nov 2026 13:55:20 -0500 (EST) Received: from [172.19.199.22] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 031DD41CC9; Fri, 6 Nov 2026 13:50:11 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 5897041AC7; Fri, 6 Nov 2026 13:49:50 -0500 (EST) Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) (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 42D043F33B for ; Fri, 6 Nov 2026 13:49:48 -0500 (EST) Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-6b633ddfad6so1464178a12.3 for ; Fri, 06 Nov 2026 10:49:48 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-25f6-628e-6064-de9b.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:25f6:628e:6064:de9b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b664ad2901sm1010147a12.6.2026.11.06.10.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Nov 2026 10:49:46 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 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_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793990987; x=1794595787; 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:content-type; bh=PL5CshiIqeGQ+jraVUSP9SddjMURRQv6ovMCpJCUgTg=; b=JozekCNAU+qaHYKVJdnghG+lw9YpOd0BwFd39K22+aHB3zR4l7cigSiEtSbN0VDAYN v79R7Sy03P49ctmXpESjValfzN+7u7PPS/Bb5mKW9evzQzqfLNwSy80WNKqpddiLdxDn rHvPPyCRctKILanP1G5t0uGUA/Kv9fCCGgYwCqiTe87AU3bVNptp+etpLo3Cwp6VwgS8 3A5lG2RPCXDg4WkUESQAilQOmxIsLhz4GRBeUaQHDaAZXjPcz7Rv6ZBktaAQ9cbOvunb Fj2OjdvdGNCuvuAOD7a3jZcBTQVEVgx/wzvtppyeF68I44LThjnTVF1o6J2/HA6EuL8h JgcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793990987; x=1794595787; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PL5CshiIqeGQ+jraVUSP9SddjMURRQv6ovMCpJCUgTg=; b=fE5YufXhDvfZxxOdqc1hH2XkOu0sFtCYM7eQnsMt7NhRDkRQGXz1K78eZpseK4xFGh f+79lG7q00k3wqMV2eupozpO1418KC+oSZfGVrG2iTJl/eV+bLXpFn1trmwf2L/QS773 Kb+53pSIYCeumo2QxDcqy9StrJNcNf6PNWNRS/e/ylmx73KkleyvfiRGuH+tzrcMVHAc rngzNJKtsUYWiKYboKlzSYjbivmhpMYSTA026NE6NodCImZSPVqSvpwjhEqAnsyxlS2D H/UEceF0pJdFNonp7JjpLyrsoCvZjNTBzc2ExWPIuIp9N9D0FDtuUaaMM8e3DVvMnGSi OMfA== X-Gm-Message-State: APuU4Z/y0VxXqu/ijrJroJ0DUMagy3+jeITH/bzaBwLFFo79jzat3NLt kB8QRlfeXppqhwrQ8pvdxPjNKZly6u3F9mdIWmCNLhnCMTCUYTFM66hQXQqpclKi X-Gm-Gg: AYBFou3Q5OT3BUkTa+0jpN1vZc59HGJX5qNTeKx4RzumMBB9y8VGck4dR4V4oBJpbQX yyKCEviCG3wzLuVHEiVBBfzYJ64+WEwLBtSeo8o1ZMIsi1JUMs/1VWQUiCWoZiTUc8cqZjTjAnl klblhNYaqXM5CADTd49wyhLW1iISPiQnJRokhiDzJLb7xS0yrhjpKvO/bmNRq1tsQoK/ZmvVTGf 4ebh+0vekIdJu0LRGsY+oCw/EUyKO7SHFDLyU7uDGu42mx51kKC80Hfd/62LIH40isuNQa5lzR6 ZbTjf3JA3yYpw03tC5RL3uw/al+7nN5dKUYWSWrrthfkHCbmaIBZ9KDdizkA/14YYu7eFlv3Kku wgtk3omdKANQYEFIXkCMBCnv412J2ZP8PbAScd5ur4aXGIf7jC9FcHbBPAVIE4jWf73fQUNfjl2 ltvfFqs0OYpGea5LV61fVwQNk2Ok9PH1wSBEaMQ+77EX9KuqgCF8ScNoGAvDHR/KliUQ2t3GCvH HrrKlh9A69tsZiA5uQjxdtsyqVs6fmXKE5mPh0fS+iWDEK3Sqk+OT809Li9RTw9QP6ujpHPSBvS bRJYwCVto2m9XgtId8KNjQ8AkN8cD5vXxyDvuGxO/IWhhL0EvLhkKX48OOjRs2QtVB6KfyfEwjm RG4KI0N3tEXmpet6GKCc0pRs5C47eik7Q0G9la006uTBnKW1vzGPglUuc2g6pPg== X-Received: by 2002:a05:6402:1ec4:b0:6b4:2aa6:2c07 with SMTP id 4fb4d7f45d1cf-6b5977c0fa6mr2388057a12.14.1793990986895; Fri, 06 Nov 2026 10:49:46 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 2/4] bhyve: support additional attributes for disks Date: Fri, 6 Nov 2026 19:48:23 +0100 Message-ID: <20261106184825.18515-3-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261106184825.18515-1-bogorodskiy@gmail.com> References: <20261106184825.18515-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZC6JX6TZEBIVAOUYSIMC2MJQCZFKFKEX X-Message-ID-Hash: ZC6JX6TZEBIVAOUYSIMC2MJQCZFKFKEX 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: 1793991324610158501 Content-Type: text/plain; charset="utf-8" Support discard=3D'ignore' configurations and logical and physical block sizes configured by . As these options are common to the storage backend, introduce a helper bhyveBuildCommonDiskOpts() to generate the command line for them. This also enables bootindex configuration for the NVMe devices. As bhyve uses 'int' for block sizes, discard values greater than INT_MAX. And as bhyve does not support specifying physical block size without specifying logical block size, reject these configurations too. Signed-off-by: Roman Bogorodskiy Reviewed-by: Jiri Denemark --- src/bhyve/bhyve_command.c | 39 ++++++++++++------ src/bhyve/bhyve_domain.c | 18 +++++++- .../bhyvexml2argv-disk-blockio-invalid.xml | 17 ++++++++ .../x86_64/bhyvexml2argv-disk-options.args | 11 +++++ .../x86_64/bhyvexml2argv-disk-options.ldargs | 4 ++ .../x86_64/bhyvexml2argv-disk-options.xml | 41 +++++++++++++++++++ tests/bhyvexml2argvtest.c | 2 + 7 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block= io-invalid.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-optio= ns.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-optio= ns.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-optio= ns.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 31ea9d6740..49c3101027 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -42,6 +42,28 @@ =20 VIR_LOG_INIT("bhyve.bhyve_command"); =20 +static void +bhyveBuildCommonDiskOpts(const virDomainDiskDef *disk, + virBuffer *opt) +{ + if (disk->info.bootIndex !=3D 0) + virBufferAsprintf(opt, ",bootindex=3D%u", disk->info.bootIndex); + + if (disk->src->readonly) + virBufferAddLit(opt, ",ro"); + + if (disk->discard =3D=3D VIR_DOMAIN_DISK_DISCARD_IGNORE) + virBufferAddLit(opt, ",nodelete"); + + if (disk->blockio.logical_block_size > 0) { + /* sectorsize=3Dlogical[/physical] */ + virBufferAsprintf(opt, ",sectorsize=3D%u", + disk->blockio.logical_block_size); + if (disk->blockio.physical_block_size > 0) + virBufferAsprintf(opt, "/%u", disk->blockio.physical_block_siz= e); + } +} + static int bhyveBuildNetArgStr(const virDomainDef *def, virDomainNetDef *net, @@ -366,12 +388,7 @@ bhyveBuildAHCIControllerArgStr(const virDomainDef *def, if (disk->serial) virBufferAsprintf(&device, ",ser=3D%s", disk->serial); =20 - if (disk->info.bootIndex !=3D 0) - virBufferAsprintf(&device, ",bootindex=3D%u", disk->info.bootI= ndex); - - if (disk->src->readonly) - virBufferAddLit(&device, ",ro"); - + bhyveBuildCommonDiskOpts(disk, &device); virBufferAddBuffer(&buf, &device); } =20 @@ -520,8 +537,8 @@ bhyveBuildNVMeControllerArgStr(const virDomainDef *def, disk->wwn); if (controller->opts.nvmeopts.serial) virBufferAsprintf(&opt, ",ser=3D%s", controller->opts.nvmeopts= .serial); - if (disk->src->readonly) - virBufferAddLit(&opt, ",ro"); + + bhyveBuildCommonDiskOpts(disk, &opt); =20 nvme_opts =3D virBufferContentAndReset(&opt); =20 @@ -601,11 +618,7 @@ bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_G= NUC_UNUSED, =20 disk_source =3D virDomainDiskGetSource(disk); =20 - if (disk->info.bootIndex !=3D 0) - virBufferAsprintf(&opts, ",bootindex=3D%u", disk->info.bootIndex); - - if (disk->src->readonly) - virBufferAddLit(&opts, ",ro"); + bhyveBuildCommonDiskOpts(disk, &opts); =20 virCommandAddArg(cmd, "-s"); virCommandAddArgFormat(cmd, "%d:0,virtio-blk,%s%s", diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 0ee2e06664..0d076fc08c 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -463,7 +463,8 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *= dev, virDomainDiskDef *disk =3D dev->data.disk; =20 if ((disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA || - disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_VIRTIO) && + disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_VIRTIO || + disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_NVME) && disk->info.bootIndex > INT_MAX) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("boot order '%1$u' is greater than bhyve's ma= ximum of %2$d"), @@ -493,6 +494,21 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef = *dev, } } =20 + if (disk->blockio.physical_block_size > INT_MAX || + disk->blockio.logical_block_size > INT_MAX) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("block size is greater than bhyve's maximum o= f %1$d"), + INT_MAX); + return -1; + } + + if (disk->blockio.physical_block_size > 0 && + disk->blockio.logical_block_size =3D=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Setting physical block size without logical = block size is not supported")); + return -1; + } + break; } case VIR_DOMAIN_DEVICE_NET: { diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-blockio-inva= lid.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-blockio-invalid= .xml new file mode 100644 index 0000000000..5e46276602 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-blockio-invalid.xml @@ -0,0 +1,17 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.args= b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.args new file mode 100644 index 0000000000..2d82a4c6fc --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,nvme,/tmp/nvme-ignore.img,maxq=3D2,qsz=3D256,eui64=3D0x01000000efbe= adde,ser=3DBHYVE-NVME0-01234,nodelete,sectorsize=3D4096/4096 \ +-s 3:0,ahci,hd:/tmp/sata-ignore.img,nmrr=3D7200,ser=3DBHYVE-SATA-IGNORE,no= delete,sectorsize=3D512/4096,hd:/tmp/sata-unmap.img,nmrr=3D5400,ser=3DBHYVE= -SATA-UNMAP,sectorsize=3D4096 \ +-s 4:0,virtio-blk,/tmp/virtio-ignore.img,nodelete,sectorsize=3D512/4096 \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.ldar= gs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.ldargs new file mode 100644 index 0000000000..b5e7d06c0a --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/sata-ignore.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.xml = b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.xml new file mode 100644 index 0000000000..448fba92bd --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-options.xml @@ -0,0 +1,41 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + BHYVE-NVME0-01234 + + + BHYVE-SATA-IGNORE + + + + + + + BHYVE-SATA-UNMAP + + + + + + + + + + + + + + + + 01000000efbeadde + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index c208db6311..28b5ee981b 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -240,6 +240,8 @@ mymain(void) DO_TEST("disk-cdrom"); DO_TEST("disk-virtio"); DO_TEST("disk-readonly"); + DO_TEST("disk-options"); + DO_TEST_FAILURE("disk-blockio-invalid"); DO_TEST("macaddr"); DO_TEST("serial"); DO_TEST("console"); --=20 2.55.0 From nobody Thu Nov 12 15:08:48 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793991422495943.5679109798199; Fri, 6 Nov 2026 10:57:02 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 2CF3741B89; Fri, 6 Nov 2026 13:57:01 -0500 (EST) Received: from [172.19.199.22] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 540444187C; Fri, 6 Nov 2026 13:50:19 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id CFE7E3F862; Fri, 6 Nov 2026 13:49:50 -0500 (EST) Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) (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 E674C4187C for ; Fri, 6 Nov 2026 13:49:48 -0500 (EST) Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-6b57182c4c6so1210915a12.2 for ; Fri, 06 Nov 2026 10:49:48 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-25f6-628e-6064-de9b.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:25f6:628e:6064:de9b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b664ad2901sm1010147a12.6.2026.11.06.10.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Nov 2026 10:49:47 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793990987; x=1794595787; darn=lists.libvirt.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=HIAMsnbUpRg5k02kBZm25b/hcimdex1qdaCFrr6gIlc=; b=tZo5BAOdzJSaINzUyJq94AXe3VVJ1oO2jl4w+QSCkbKkUTq3/7umrXtcrgLWZx83x8 WLeWyngSoiKB3jyQL2+k9Vd6Hs92VcO6SfuV+uL+rFDZR7285wbF0ms3yozsZTucB0O5 ZQ4tFtVEjFiFu4QZ6NFre1q6gR5yh6HCalyODdqNZM5WECL9qVbf4FbdhEuVIN/5N4YR Jp9veK0yi53yvsIl857aluXvbbJLuIdID9HmxZg8dpgvgEWqkzFH23ivaabT2k4BcztU FOgCEFG7tcy12OSg/e0P3oW1pbqH08tLe9xrpqaoVlOqadiCmRgggrRzpSezOIJQGLsH cXZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793990987; x=1794595787; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HIAMsnbUpRg5k02kBZm25b/hcimdex1qdaCFrr6gIlc=; b=gvWeGYYrhRW478RyIRyVv9S5qddUAU9A4aVAjz3+lsdqHGrhH/9sm66ewYnQovRcM/ AZeEchDlsSxQCGQSrZxu5z3OCR9ltILFailZlgRMgfNPpSZ2VdbtKI396n69cUIyKmat rUYClo7ILGpX6p34zujxwcey8Vu/RjchwO1NLjU3CslOihoahPUkYHtynotyooLganxO cFCi0eqroF+mebiUVVc46mcNpOSNEJnEMcJqOnUP9BetFf38UHLIdaMIMXPc7a791o0M j1HdHq+nDi1asqaWPcV61ke7uj4mCGgCxs4cE9RTt+AsNJSfbrUX0/C7DfAqVuIlmUT2 1BXg== X-Gm-Message-State: APuU4Z/oup/NRue4nIfd169v90uAWKT5JoVH29AGW0rROztT/OAg5sRP LIlHUH2HDz49XHodE5Q8D0o97A4Nc2wqDIUBgu4AbDGWRHS9suo8eGtycBPFL/dw X-Gm-Gg: AYBFou1MXMT+T2lJYMHd0h2fAQMgsfqh50UvMnjUiyQruA77wqv0PjgQtJ2XYD2vdjZ PCib/N5s1f2OR4MhD/xpxXUx68sSH15f/5DztAvwVRe+X59H+rP050J1c/d+oDGoJ72r9tnI1gy zTufxPBFN31yY5gKMOTBsogAw5+CXIUWxT18QwZDj/+S8NQou0G7SXPZvzR28tRH7eTkdyaynoU YlZX0hMyihgHWERae4NGdelJzmLGufzaHX02Kx/xWsskPWEEGByBnWuBBSgv7z1pJMuawBaGUiD oWhcGmm1ycyL9V9matG1YoWUinxS6onQHdPa9ghCPrmg3VGmn7P4lOvqfWhbCvlmj1HCXRPOUmn dvuZ+guj3xs/zz5PGuJfzhVv5+HoM9A9dAaXyLREbp8IycgwI368dtNO38zyaGstoOYiS9CfkNx R5Pb7PjpyKHeaGy/nFYXDvXPj1cfbxJ9BFd1iLTltl9Scq9votsR33khUleGiFJEWe9LjYcejyv /fSA8v844LDz+ubkgnlpfS0DDwXdm/zcS49ep5IfptUEV4P71iVrDMCRl3WIFWBsIHwvNhQdB4V LUjqIg1eGNtw9iPw5QByJWtQjj3KLxlcAhu1BBjspRmsMG/NEFMzrjlPlmuYl50XW7hFlwu0qrs lDTk2BsXivf85QczUB5Bum/ISYPfiQm9cR36sSydl X-Received: by 2002:a05:6402:548b:b0:6b6:4dcd:967e with SMTP id 4fb4d7f45d1cf-6b64dcd9b39mr1869059a12.20.1793990987373; Fri, 06 Nov 2026 10:49:47 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 3/4] bhyve: support disk type='block' Date: Fri, 6 Nov 2026 19:48:24 +0100 Message-ID: <20261106184825.18515-4-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261106184825.18515-1-bogorodskiy@gmail.com> References: <20261106184825.18515-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID-Hash: IBPWBXZTLHXSCWQFGAPS7SXLWAWFIUGW X-Message-ID-Hash: IBPWBXZTLHXSCWQFGAPS7SXLWAWFIUGW 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: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1793991424023158500 The bhyve driver currently rejects configurations for AHCI and virtio-blk disks, though bhyve supports them: >From the bhyve(8) manual page: Block storage device backends: =E2=80=A2 /filename[,block-device-options] =E2=80=A2 /dev/xxx[,block-device-options] Thus, relax disk type checks and permit these configurations. Signed-off-by: Roman Bogorodskiy Reviewed-by: Jiri Denemark --- src/bhyve/bhyve_command.c | 9 ++-- .../x86_64/bhyvexml2argv-disk-block.args | 13 ++++++ .../x86_64/bhyvexml2argv-disk-block.ldargs | 1 + .../x86_64/bhyvexml2argv-disk-block.xml | 27 +++++++++++ tests/bhyvexml2argvtest.c | 1 + .../x86_64/bhyvexml2xmlout-disk-block.xml | 46 +++++++++++++++++++ tests/bhyvexml2xmltest.c | 1 + 7 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block= .args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block= .ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block= .xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-b= lock.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 49c3101027..f5ee2b041f 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -341,7 +341,8 @@ bhyveBuildAHCIControllerArgStr(const virDomainDef *def, =20 VIR_DEBUG("disk %zu controller %d", i, controller->idx); =20 - if ((virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_FILE) && + if ((virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_BLOCK) && + (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_FILE) && (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_VOLUME)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk type")); @@ -609,7 +610,8 @@ bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_GN= UC_UNUSED, return -1; } =20 - if ((virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_FILE) && + if ((virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_BLOCK) && + (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_FILE) && (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_VOLUME)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk type")); @@ -1524,7 +1526,8 @@ virBhyveUsableDisk(virDomainDiskDef *disk) return false; } =20 - if ((disk_type !=3D VIR_STORAGE_TYPE_FILE) && + if ((disk_type !=3D VIR_STORAGE_TYPE_BLOCK) && + (disk_type !=3D VIR_STORAGE_TYPE_FILE) && (disk_type !=3D VIR_STORAGE_TYPE_VOLUME) && (disk_type !=3D VIR_STORAGE_TYPE_CTL)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.args b= /tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.args new file mode 100644 index 0000000000..64c3aca2a0 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.args @@ -0,0 +1,13 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-l bootrom,/path/to/test.fd,fwcfg=3Dqemu \ +-s 1:0,lpc \ +-s 2:0,ahci,hd:/dev/zvol/zroot/bhyve-sata \ +-s 3:0,nvme,/dev/zvol/zroot/bhyve-nvme \ +-s 4:0,virtio-blk,/dev/zvol/zroot/bhyve-virtio \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.ldargs= b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.ldargs new file mode 100644 index 0000000000..421376db9e --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.ldargs @@ -0,0 +1 @@ +dummy diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.xml b/= tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.xml new file mode 100644 index 0000000000..7ba7450f20 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-block.xml @@ -0,0 +1,27 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + /path/to/test.fd + + + + + + + + + + + + + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 28b5ee981b..c86929b308 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -237,6 +237,7 @@ mymain(void) DO_TEST("acpiapic"); virBhyveCapsClear(driver.bhyvecaps, BHYVE_CAP_ACPI); DO_TEST_FAILURE("acpiapic"); + DO_TEST("disk-block"); DO_TEST("disk-cdrom"); DO_TEST("disk-virtio"); DO_TEST("disk-readonly"); diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-block.xm= l b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-block.xml new file mode 100644 index 0000000000..553695dec9 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-block.xml @@ -0,0 +1,46 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + /path/to/test.fd + + + + destroy + restart + destroy + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + +
+ + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 724ba4d85f..208d87b280 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -111,6 +111,7 @@ mymain(void) DO_TEST_DIFFERENT("console"); DO_TEST_DIFFERENT("console-master-slave-not-specified"); DO_TEST_DIFFERENT("custom-loader"); + DO_TEST_DIFFERENT("disk-block"); DO_TEST_DIFFERENT("disk-cdrom"); DO_TEST_DIFFERENT("disk-cdrom-grub"); DO_TEST_DIFFERENT("disk-virtio"); --=20 2.55.0 From nobody Thu Nov 12 15:08:48 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 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=1793991552; cv=none; d=zohomail.com; s=zohoarc; b=eAlpJjDy9rA/gFRUhE9fIgfYkfpxlSQ/c9/pDB28B9O4i3VGov/kIvZ2RN038IdyA+eZQfeqVK1+Uu4uFrajlUtI6zjHtpyK0zcG0PAYHnMRViBpsbYXn2tFVMkEV04xLKreuCxI+J/DxcBBx6oGyZGQvRtQHOJw9F3Xb6YL/e8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793991552; 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:Subject:Subject:To:To:Message-Id:Reply-To; bh=/EYWycg7BKrSgSIvke9gYTlKNnwJI/n1EGdZ1QKPza8=; b=GNntfHL5BqNPD5bhF3Bj9Ps6Td53nFHAPKDOmzmtC7rHUYytWoke4bLSgGkPJy6kJEfUZXeBAqppQXy03sQiF4Fs9gTx1nHoaE4fuc22xqGNm30B0EQKjBEWd5N0x+BYQXeUhonAvmeVKfAiLn8NZjkw7fYM1Pdx2eZ+ga38K6g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 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 [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793991552832253.90513226848907; Fri, 6 Nov 2026 10:59:12 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id B06B341B65; Fri, 6 Nov 2026 13:59:11 -0500 (EST) Received: from [172.19.199.22] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 3D5B941D95; Fri, 6 Nov 2026 13:50:26 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 74AA33F289; Fri, 6 Nov 2026 13:49:51 -0500 (EST) Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) (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 63C503F289 for ; Fri, 6 Nov 2026 13:49:49 -0500 (EST) Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-c3fd91337baso179103966b.3 for ; Fri, 06 Nov 2026 10:49:49 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-25f6-628e-6064-de9b.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:25f6:628e:6064:de9b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b664ad2901sm1010147a12.6.2026.11.06.10.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Nov 2026 10:49:47 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 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_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793990988; x=1794595788; 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:content-type; bh=/EYWycg7BKrSgSIvke9gYTlKNnwJI/n1EGdZ1QKPza8=; b=YXHqw6KlJctZVIXLtBn7TvoIhpqIfQqn16W+/QkuYWTlp+ZhLYQBjP9si/CkuQ28Re 2e1h0wuAQBdkauSycpjcosb7hERAXFm5ic/7MjNrdXiQjczwv4+hzmSG1CoYbUkxPNAW 9jDQJ0Q578/0ynOpTpdvmkjpEoREsSGwvZr01W4z3EVLSwwa9luHC4NaKSmFnpSaHhHI F+nGunUMSA2O3veMn4wGA6SDyr/8C6ubzO4Y6TyIu+xO6d2NTYFL27noA7fkvtBX5FoI QoCGW9ZSNYhHxRfMCp/8iEC/2SHXuaCtAnCnzSb8DwyrDp1yADq3LS3nm+ZvBSJ63Ru+ ZUIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793990988; x=1794595788; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/EYWycg7BKrSgSIvke9gYTlKNnwJI/n1EGdZ1QKPza8=; b=G47HVk5FSIDlk8Aiz1mKsgMDWeCgYHaA/s2FMLNvCAu0AQ28r1XQ6bWzYlD8Ar2LRr Q2QwL1Hb0oKHvdTzm9ehTeohoFq1bzexHs71OlJa5Tgq3kOvRgtikDeFAin1v+uIZAy/ PQMjmKLKt/VTEmPS2oEmCf298SHNlVgZmotv0bJonjDRRiGAV9T4pSq/9Eyyd1UATzZE 7zGKDwCHSWXx9YnQoWq9GF1MzefchFUNrVmI3KvxMXLOKKXuzA9qXVqqPtGxpG2ndWtJ fjsUPZGEhYCU0vhoYQcDlQMuX+I4He7vqfyvA31gNcDihS54TC8PbzoyVgesecpZoPDf 8HgA== X-Gm-Message-State: APuU4Z9rXjjtRRfHZgmQCujtqABawfP1+rcVf4yAoL9Q4GAf7DT1CnI7 WYGUxXZhEWm9QmOswQwoPEuP7cCFlVDYJyNcL792LCPLKtk0BCZCLMWnyxGXbq/O X-Gm-Gg: AYBFou3U2R9YOxzUgoQuZD4Zeh7nMGaL57459lejQSBz8P7/Jn7alAfia8pF/wZPYR7 Z0umA/WdUIJ7DBjyntQHAgujk8Np8rOKcGV2AIaRuk0H5gBg6W3OiO1ihZuD9vMi2JoglVYAG7m C4og1ZR0Ka3d6n3AhuSMzecUjCl1BjSFqsA8anzHbVvtT8IZ2yisBeS1mMX/XdfN1ZXJJb6uneE 0GmRTn9aUkglUdZJakpI5GTf4Pm6keANG81/J4iEQ7UBAaR3CLtHyes38to3d5h+Tbefw5BZ1Ep nXPbV+hI+uWI1urNgmTaalDK+ZEWAD74dWxKbfxWO9PPfT4MyQ853tWGgeFl/4fPTkhr87jTNmY 4iAnmTafWA6Eu42MxEWBOVVFZbgrgzP8ZpjOLFag2cqecVgMUGJww/ISegPtz4p5rJQNxQI/q4l jFR72Z891m8YBcOSyRICPBO42Lk5d1AUjLPlSTTyJrKqws2J6UFf8OxoRhWdkPxCNfJhDnnm4sV l7oI5AV1GTk1dmhYNDGS1/93zKPfjTHa8iztDhwNZi+9+0sPYBlP+kaFxsiUKmm+YdC76tGoEDr b6QywgufhSf7GWnuUVPoYnbZIA6l6K6JHHD05p4MmhjLKe+eqFpasr1kHR4ilcX+IdNDvJWQvbZ t/Hmic1Fg5Cf9LJiZy6PXXUVoeeYMxQBVyTCbU5t0Iw== X-Received: by 2002:a17:907:3e9e:b0:c34:c5e8:1dc5 with SMTP id a640c23a62f3a-c4d34c95bb3mr298836766b.20.1793990988002; Fri, 06 Nov 2026 10:49:48 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 4/4] bhyve: honor PCI functions for disk controllers Date: Fri, 6 Nov 2026 19:48:25 +0100 Message-ID: <20261106184825.18515-5-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261106184825.18515-1-bogorodskiy@gmail.com> References: <20261106184825.18515-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: M6OXIOQS5C7FWCEWHMWWOTGW2Y3JYHJR X-Message-ID-Hash: M6OXIOQS5C7FWCEWHMWWOTGW2Y3JYHJR 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: 1793991553961158500 Content-Type: text/plain; charset="utf-8" Currently, the bhyve driver hardcodes PCI function 0 for several controllers, specifically: ahci, virtio-blk, virtio-scsi, and nvme. There is no specific reason for that, so use the configured PCI function instead. Signed-off-by: Roman Bogorodskiy Reviewed-by: Jiri Denemark --- src/bhyve/bhyve_command.c | 12 +++-- .../x86_64/bhyvexml2argv-disk-pci-addr.args | 12 +++++ .../x86_64/bhyvexml2argv-disk-pci-addr.ldargs | 4 ++ .../x86_64/bhyvexml2argv-disk-pci-addr.xml | 40 +++++++++++++++ tests/bhyvexml2argvtest.c | 1 + .../x86_64/bhyvexml2xmlout-disk-pci-addr.xml | 50 +++++++++++++++++++ tests/bhyvexml2xmltest.c | 1 + 7 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-a= ddr.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-a= ddr.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-a= ddr.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-p= ci-addr.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index f5ee2b041f..be66d26c50 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -394,8 +394,9 @@ bhyveBuildAHCIControllerArgStr(const virDomainDef *def, } =20 virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,ahci%s", + virCommandAddArgFormat(cmd, "%d:%d,ahci%s", controller->info.addr.pci.slot, + controller->info.addr.pci.function, virBufferCurrentContent(&buf)); =20 return 0; @@ -447,8 +448,9 @@ bhyveBuildSCSIControllerArgStr(const virDomainDef *def, } =20 virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,virtio-scsi,%s", + virCommandAddArgFormat(cmd, "%d:%d,virtio-scsi,%s", controller->info.addr.pci.slot, + controller->info.addr.pci.function, virDomainDiskGetSource(disk)); =20 return 0; @@ -544,8 +546,9 @@ bhyveBuildNVMeControllerArgStr(const virDomainDef *def, nvme_opts =3D virBufferContentAndReset(&opt); =20 virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,nvme,%s%s", + virCommandAddArgFormat(cmd, "%d:%d,nvme,%s%s", controller->info.addr.pci.slot, + controller->info.addr.pci.function, disk_source, NULLSTR_EMPTY(nvme_opts)); =20 @@ -623,8 +626,9 @@ bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_GN= UC_UNUSED, bhyveBuildCommonDiskOpts(disk, &opts); =20 virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,virtio-blk,%s%s", + virCommandAddArgFormat(cmd, "%d:%d,virtio-blk,%s%s", disk->info.addr.pci.slot, + disk->info.addr.pci.function, disk_source, virBufferCurrentContent(&opts)); =20 diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.arg= s b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.args new file mode 100644 index 0000000000..8d171d5c2a --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.args @@ -0,0 +1,12 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:1,ahci,hd:/tmp/sata.img \ +-s 3:2,virtio-scsi,/dev/cam/ctl \ +-s 4:3,nvme,/tmp/nvme.img \ +-s 5:4,virtio-blk,/tmp/virtio.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.lda= rgs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.ldargs new file mode 100644 index 0000000000..efd5638b23 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/sata.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.xml= b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.xml new file mode 100644 index 0000000000..48f45ff1dd --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-disk-pci-addr.xml @@ -0,0 +1,40 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index c86929b308..f5df8a0265 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -240,6 +240,7 @@ mymain(void) DO_TEST("disk-block"); DO_TEST("disk-cdrom"); DO_TEST("disk-virtio"); + DO_TEST("disk-pci-addr"); DO_TEST("disk-readonly"); DO_TEST("disk-options"); DO_TEST_FAILURE("disk-blockio-invalid"); diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-pci-addr= .xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-pci-addr.xml new file mode 100644 index 0000000000..67a78a51e3 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-disk-pci-addr.xml @@ -0,0 +1,50 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + +
+ + +
+ + +
+ + + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 208d87b280..03cdb5dd92 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -112,6 +112,7 @@ mymain(void) DO_TEST_DIFFERENT("console-master-slave-not-specified"); DO_TEST_DIFFERENT("custom-loader"); DO_TEST_DIFFERENT("disk-block"); + DO_TEST_DIFFERENT("disk-pci-addr"); DO_TEST_DIFFERENT("disk-cdrom"); DO_TEST_DIFFERENT("disk-cdrom-grub"); DO_TEST_DIFFERENT("disk-virtio"); --=20 2.55.0