From nobody Fri Nov 21 10:18:01 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1761978619; cv=none; d=zohomail.com; s=zohoarc; b=XTVB3uVW5EvLjT/caG/eBnP2CGFJi1oIqO7Ml42f7fCSF/O5IK5/b1sckVCGIoepiIDjZ233AE0taL8YTal8F7/2A13BXe1E8aGg9v2iD402suiV7T1jClD+gniCMMW6MsuZxYocLcvMKiYDwHnvZ2rrlWrR202yc6L2FrDem0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761978619; 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=vFfZY11465WcnwjaEdL08xbRagWwFsTQk7N/OjpfwBs=; b=BacWmIAtzEkNxoJWykz1jLSH6YERnWfkfTVoMIpHD6fk3BMEzj2xWRcyDZbK6HjAQUTInWZnUY3NS0xZT91EUu2RnIOfY+B40B7QCUxE9xIRNSsZtUu+cAYv4F+LLK5DX7JWEahruULb8JQOkEoQi6XoqyVJcqgnA6kzHtyQF3c= 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 1761978619871799.9254438925112; Fri, 31 Oct 2025 23:30:19 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 0469143E52; Sat, 1 Nov 2025 02:30:18 -0400 (EDT) Received: from [172.19.199.29] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 0F07E44088; Sat, 1 Nov 2025 02:27:42 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 9BD9D41BC1; Sat, 1 Nov 2025 02:26:08 -0400 (EDT) Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.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 D345743F7A for ; Sat, 1 Nov 2025 02:26:03 -0400 (EDT) Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b70406feed3so599017266b.3 for ; Fri, 31 Oct 2025 23:26:03 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b7077975e18sm371807166b.2.2025.10.31.23.26.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 23:26:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761978362; x=1762583162; 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=vFfZY11465WcnwjaEdL08xbRagWwFsTQk7N/OjpfwBs=; b=OgS0ewYTpZqdc4uvNy10sk1o3ivkm7OzgophutY2HXJPL8YNC747WnKH/z5aBIR//B 8hRbxV/zOZ7ctpMJd1HXw8CjJUkXuoFouzSUe5an+1tfNu0eUu+EmpYqAO1/DY0/FCn2 ffxsJP0/9UTRQDZZITPYQK4yztAS3DHT5c6CkidZ5HKafE7/TDQx+rqfBL7npcs4pLlK mnu9R75tesdqf7e0wguWyO+zsbunMcNpN42A382xWkldwWgdJg7lpjoPrHaUm07J6u6J pLcopBWUL9kSeUfyYiKMkY9/UUCNkhF6olhtTfchA8AdaNn4pEfN6c3gJvTd2TAd1oiB 5Lew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761978362; x=1762583162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vFfZY11465WcnwjaEdL08xbRagWwFsTQk7N/OjpfwBs=; b=Q4ty0r8LVvS8j69FoMmm1kBs8eijzgjTskMNNfSSmE4KdUDGgVLNeIYFz47tgxhlfI wcA8grh/e6ioMn0pZSbzXBAnGYTnfpyrHThJHD0chLSrkGpQQUkp5nL+KX4cl2NLHWBj 1xanSIUc6gaH2kAmst+7r65iWgf868WxSArOfyV/dOTs8K1LNIPcGU/F+DCSr10a7aea 0O3z9DU2oEyAPxwOZgBjgWsAsxBR8Nf9ozz0XdXJreer0fJp8G0eSFY+nbMlWtUHbhj8 0KJL/3pofyavqdyeyZ28fevjLwuDIh5LtptPvTea+2WUNmCn9Vatk8ybTO68PlhtBQFH oCWA== X-Gm-Message-State: AOJu0YzU2p5Q8BDwOmQoRT4sc6L4SE4/qCdGRz+jKKKRiIhbn67MRWkz yxxzTbygh37Op8dvn7t/zpEQDOOBROu/In1Udh/OK7p4bV4IFnnnAT7fZ5ZnfnhcK0iqCA== X-Gm-Gg: ASbGnctw2Z+g1Ean4KfhWKpajViGNyvQmqItic+5CJ0RZxblI3g2fa87id+vtbre5VB +IFFL/3hmS1whGgHTst2DL9dXmiFll/fNoPhsNpArm/XHCDnCEYlqSiSfmwS7eSQxIPq4YQv2JT PnWJIktgceX47mKsYYuCHtG8CxOn7HTUig1abH8jLZ7oGlu4D+Re4ggPyvtLORcmv90ncho0+17 uY+lmj7/OykjAXrNpyhFovwkVmRJZRrmWihChA9sLV983JltzyjdL9lR2i6DFeXbnyw79r5F/IT TadIXuR2WdJCbwHV+jsgTBRMhV2FmSdnKBvIvItacXFCBLYmVY4SkXR21QIYbr2FixwQSs+J7dt +NYzTmYuPcPyz0KZN9aJ9UgGFW3bjIJI9R+DwAe9P6bb2Ky+kSduZZymAivuMjbF2SWK1qXHYVN KNubBinAjy17y06y4yTEZBaQubqPk/MyoCRfzAcg207pJwiZe0McJNX1Lj X-Google-Smtp-Source: AGHT+IFQtYOx1fnPQMScAo+CFUmbM3nhPH7uWL7mmprKBU+IgT7P32f5I+SPC30hMpjy5dxxC3wefw== X-Received: by 2002:a17:907:2d06:b0:b50:b539:8be6 with SMTP id a640c23a62f3a-b7070611347mr617462166b.43.1761978362115; Fri, 31 Oct 2025 23:26:02 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 3/4] bhyve: Tie the 'passthru' option to the 'hostdev' XML config Date: Sat, 1 Nov 2025 07:24:23 +0100 Message-ID: <20251101062424.57331-4-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251101062424.57331-1-bogorodskiy@gmail.com> References: <20251101062424.57331-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LGBGLBUJ2QWZIKGYQ5W4W6F2E4YH5FOH X-Message-ID-Hash: LGBGLBUJ2QWZIKGYQ5W4W6F2E4YH5FOH 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: Alexander Shursha 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: 1761978622049154100 Content-Type: text/plain; charset="utf-8" From: Alexander Shursha Signed-off-by: Alexander Shursha --- src/bhyve/bhyve_parse_command.c | 60 +++++++++++++++++++ .../bhyveargv2xml-passthru.args | 7 +++ .../bhyveargv2xml-passthru.xml | 22 +++++++ tests/bhyveargv2xmltest.c | 1 + 4 files changed, 90 insertions(+) create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.args create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.xml diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_comman= d.c index 7a4e48fbf8..9ca5e1aab9 100644 --- a/src/bhyve/bhyve_parse_command.c +++ b/src/bhyve/bhyve_parse_command.c @@ -6,6 +6,7 @@ * Copyright (c) 2011 NetApp, Inc. * Copyright (C) 2020 Fabian Freyer * Copyright (C) 2025 The FreeBSD Foundation + * Copyright (C) 2024-2025 Future Crew, LLC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -666,6 +667,63 @@ bhyveParsePCIRND(virDomainDef *def, return 0; } =20 +static int +bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, + unsigned pcibus, + unsigned pcislot, + unsigned pcifunction, + char *addr) +{ + /* -s slot,bus/slot/function */ + /* -s slot,pcibus:slot:function */ + virDomainHostdevDef *hostdev =3D NULL; + g_auto(GStrv) params =3D NULL; + GStrv param; + char *p =3D NULL; + + hostdev =3D virDomainHostdevDefNew(); + hostdev->mode =3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; + hostdev->source.subsys.type =3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI; + + hostdev->info->type =3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; + hostdev->info->addr.pci.bus =3D pcibus; + hostdev->info->addr.pci.slot =3D pcislot; + hostdev->info->addr.pci.function =3D pcifunction; + + if (!addr) + goto error; + + if (!(params =3D g_strsplit(addr, ":", -1))) { + virReportError(VIR_ERR_OPERATION_FAILED, _("Failed to parse PCI ad= dress %1$s"), addr); + goto error; + } + if (g_str_equal(addr, *params)) { + g_free(params); + if (!(params =3D g_strsplit(addr, "/", -1))) { + virReportError(VIR_ERR_OPERATION_FAILED, _("Failed to parse PC= I address %1$s"), addr); + goto error; + } + } + if (g_strv_length(params) !=3D 3) { + virReportError(VIR_ERR_OPERATION_FAILED, _("Failed to parse PCI ad= dress %1$s"), addr); + goto error; + } + param =3D params; + hostdev->source.subsys.u.pci.addr.bus =3D g_ascii_strtoull(*param++, &= p, 10); + hostdev->source.subsys.u.pci.addr.slot =3D g_ascii_strtoull(*param++, = &p, 10); + hostdev->source.subsys.u.pci.addr.function =3D g_ascii_strtoull(*param= , &p, 10); + + hostdev->source.subsys.u.pci.addr.domain =3D 0; + hostdev->managed =3D false; + + VIR_APPEND_ELEMENT(def->hostdevs, def->nhostdevs, hostdev); + return 0; + + error: + virDomainHostdevDefFree(hostdev); + return -1; +} + static int bhyveParseBhyvePCIArg(virDomainDef *def, virDomainXMLOption *xmlopt, @@ -732,6 +790,8 @@ bhyveParseBhyvePCIArg(virDomainDef *def, bhyveParsePCIFbuf(def, xmlopt, caps, bus, slot, function, conf); else if (STREQ(emulation, "virtio-rnd")) bhyveParsePCIRND(def, xmlopt, caps, bus, slot, function, conf); + else if (STREQ(emulation, "passthru")) + bhyveParsePassthru(def, bus, slot, function, conf); =20 VIR_FREE(emulation); VIR_FREE(slotdef); diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-passthru.args b/tests/bh= yveargv2xmldata/bhyveargv2xml-passthru.args new file mode 100644 index 0000000000..4eb1ff14b5 --- /dev/null +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-passthru.args @@ -0,0 +1,7 @@ +/usr/sbin/bhyve \ +-c 1 \ +-m 214 \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 7,passthru,3/0/0 bhyve diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-passthru.xml b/tests/bhy= veargv2xmldata/bhyveargv2xml-passthru.xml new file mode 100644 index 0000000000..64118ff89c --- /dev/null +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-passthru.xml @@ -0,0 +1,22 @@ + + bhyve + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + destroy + destroy + destroy + + + +
+ +
+ + + diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c index 82abce5b8f..acfaade24c 100644 --- a/tests/bhyveargv2xmltest.c +++ b/tests/bhyveargv2xmltest.c @@ -161,6 +161,7 @@ mymain(void) DO_TEST("virtio-blk"); DO_TEST("virtio-net"); DO_TEST("e1000"); + DO_TEST("passthru"); DO_TEST_WARN("virtio-net2"); DO_TEST_WARN("virtio-net3"); DO_TEST_WARN("virtio-net4"); --=20 2.51.0