From nobody Sat Feb 7 13:56:10 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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1728670570215929.3504414125433; Fri, 11 Oct 2024 11:16:10 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1027C178B; Fri, 11 Oct 2024 14:16:09 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2D21C1775; Fri, 11 Oct 2024 14:13:39 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1BA8217E9; Fri, 11 Oct 2024 14:13:35 -0400 (EDT) Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 58418179F for ; Fri, 11 Oct 2024 14:13:21 -0400 (EDT) Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-717bde361f6so1178452a34.3 for ; Fri, 11 Oct 2024 11:13:21 -0700 (PDT) Received: from home.. ([2603:8081:c640:1::1003]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2885844a8b7sm1047097fac.58.2024.10.11.11.13.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Oct 2024 11:13:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728670400; x=1729275200; 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=whFVN9s+B1rPInD57D0hYLpQbW0IyJhtJuDQvrDNYmY=; b=SZDFzfnz8pRq/y7bNK1X8Ha8ccRYZeo4VOa2TSw4QF/KwnPVNO3KranfJM9Ti4ycNU UGOoySAsZszL4NFIeqq/rNXytKL2/333J/WwbgIDgASaLmCUuLRev8gn2hdCbFQ7N9Iq 1coSfblRXYo7iVykGoojSZHDTfc4X0TIYogVK2Yhqb6cERW7btMWz5aDrypZMAQ1O0i6 mADcfnQ73zm4op1fITBqJtA33TI8g3K78S470YA581Rd2PFf5RFMhl46Zu0yykXJbQgR mTgYiHNj0U3+/fNXkW+aAp9yUZLzcBDonr7LktY5cZyqDjtvvJ7ZsSmBG4FC8rRec0ac WUCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728670400; x=1729275200; 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=whFVN9s+B1rPInD57D0hYLpQbW0IyJhtJuDQvrDNYmY=; b=iRUsDC8bA/5jDkAIBHrGipeIfsW768gFLxaLHLoM8M46j0//YZiuQKfN2uyxAW7DXG QNhTu/JiQaZOQ2HoKYhPCm1gtwuP59OLCN2zRdA/4XRBUJR3Fyp8Tx0xT+QbHNFtWbjO TYXSA2AleFpG3nNsbQI4WVPAuVf1cvw1+mRCy/Lf/J+to4DsRuvPADlTb/vfaNqh/KA9 uPNDWf5FJbi4U30igfU70w8RfghVgyXUKDt8a/4qk1NUyDNVNGUX71pMOiycW404aMOV FzA34jCkUHXzlaSu/ecAY+W6lSTfsm6gE0koQU7lNTzTU/w0RnarVlXbn2fLrqsroV4u nhzA== X-Gm-Message-State: AOJu0YyPGD4qrsL0eLE6WXut/osN3leCJUJUxF3RjAdZMQDb3cL/uLNR nljTLkXtpg5M6T8RwWOx8qC7M04ppiVSbVb7Yev1EwlN2nW5eTT1NwEnXw== X-Google-Smtp-Source: AGHT+IFkM0eqOi2dFTxBn/p19XOVOy4ZqExlI60Yv1J9bd9UBqiJXl7uWE26sEab28VDxm1NVduBMQ== X-Received: by 2002:a05:6870:f784:b0:254:b337:eebc with SMTP id 586e51a60fabf-288874792c0mr375214fac.35.1728670400222; Fri, 11 Oct 2024 11:13:20 -0700 (PDT) From: Praveen K Paladugu X-Google-Original-From: Praveen K Paladugu To: devel@lists.libvirt.org Subject: [PATCH 06/10] ch: prepare domain definition for pci passthrough Date: Fri, 11 Oct 2024 13:13:07 -0500 Message-ID: <20241011181311.6813-7-prapal@linux.microsoft.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20241011181311.6813-1-prapal@linux.microsoft.com> References: <20241011181311.6813-1-prapal@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LUFHI6MF2P6CKC2QQYVRULJ2UHNTENPP X-Message-ID-Hash: LUFHI6MF2P6CKC2QQYVRULJ2UHNTENPP X-MailFrom: praveenkpaladugu@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: liuwe@microsoft.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1728670572152116600 Content-Type: text/plain; charset="utf-8" Check if the domain definition is valid for PCI passthrough and update it if necessary. Signed-off-by: Praveen K Paladugu --- po/POTFILES | 1 + src/ch/ch_hostdev.c | 67 +++++++++++++++++++++++++++++++++++++++++++++ src/ch/ch_hostdev.h | 3 ++ src/ch/ch_process.c | 39 ++++++++++++++++++++++++++ 4 files changed, 110 insertions(+) diff --git a/po/POTFILES b/po/POTFILES index 1ed4086d2c..66465b798f 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -21,6 +21,7 @@ src/bhyve/bhyve_process.c src/ch/ch_conf.c src/ch/ch_domain.c src/ch/ch_driver.c +src/ch/ch_hostdev.c src/ch/ch_interface.c src/ch/ch_monitor.c src/ch/ch_process.c diff --git a/src/ch/ch_hostdev.c b/src/ch/ch_hostdev.c index 20ce6efa10..1e6210e162 100644 --- a/src/ch/ch_hostdev.c +++ b/src/ch/ch_hostdev.c @@ -26,3 +26,70 @@ #define VIR_FROM_THIS VIR_FROM_CH =20 VIR_LOG_INIT("ch.ch_hostdev"); + +static int +virCHDomainPrepareHostdevPCI(virDomainHostdevDef *hostdev) +{ + bool supportsPassthroughVFIO =3D virHostdevHostSupportsPassthroughVFIO= (); + virDeviceHostdevPCIDriverName *driverName =3D + &hostdev->source.subsys.u.pci.driver.n= ame; + + /* assign defaults for hostdev passthrough */ + switch (*driverName) { + case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_DEFAULT: + if (supportsPassthroughVFIO) { + *driverName =3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO; + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("host doesn't support passthrough of host PCI= devices")); + return -1; + } + break; + + case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO: + if (!supportsPassthroughVFIO) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("host doesn't support VFIO PCI passthrough")); + return false; + } + break; + + case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_KVM: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("host doesn't support legacy PCI passthrough")); + return false; + + case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_XEN: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("CH does not support device assignment mode '%1$s= '"), + virDeviceHostdevPCIDriverNameTypeToString(*driverNa= me)); + return false; + + default: + case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_LAST: + virReportEnumRangeError(virDeviceHostdevPCIDriverName, *driverName= ); + break; + } + + return true; +} + +int +virCHDomainPrepareHostdev(virDomainHostdevDef *hostdev) +{ + if (hostdev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + return 0; + + switch (hostdev->source.subsys.type) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: + return virCHDomainPrepareHostdevPCI(hostdev); + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: + break; + } + + return 0; +} diff --git a/src/ch/ch_hostdev.h b/src/ch/ch_hostdev.h index 02b7f9c2d8..f9ba40ab71 100644 --- a/src/ch/ch_hostdev.h +++ b/src/ch/ch_hostdev.h @@ -22,3 +22,6 @@ =20 #include "ch_conf.h" #include "domain_conf.h" + +int +virCHDomainPrepareHostdev(virDomainHostdevDef *hostdev); diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c index 9816509e49..c5b5b6ebb2 100644 --- a/src/ch/ch_process.c +++ b/src/ch/ch_process.c @@ -37,6 +37,7 @@ #include "virnuma.h" #include "virstring.h" #include "ch_interface.h" +#include "ch_hostdev.h" =20 #define VIR_FROM_THIS VIR_FROM_CH =20 @@ -808,6 +809,40 @@ virCHProcessStartValidate(virCHDriver *driver, return 0; } =20 +static int +virCHProcessPrepareDomainHostdevs(virDomainObj *vm) +{ + size_t i; + + for (i =3D 0; i < vm->def->nhostdevs; i++) { + virDomainHostdevDef *hostdev =3D vm->def->hostdevs[i]; + + if (virCHDomainPrepareHostdev(hostdev) < 0) + return -1; + } + + return 0; +} + +/** + * virCHProcessPrepareDomain: + * @vm: domain object + * + * This function groups all code that modifies only live XML of a domain w= hich + * is about to start and it's the only place to do those modifications. + * + * This function MUST be called before virCHProcessPrepareHost(). + * + */ +static int +virCHProcessPrepareDomain(virDomainObj *vm) +{ + if (virCHProcessPrepareDomainHostdevs(vm) < 0) + return -1; + + return 0; +} + /** * virCHProcessStart: * @driver: pointer to driver structure @@ -839,6 +874,10 @@ virCHProcessStart(virCHDriver *driver, return -1; } =20 + if (virCHProcessPrepareDomain(vm) < 0) { + return -1; + } + if (!priv->monitor) { /* And we can get the first monitor connection now too */ if (!(priv->monitor =3D virCHProcessConnectMonitor(driver, vm))) { --=20 2.44.0