From nobody Thu Jan 8 12:14:05 2026 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; 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=1767449943; cv=none; d=zohomail.com; s=zohoarc; b=WMyQWAUZJyhSDWmroiAsxZKYCI3qX9juA/F/ZHlZCOCFMlqH1t+O2m9UVg1x6YMTjPlNdQeuMl4OH1IdFguo2v+yMxGR9IJFNvICjUTbtup+Vlw3JjNZYi3UfsZ4hTCVpJj/WVuyoYbH82JuS2NdjZWe9aNkfChE5DD4bE9m0Po= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767449943; h=Content-Type: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=P+ZEOeWcd7X7i38LuvcnXzkh7AxfUg+aZDNAL4SqH9E=; b=HIP3eeQGsjjun7kZuc9W2iuaRgE0jUN/kLDKp/LovGRgPTfkB9B2nsx+kSJy6XSEQj6HNkImQHMYFBCLxX/FZD+zGBnwrSRcwiVnuNJieuTbVBbG/H2G5nSw/lpywwBrymuixjYMGS0Y04WkneQYR0ty27n/berkgp12WWXjNCo= 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 1767449943815382.7913658484091; Sat, 3 Jan 2026 06:19:03 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 1A686417F8; Sat, 3 Jan 2026 09:19:03 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id CC32A4197B; Sat, 3 Jan 2026 09:17:32 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 1F5A33F8E5; Sat, 3 Jan 2026 09:14:32 -0500 (EST) Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 DFA0E3F8B4 for ; Sat, 3 Jan 2026 09:14:30 -0500 (EST) Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-64ba9a00b5aso15078206a12.2 for ; Sat, 03 Jan 2026 06:14:30 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8037ab86cesm4961769166b.19.2026.01.03.06.14.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jan 2026 06:14:27 -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=-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=1767449669; x=1768054469; 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=P+ZEOeWcd7X7i38LuvcnXzkh7AxfUg+aZDNAL4SqH9E=; b=XBTUtLSlesmXz9GErwnVkFvQZu16n+EQmzmIT+rv43lDvvvopYFHr5q/ou5mHsM4Yw H8OxtXSFYmGgjeSC7ksM30tcChyRQG4UIISAfQtzWhba4zyp4em5E6z/Wo/l5CpZprIa 99BISMaggFMBWXpubEsKEOJzzMyl6Uf+sj2Uafzx/nL9UbYY/hBYYKRND9bXnJXpIp4M H0YF8BNW0wCBq4YKdKDkgxdN1xSi555APNWrbdamXxzSdfUGh509W/aQMlqiiedTpXgP 9ioU0aLcYBnyspa0VVVIBtfkXRIy8dEBX//shRMO0cjKl0NwkcOKAW3DkppP3pCBEwod 8hhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767449669; x=1768054469; 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; bh=P+ZEOeWcd7X7i38LuvcnXzkh7AxfUg+aZDNAL4SqH9E=; b=NsAEvOoAaK+nd4uBTrJI8+IQTcZOJfVuHMMXE9BLo6Y5Fds0hIArLpK6sghugP8EGx DRn1HC9+MJTiZm5V+2ZrFjpfwGkEamWk/pSzfNt9aC068IrWuZPnchlIw4mGQaQaz/P4 Xu0oGgOvY9vygg6VnQdjE1no82DzoH19fky4CPlm/kpYIQ9AtkECLkzWa8PfSpkjE/76 MbprZZzgqoCMI3R9ulGl5I23lV+6B0luXpRJgtsm7i8LZbq9pEMILDkUmhHEhTwA8MQ+ w+CnZ5l2GGpxOBElnv+Izv8obUgPYaymsUN7fc2T2TCp9b1U23d3KmSc4DQ05ICFT0Qs SoJw== X-Gm-Message-State: AOJu0YwrH2FVphRFvsJqhRFeBEmoRYWhFswX14QFFjBdoC+vY2UMdepa 6vrJtQPOrrC0OcnxOnjFIH64vCMRlqE/49Nvg4EDkuqtY0t3c326Nt48M0Dt47et X-Gm-Gg: AY/fxX7o1umgzVuzRUln8HWGiV2TE+Ev7GEzWpFDf1fFUjHlThNenNcx4f2zJl0a/pu /eL6mJH2cHNzTX9U/vTN1cuNURCULgrdVQm/MbeMKrXpk9ZK41/IINv1N1Bkc0qPRiCmda51/Yc GYuVLw1iJGAPPaR3PnkghxH1KY3pfjUx9tnVVy70wAPzyH24VCU8ZWKjhdLUd7nHRdwhL85cGq7 +A/27GxMfyQcHH28YTpXknX0s++A+4PpUk6vX4qjYqsDFkdJu/pwd1fLw3x6XPEOE/wPrvGP7Sa Z7LtaaCff2loEil9/yByI01Z2PavQX/osDxU6cBO8iYR8rknprXE6D77ECBXUjcei+EtvtkHE7z GJIE+v2aN8UxF63uael7yceAeAWis2Zm3Og3E+rIu3Z6aJEzkserAQbYAPwunPiF082kX0GDYv5 vhMIdcoutmzq4OdemwXIh/F/yRNPD6TWfH8+/wvbUOegUC39j+al8bqn3m/1AEJxkC0v5YI5xA6 SoiQHHJrNrwSzKPQDqzzXRJ X-Google-Smtp-Source: AGHT+IFkimdk9g2BRpDj1BMucS9uaYZw0Thv32nzDf8Ia0Ep2qN0TZSzpw2rc57izmyLIYG7KvS1JQ== X-Received: by 2002:a17:906:30d4:b0:b80:3fff:3369 with SMTP id a640c23a62f3a-b803fff3447mr3461205066b.48.1767449668985; Sat, 03 Jan 2026 06:14:28 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 1/3] conf: introduce CTL storage type Date: Sat, 3 Jan 2026 15:11:40 +0100 Message-ID: <20260103141142.53817-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260103141142.53817-1-bogorodskiy@gmail.com> References: <20260103141142.53817-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JQ5MT2MZN7DMDNQTGL4DISMMKXD2NF2X X-Message-ID-Hash: JQ5MT2MZN7DMDNQTGL4DISMMKXD2NF2X 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: 1767449945206154100 CTL stands for CAM Target Layer, and CAM stands for Common Access Method Storage subsystem, and is available on FreeBSD. Quoting the ctl(4) manual page: The ctl subsystem provides SCSI target devices emulation. It supports features such as: =E2=80=A2 Disk, CD-ROM and processor device emulation =E2=80=A2 Tagged queueing =E2=80=A2 SCSI task attribute support (ordered, head of queue, simple t= ags) =E2=80=A2 SCSI implicit command ordering support =E2=80=A2 Full task management support (abort, query, reset, etc.) =E2=80=A2 Support for multiple ports, initiators, targets and backing s= tores =E2=80=A2 Support for VMWare VAAI and Microsoft ODX offload (COMPARE AN= D WRITE, XCOPY, POPULATE TOKEN/WRITE USING TOKEN, WRITE SAME and UNMAP) =E2=80=A2 Persistent reservation support =E2=80=A2 Extensive VPD/mode/log pages support =E2=80=A2 Featured error reporting, error injection and basic SMART sup= port =E2=80=A2 High Availability clustering support with ALUA =E2=80=A2 All I/O handled in-kernel, no userland context switch overhead This is a preparation for implementing virtio-scsi support for the bhyve driver. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_process.c | 1 + src/ch/ch_monitor.c | 1 + src/conf/domain_conf.c | 7 +++++++ src/conf/schemas/domaincommon.rng | 13 +++++++++++++ src/conf/storage_source_conf.c | 6 +++++- src/conf/storage_source_conf.h | 1 + src/libxl/xen_xl.c | 1 + src/qemu/qemu_block.c | 2 ++ src/qemu/qemu_command.c | 1 + src/qemu/qemu_migration.c | 3 +++ src/qemu/qemu_process.c | 1 + src/qemu/qemu_snapshot.c | 4 ++++ src/qemu/qemu_validate.c | 1 + src/storage_file/storage_source.c | 1 + 14 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 7de614a1a3..1d436da609 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -405,6 +405,7 @@ bhyvePrepareNVRAM(bhyveConn *driver, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_LAST: case VIR_STORAGE_TYPE_NONE: break; diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 46b31acc76..52f281cf73 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -285,6 +285,7 @@ virCHMonitorBuildDiskJson(virDomainDiskDef *diskdef) case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_LAST: default: virReportEnumRangeError(virStorageType, diskdef->src->type); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 541dad5bdc..b85bbbcaf6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7831,6 +7831,9 @@ virDomainStorageSourceParse(xmlNodePtr node, if (!(src->vdpadev =3D virXMLPropStringRequired(node, "dev"))) return -1; break; + case VIR_STORAGE_TYPE_CTL: + src->path =3D virXMLPropString(node, "dev"); + break; case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -23711,6 +23714,10 @@ virDomainDiskSourceFormat(virBuffer *buf, virBufferEscapeString(&attrBuf, " dev=3D'%s'", src->vdpadev); break; =20 + case VIR_STORAGE_TYPE_CTL: + virBufferEscapeString(&attrBuf, " dev=3D'%s'", src->path); + break; + case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 1f9ac102a0..5d5fd87f87 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -1905,6 +1905,7 @@ + =20 @@ -2544,6 +2545,18 @@ =20 + + + ctl + + + + + + + + + diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c index 087de1eaf2..d7b9bdfecb 100644 --- a/src/conf/storage_source_conf.c +++ b/src/conf/storage_source_conf.c @@ -48,7 +48,8 @@ VIR_ENUM_IMPL(virStorage, "volume", "nvme", "vhostuser", - "vhostvdpa" + "vhostvdpa", + "ctl", ); =20 =20 @@ -976,6 +977,7 @@ virStorageSourceIsSameLocation(virStorageSource *a, case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_LAST: case VIR_STORAGE_TYPE_VOLUME: + case VIR_STORAGE_TYPE_CTL: /* nothing to do */ break; } @@ -1058,6 +1060,7 @@ virStorageSourceIsLocalStorage(const virStorageSource= *src) case VIR_STORAGE_TYPE_FILE: case VIR_STORAGE_TYPE_BLOCK: case VIR_STORAGE_TYPE_DIR: + case VIR_STORAGE_TYPE_CTL: return true; =20 case VIR_STORAGE_TYPE_NETWORK: @@ -1263,6 +1266,7 @@ virStorageSourceIsRelative(virStorageSource *src) case VIR_STORAGE_TYPE_FILE: case VIR_STORAGE_TYPE_BLOCK: case VIR_STORAGE_TYPE_DIR: + case VIR_STORAGE_TYPE_CTL: return !g_path_is_absolute(src->path); =20 case VIR_STORAGE_TYPE_NETWORK: diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index fc868b31af..22c35d420d 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -44,6 +44,7 @@ typedef enum { VIR_STORAGE_TYPE_NVME, VIR_STORAGE_TYPE_VHOST_USER, VIR_STORAGE_TYPE_VHOST_VDPA, + VIR_STORAGE_TYPE_CTL, =20 VIR_STORAGE_TYPE_LAST } virStorageType; diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index b2ff0edcf2..e72e7d7f44 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -1531,6 +1531,7 @@ xenFormatXLDiskSrc(virStorageSource *src, char **srcs= tr) case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index a7062d3e96..9b43279797 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1046,6 +1046,7 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourc= e *src, src->srcpool->pool, src->srcpool->volume); return NULL; =20 + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportEnumRangeError(virStorageType, actualType); @@ -2417,6 +2418,7 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorag= eSource *src, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: return 0; =20 case VIR_STORAGE_TYPE_NONE: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 98229d7cf9..0de0a79b46 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1486,6 +1486,7 @@ qemuBuildDriveSourceStr(virDomainDiskDef *disk, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1371742529..08f05ff727 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -344,6 +344,7 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -499,6 +500,7 @@ qemuMigrationDstPrepareStorage(virDomainObj *vm, /* Existance of 'volume' type disks are handled when pre-creat= ing them */ break; =20 + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_LAST: case VIR_STORAGE_TYPE_NONE: break; @@ -1725,6 +1727,7 @@ qemuMigrationSrcCheckStorageSourceSafety(virStorageSo= urce *src, case VIR_STORAGE_TYPE_BLOCK: case VIR_STORAGE_TYPE_DIR: case VIR_STORAGE_TYPE_VOLUME: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_LAST: *requires_safe_cache =3D true; break; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0e50cd1ccc..4e1d713809 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4994,6 +4994,7 @@ qemuPrepareNVRAM(virQEMUDriver *driver, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_LAST: case VIR_STORAGE_TYPE_NONE: if (reset_nvram) { diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 5b0b52e2ba..bad135ee61 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -689,6 +689,7 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapsh= otDiskDef *snapdisk, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -708,6 +709,7 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapsh= otDiskDef *snapdisk, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -752,6 +754,7 @@ qemuSnapshotPrepareDiskExternalActive(virDomainSnapshot= DiskDef *snapdisk, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -914,6 +917,7 @@ qemuSnapshotPrepareDiskInternal(virDomainDiskDef *disk, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index da08fd17cd..c43e794816 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -717,6 +717,7 @@ qemuValidateDomainDefNvram(const virDomainDef *def, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported nvram disk type '%1$s'"), virStorageTypeToString(src->type)); diff --git a/src/storage_file/storage_source.c b/src/storage_file/storage_s= ource.c index 1883225a8b..e886433bb4 100644 --- a/src/storage_file/storage_source.c +++ b/src/storage_file/storage_source.c @@ -625,6 +625,7 @@ virStorageSourceUpdatePhysicalSize(virStorageSource *sr= c, case VIR_STORAGE_TYPE_NVME: case VIR_STORAGE_TYPE_VHOST_USER: case VIR_STORAGE_TYPE_VHOST_VDPA: + case VIR_STORAGE_TYPE_CTL: case VIR_STORAGE_TYPE_NONE: case VIR_STORAGE_TYPE_LAST: return -1; --=20 2.52.0 From nobody Thu Jan 8 12:14:05 2026 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; 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=1767450056; cv=none; d=zohomail.com; s=zohoarc; b=IENBP0hx1vSzVvLGr8+0WXOkE8HaYrtWYnp5fgshy4f0FG6lCdhKaKgA8KsUDP7adBQeh/mz8Uo0HG6iRWZ6iVYd8MmrlRuNHsrRD6c248o+I1Pg2sZlItTl/IdRxPBSmXCrIxNl3vi8dTVDO2UfKBZFLXyRY86FWSor/3MpCY4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767450056; 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=6eTzEp9cll727QF0zwcXRnUD0zelm8IorWNDPN+b9p4=; b=Y35qZEQINewKJFJj9LAOmxNSoNQtNRd/dgr0xXPBBt/txUDbJjobiJCvyGfqiqQEfEnmG8y1FZzqnNsTkg2n5AOvV1G/XwXt2AsSeuzH7KDemcxbxUHQam8KM+ofFcvbvpUOUCStvwRsxeHjzJJivaHZABKrDyL5ZsHOWLj6Qx0= 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 176745005631475.16151122547967; Sat, 3 Jan 2026 06:20:56 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 605B03F8B0; Sat, 3 Jan 2026 09:20:55 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 8D6FC41A12; Sat, 3 Jan 2026 09:17:50 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 00030417F0; Sat, 3 Jan 2026 09:14:33 -0500 (EST) Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 8A6FC3F8B4 for ; Sat, 3 Jan 2026 09:14:32 -0500 (EST) Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b7277324054so2093092466b.0 for ; Sat, 03 Jan 2026 06:14:32 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8037ab86cesm4961769166b.19.2026.01.03.06.14.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jan 2026 06:14:29 -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=-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=1767449671; x=1768054471; 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=6eTzEp9cll727QF0zwcXRnUD0zelm8IorWNDPN+b9p4=; b=BJVeOEKabBWlDnQMhqU08TsBAxNvtwBuBVUPdExRAF0GSDFyDZnE3DGuUnLRYAZxkd GAksRAM8Y9BqJgDQ2K6TIfcNabnCvI8BHFcvNi3AtaFhI3/8LHaczytesD7lkqLwRXBi 1IuHMg7stNgdrD7o46KBmfTLI6BkF1G11B6drFhsL6hsOginV/EE8B0wmARLUHEDJ8OS 18qcn5vqAnk6Iqkkcr7FRBoP7rUegLT+8gfBJo8P7eAiZjvdKKz6uNM/oTpmZk9O5NIp FC/q3ETH4od59FJtY4p6K0ymqdKSNzPoZdMWB/fNB5e2yfyhTVIpyISekv3CjshOpwas iWfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767449671; x=1768054471; 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; bh=6eTzEp9cll727QF0zwcXRnUD0zelm8IorWNDPN+b9p4=; b=cQ8vZRlGcugDIXMq43I7qGIAY1jCJ9d5z3RYBn7EY+48G5pzoz+rFNlPwvJHSJXac7 XXNQBvcUxyjjLjEsiRn9cXxltj5ipAUHxsc7j/0bESdR0IeWKQaBELJ864NXjJZQjonm OZ/GTGzefCKVX0+a5q+rlPV0N+OX6SU2g2T/oXxlQ1U+XZxAdCnop4qVPbdQqFl6Kg7/ GmifdlrUDS9dc2xITvGOiy4BskHdA3YWhTi7so+08/2Y1vbWWFsx2g9czv3dMXfWGFJb vC5SuDVwpPxWL64++wiGfnkxEcy2n5lCHRziGkhsbjPkPGKnh31BeqKRE6kXH2iBB2O3 /kLw== X-Gm-Message-State: AOJu0YwLYwZw8+ljNydcwrTfZP/ZYLwoyBSLmYCRG+pIdTHgJm/w+fPw o6NR4PkofPd1BrSOuI3OnXWtFl9UhdhNQicVbx4N4+Hc0nfoKvkvzKo9USv3MpEk X-Gm-Gg: AY/fxX5AcDLiQcA6q0o5BsOHc/P3QXcD8fV+K0cK0ZfiQT2ntu+MS7nDpMF2yS2QT9M 3cHJ1J9hEmgOPt9LKqLy1awbHQcRlaMKVvoQb/aCEkoZNJe2cWlQIXpS6hWxYN0ZC4s3NSKRF+c Jv3ViVBcgEMSfBN6Fpmaz1H2Jqowo6MelTRyOOmtt6Bs71Qfy6aMhKMdWzNCHK6q3Mag0rDXNWs v5XLmWNXK0KgH6o1YmTPe3PlxX+TRA14HkZWH6pqnzuzditLCPVsZTW8/MsnRh90kfjAPwrnhf3 6HEJ2OozN/EwRX5KbsqLeAjMDbNih37CFY3fG/B5HArzdvEuZKfk9sZYSumyBx/TjZUcwMO6OpN +YyyR9AB3Cnuu4JrZWoRo3GwA7Wm13FULirunPZR2Ey0uq3uv3P+7FBu4WRNRF+pP7Hqs3HDAGv +t1H8bisegWeDlERtuj9XO7/RKMAea3K8hdbnYiBL1hYKaScKI6RqCi+8oET/xHteKsu4rRqy2G laRm3mEaZ5NKN6728C1gmx+ X-Google-Smtp-Source: AGHT+IElMpxJ5fpWoTEPkMdlv9RQ66FRSq3Nos83QdyaeaxbKgfxgCgLzMyz5igKHiNJicGIU+HBeg== X-Received: by 2002:a17:907:2d0e:b0:b76:bcf5:a38a with SMTP id a640c23a62f3a-b8036a924ffmr4958526466b.0.1767449670390; Sat, 03 Jan 2026 06:14:30 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 2/3] bhyve: add virtio-scsi support Date: Sat, 3 Jan 2026 15:11:41 +0100 Message-ID: <20260103141142.53817-3-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260103141142.53817-1-bogorodskiy@gmail.com> References: <20260103141142.53817-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZYV44JZH7GYPR6W6SWPERPGYOTFTDU6U X-Message-ID-Hash: ZYV44JZH7GYPR6W6SWPERPGYOTFTDU6U 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: 1767450058817154100 Content-Type: text/plain; charset="utf-8" Bhyve supports virtio-scsi devices using the following syntax: bhyve ... -s N,virtio-scsi,/dev/cam/ctl[pp.vp][,scsi-device-options] Where /dev/cam/ctl is a ctl(4) device path. The optional "scsi-device-options" include "iid" (Initiator ID) and "bootindex", which are currently not used by libvirt. Model this device using: Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_command.c | 73 ++++++++++++++++++- src/bhyve/bhyve_device.c | 1 + .../bhyvexml2argv-virtio-scsi.args | 10 +++ .../bhyvexml2argv-virtio-scsi.ldargs | 4 + .../bhyvexml2argv-virtio-scsi.xml | 21 ++++++ tests/bhyvexml2argvtest.c | 1 + .../bhyvexml2xmlout-virtio-scsi.xml | 32 ++++++++ tests/bhyvexml2xmltest.c | 1 + 8 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.args create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.ldargs create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.xml create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-virtio-scsi.x= ml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index bc37f4cef9..989af05f05 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -327,6 +327,63 @@ bhyveBuildAHCIControllerArgStr(const virDomainDef *def, return 0; } =20 +static int +bhyveBuildSCSIControllerArgStr(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++) { + g_auto(virBuffer) device =3D VIR_BUFFER_INITIALIZER; + virDomainDiskDef *disk =3D def->disks[i]; + + if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_SCSI) + continue; + + if (disk->info.addr.drive.controller !=3D controller->idx) + continue; + + VIR_DEBUG("disk %zu controller %d", i, controller->idx); + + if (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_CTL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("unsupported disk type")); + return -1; + } + + if (virDomainDiskTranslateSourcePool(disk) < 0) + return -1; + + disk_source =3D virDomainDiskGetSource(disk); + + if ((disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) && + (disk_source =3D=3D NULL)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("cdrom device without source path not support= ed")); + return -1; + } + + if (disk->device !=3D VIR_DOMAIN_DISK_DEVICE_DISK) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("unsupported disk device")); + return -1; + } + + virCommandAddArg(cmd, "-s"); + virCommandAddArgFormat(cmd, "%d:0,virtio-scsi,%s", + controller->info.addr.pci.slot, + virDomainDiskGetSource(disk)); + + return 0; + } + + return 0; +} + static int bhyveBuildUSBControllerArgStr(const virDomainDef *def, virDomainControllerDef *controller, @@ -458,6 +515,9 @@ bhyveBuildDiskArgStr(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: /* Handled by bhyveBuildAHCIControllerArgStr() */ break; + case VIR_DOMAIN_DISK_BUS_SCSI: + /* Handled by bhyveBuildSCSIControllerArgStr() */ + break; case VIR_DOMAIN_DISK_BUS_NVME: /* Handled by bhyveBuildNVMeControllerArgStr() */ break; @@ -465,7 +525,6 @@ bhyveBuildDiskArgStr(const virDomainDef *def, if (bhyveBuildVirtIODiskArgStr(def, disk, cmd) < 0) return -1; break; - case VIR_DOMAIN_DISK_BUS_SCSI: case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_NONE: @@ -502,6 +561,10 @@ bhyveBuildControllerArgStr(const virDomainDef *def, if (bhyveBuildAHCIControllerArgStr(def, controller, driver, cmd) <= 0) return -1; break; + case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: + if (bhyveBuildSCSIControllerArgStr(def, controller, driver, cmd) <= 0) + return -1; + break; case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (++*nusbcontrollers > 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -528,7 +591,6 @@ bhyveBuildControllerArgStr(const virDomainDef *def, 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: @@ -1087,6 +1149,8 @@ virBhyveProcessBuildCustomLoaderCmd(virDomainDef *def) static bool virBhyveUsableDisk(virDomainDiskDef *disk) { + virStorageType disk_type =3D virDomainDiskGetType(disk); + if (virDomainDiskTranslateSourcePool(disk) < 0) return false; =20 @@ -1097,8 +1161,9 @@ virBhyveUsableDisk(virDomainDiskDef *disk) return false; } =20 - if ((virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_FILE) && - (virDomainDiskGetType(disk) !=3D VIR_STORAGE_TYPE_VOLUME)) { + if ((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", _("unsupported disk type")); return false; diff --git a/src/bhyve/bhyve_device.c b/src/bhyve/bhyve_device.c index ead52ae704..28a9c82d7b 100644 --- a/src/bhyve/bhyve_device.c +++ b/src/bhyve/bhyve_device.c @@ -115,6 +115,7 @@ bhyveAssignDevicePCISlots(virDomainDef *def, 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_S= CSI) || ((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/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.args b/tests= /bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.args new file mode 100644 index 0000000000..295c528135 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,virtio-scsi,/dev/cam/ctl \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.ldargs b/tes= ts/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.ldargs new file mode 100644 index 0000000000..06a51ead59 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /dev/cam/ctl \ +bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.xml b/tests/= bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.xml new file mode 100644 index 0000000000..d8c10afe6d --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.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 b83051d3cd..c6d58821ac 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -273,6 +273,7 @@ mymain(void) DO_TEST("slirp"); DO_TEST("slirp-mac-addr"); DO_TEST_FAILURE("slirp-ip"); + DO_TEST("virtio-scsi"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-virtio-scsi.xml b/te= sts/bhyvexml2xmloutdata/bhyvexml2xmlout-virtio-scsi.xml new file mode 100644 index 0000000000..94915ea8b7 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-virtio-scsi.xml @@ -0,0 +1,32 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + +
+ + + +
+ + + + + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 0abc50b0de..8eecd5bf68 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -123,6 +123,7 @@ mymain(void) DO_TEST_DIFFERENT("2-nvme-2-controllers"); DO_TEST_DIFFERENT("passthru-multiple-devs"); DO_TEST_DIFFERENT("slirp"); + DO_TEST_DIFFERENT("virtio-scsi"); =20 /* Address allocation tests */ DO_TEST_DIFFERENT("addr-single-sata-disk"); --=20 2.52.0 From nobody Thu Jan 8 12:14:05 2026 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; 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=1767450150; cv=none; d=zohomail.com; s=zohoarc; b=OJoVuQadNKZ8wiUI/VOBJWINIwH2xUfaT4NaOMIWo74EsyfGH9h2wBizws8Fnb5mwsMzanguqw3Tt8FyerVKheYqbGC0ZMsW3W7rpNI7d0xGOUgZ+f3LUpIjmPP7KMTxrnixMLEvcGdJRwZw4NPRkOLjGlasZG6zMDa7GEStKLc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767450150; 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=vJj70nEczml+vpOEiKQhCfHEqYgfrG12n+gDn5AEdKA=; b=ff3Pv0pEA28C8PYLMRZBhSAm1E5ONa+QRv9ZneXeycFwspONpT5k8u4+Qcg7kZI1WVUD44Nz+WKD7xwMR8uN8jVt2e1IefFd1RgnLGQ/YgocHr0bzvdItdvxAWwjyNlcNFs2DUudQ3UslSI2HTjb60KdrkasmDKrR2P8XHQpvkw= 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 1767450150601889.6828468708344; Sat, 3 Jan 2026 06:22:30 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0F6383F9B4; Sat, 3 Jan 2026 09:22:30 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id BDD463F8EA; Sat, 3 Jan 2026 09:17:54 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 32BE43F8B4; Sat, 3 Jan 2026 09:14:34 -0500 (EST) Received: from mail-ej1-f68.google.com (mail-ej1-f68.google.com [209.85.218.68]) (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 0B7F53F8E5 for ; Sat, 3 Jan 2026 09:14:33 -0500 (EST) Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b83d6a06304so141972566b.2 for ; Sat, 03 Jan 2026 06:14:32 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8037ab86cesm4961769166b.19.2026.01.03.06.14.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jan 2026 06:14:30 -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=-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=1767449671; x=1768054471; 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=vJj70nEczml+vpOEiKQhCfHEqYgfrG12n+gDn5AEdKA=; b=K4w+VyFPnq1f722oUbtfOn+FPSefI+E6vXgI0GgL6FTTyFiK8zUE4692Uxeau9IEMc LXYabwxsFkJOsFFfkvKkbes7oENQ8Pk0vaw5zmnHAzXWH8wXZG1BvKCXKcykabR9UVUU Tw2g2BHwfyZNR9iezWOmWkJ/AP2iVrk2mz7wfe7Gwvpe+sMZF9ExRwbkOfEh0eLk0gkU d+F/WD2Q4jDXFw5DOSivcnlomu8k1Qg2Kq46Bf5lukO5rMDxbJsxMA7616R+1OPffT7b KV1cgd5dtD9BSERRcOOtgd3Fu1XqBnC2CZTu4MRKrnrXBc5F0Sj4GdZfbRQU5BFKr9NE S1wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767449671; x=1768054471; 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; bh=vJj70nEczml+vpOEiKQhCfHEqYgfrG12n+gDn5AEdKA=; b=Q3OTA4fhl9b8y5PPX0Dn34m22bIu/rVsCqBJCeRjy9RlLl8SshpfrD7zyNH50uhLKK EI9s1+tH7LoQwDcY8B8iY9caJZEf1Z4uNBUUIvHZ91BBwym0bX3SjL1q48XE1HzeXY+H UjGEccc8GiqnzFH69oLWY3xaybcjLZ2WodPfy6GRoeSFogaA9Aa27tf/kd9EVIzNSf46 aQwUn/937WMFiNOxRDDKWkKI82w9tHnFQo3OD6RiKvz1s8flP4HRGnfAQtEcMf0d+C1h yZ4sqAoPdZgtc6hxUVXfc+JtGujY6SXp2/n2UFtZUKmKKxooDtilQnnCEpbqNgN86EgJ Ulfg== X-Gm-Message-State: AOJu0YzFN5nfPWZbISCP2SOV6UBcHr4L4/ZXgW8U+/NGE2WHA2b+qkju ff638FZUIw81Mh2LEm/RPkmsV7A4kg/PemKVmGChbtNcuiY57B5J8Lyet9UFuDUdr3Q= X-Gm-Gg: AY/fxX4ByPTwOeF9pedfxr4uDWxC2ADmTtACb0KImxOZZR9m7ubWKXR4qwovx/tCoyl PgV3zeMx8y51A4bh1JA0rEZvVFQn0WIkKRypQDBVeD1LJBAdJOY/drDeWgbI6y8g5hgg+kMdF0z odz5I0aEGesTX4bAf19Xss1y8pdQq0sbrv/Ep/VbV65SQooSxbKHAHaQAUUnszrt1dS/AE0Z4y3 iV/HMttX7oLAGKLLtituYLTAXnN2GZz/SpaIgACf9UqClpsSLMgtfC19VD18Frg5Aun/hQZV5OK HHZpsTlxgqUPOoif1VhDtrNqRtDL9jRTRYMIp3NfQUU4x5s1GVKNVgr7d79mA6Iarp0kPyO7643 NsunXjBx12J0r/tdZOsM5rEB1YqOrIqUJYnlpr8WDTuHCHOgVcDMn3cuSSz798wp0o5qZdGI4S8 TuMJGLT6g79M/VgzlAHbaUiveOFXfjn5Yxape4gBko/2EhvWki7PKOSMM719CR7eHsV2Or6YDcL ek86uVqZ9NT/lF9PzXM4QN6 X-Google-Smtp-Source: AGHT+IFuZgFb8MN07qxRGh+yV3p1kRLcVE0jZaDg2P1VbYCGAHH0pv/cvSkJLhcXkXhy6KAOa03zbw== X-Received: by 2002:a17:907:6d23:b0:b7d:266a:7728 with SMTP id a640c23a62f3a-b80371f8f50mr4573762866b.44.1767449671333; Sat, 03 Jan 2026 06:14:31 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 3/3] docs: bhyve: document virtio-scsi support Date: Sat, 3 Jan 2026 15:11:42 +0100 Message-ID: <20260103141142.53817-4-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260103141142.53817-1-bogorodskiy@gmail.com> References: <20260103141142.53817-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: CEISQL2SCV6J7H3WZDLZEWIXVHTHPEDJ X-Message-ID-Hash: CEISQL2SCV6J7H3WZDLZEWIXVHTHPEDJ 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: 1767450152372154100 Content-Type: text/plain; charset="utf-8" Document the CTL device type in formatdomain.rst and the virtio-scsi device in drvbhyve.rst. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- docs/drvbhyve.rst | 19 +++++++++++++++++++ docs/formatdomain.rst | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/docs/drvbhyve.rst b/docs/drvbhyve.rst index dfcdb011d2..5a45e9056f 100644 --- a/docs/drvbhyve.rst +++ b/docs/drvbhyve.rst @@ -718,6 +718,25 @@ any configuration on the host. Unfortunately, there is no (easy) way to probe its support in libvirt, so please consult the ``bhyve(8)`` manual page to make sure it is avail= able. =20 +virtio-scsi +~~~~~~~~~~~ +:since:`Since 12:0.0`, it is possible to use ``virtio-scsi`` devices. +It uses CAM Target layer (CTL) as a source. + +Example: + +:: + + ... + + + + + ... + +Please refer to ``cam(4)``, ``ctl(4)``, and ``ctld(8)`` manual pages +for more details on CAM and CTL. + Guest-specific considerations ----------------------------- =20 diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 1467fc7e10..bcb354a9d6 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -3085,6 +3085,11 @@ paravirtualized driver is specified via the ``disk``= element. the fully-qualified path to the vhost-vdpa character device (e.g. ``/dev/vhost-vdpa-0``). =20 + ``ctl`` + Enables the hypervisor to connect to the FreeBSD CAM Target Layer (C= TL), + where CAM is a Common Access Method Storage subsystem. + :since:`Since 12.0.0, bhyve`. + With "file", "block", and "volume", one or more optional sub-elements ``seclabel`` (See `Security label`_) can be used to override the domain security labeling policy for just that source file. --=20 2.52.0