From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320007; cv=pass; d=zohomail.com; s=zohoarc; b=KdKjjzmlZ4l+DzB2j9jrIMMTnAa1+Pd92lvnPuq77aOqn0S3Y8/ctciBQo7qXF/+8e5oH+EGvzKGaesAdZXN/VkRT+NaSkqvNku1b5VA+bNT6dwH7IAcJDOlRfzk3jWgaXwhZFZPk6l0Wdq/11yShLMHB45TjpJ3kK3E3ZDzZoI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320007; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Bidn193Oht8bhQ0vdKcMskvY3KUFqDkTfYzkndt+Xng=; b=dbHXeIfSIhMXgqgL2k1mS+hZdlrQrHlzICkJSnwY68s52NcMabHtr5CJjgixeooQJN/fEk1HVQIxKjAfF5hc2XSWjOxAk4T7/P0SMipYBv/MlG6KTvNeR/l9J6lNXc39C+UDRUYZxXuVudQgn4Krbp5VrBsA9Ggd9VKxC2YohuQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320007275828.3301998059942; Mon, 27 Apr 2026 13:00:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5Q-00036N-Fk; Mon, 27 Apr 2026 15:57:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTC-000315-9a; Mon, 27 Apr 2026 14:14:10 -0400 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTA-0008PG-6v; Mon, 27 Apr 2026 14:14:10 -0400 Received: from BN9PR03CA0553.namprd03.prod.outlook.com (2603:10b6:408:138::18) by DM4PR12MB6229.namprd12.prod.outlook.com (2603:10b6:8:a8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.13; Mon, 27 Apr 2026 18:13:50 +0000 Received: from BL02EPF0001A0FA.namprd03.prod.outlook.com (2603:10b6:408:138:cafe::f0) by BN9PR03CA0553.outlook.office365.com (2603:10b6:408:138::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:13:50 +0000 Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0001A0FA.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:13:49 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:27 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jIssOOCU9HzRnhpZuSJyTg7FSdSLmjruduAVCE9YGqjyecyAXqxO1sHCupeJxYoqunp98c+ikIGKIQdehllg9K47qjJphoYdCVtxZ5J9rks6w4EQpHVpy43G3OQFtWDxefbuq4nogFblHk/tPvw09C+1gFPiZDY4F+5m+C8C4R57ThUkOpj09LG4Ld9oxya24f5D8Duj7/NN2cH2SjNSXkTr9nXnVbdJGkYUsFgMqRQ+V5JS1kK3jLQUrkbbgZhHPw+Z8cImItHKQCDeymrzwayQMa/802Oo3gU2wm4/z0k7jHD3ctptUIop/EKRKx/hAdVj2xecZiTe5lSq20+YUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bidn193Oht8bhQ0vdKcMskvY3KUFqDkTfYzkndt+Xng=; b=nRUaGxI7jLv65wquJcQvZcT3bMSaY7gCjUqdke1EX9vUNXt2lEPESEb2COw45cLjSsnUiEWW4I+WzeBMCau5fD5LCAt9ytG11d3yIqlVeeTnJrascDVqx6DmsnVwhEyR1HLEByaGOppzuCQcVejwLRMrwxHP2dU3UUt2MHlYReTpMq5y6OLdfzzWbl/TyzBznOpin0oX8ntbbDaONEU7lXNpMs8adasZSp2ehuTc72LGPViVvkjTU8nzD17mw+jDoSFjbNNcRuIXeIt25DPceOB2arWlTF0oNeEyyx+RWy13Tp+y4S+/F5aFfNEHWivEZMa2VY9RGP6k66Q3DgSiUw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Bidn193Oht8bhQ0vdKcMskvY3KUFqDkTfYzkndt+Xng=; b=hTprHfwTeYSO2CB9i9iCGjSo92ku8xKEgdeZgqajae9IBM26TkqaePvioMV5fbH1FjmDmAxMkWBqrX5yMsnJbRvLPx6oRWxgZB4jSqeIwqoU52Iq/qIuqJ2BuANO/JDpAHRDbougFOUgzN4ZnSN1Zd52WbiJdDhMAuUKH5O1sti2o8Y3EsGLol9l83fA1WcjBsczUA7ub/JEkbkJZNIWrL+CbFXGzco/Ll57q448nsrs1BzOvGlRSoIJu5AE7XQdLjTzZlC2PpCqDx7XZpEcjznMaQMEt8qZZ08dIbAaMvakcoC7cEZanH+J6NEaRopvxrzCd9ugZzIx9lV5d0rscA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 1/9] hw/arm/virt: Add CXL FMWS PA window for device memory Date: Mon, 27 Apr 2026 23:42:27 +0530 Message-ID: <20260427181235.3003865-2-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FA:EE_|DM4PR12MB6229:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f1ee2ec-6984-44ca-19ba-08dea488bb7a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|376014|7416014|1800799024|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: SVknWT/3uAAlsmkynRoGUNwMyxgs55b9FT7lezcfEAQG8cIeUsoSoB8rC1ZlrgXghqUvl8lS3FDxa1ArXx2iS01oaaHJ15v9oNfadqb22D20MeAYbDSZTlwxKGO2/IS+0/hw/mjho/IFI1lQtGlY3q9GuVtikXCxkWqMlgMEYBOjWX2d5Ws/2Eqq7EemR0vA40qQD/3z6zlV1EyK6k+XrHiuYNWyceOx3E2yMY89cBP8Ig3bZ65sYzv9LpolZfPPw9tZQrIrFi5fXqAsU5LbTMP9uThqC5dD1ZNYtUJI4EnTVxM8hBE+yg6ToHfANoYP3sOkR1VERgY2lhe2uws/c5jFCmpKV5zLhkxMQt/Jh2OTdDpzM3vlBO+AOoUoUI1t1mFHW5EAPSl6KNuP+iPGW2V0xI7i0q3cySsRnY8em31IDIE+kX+6rYzzTG3GR8ezQa8g0s9lbNJaZnEcWS9XQKMf+FjNbt7cPaopH6ctiItwmT+Ynz5JJWDua/IATh7Sl1oNNqqNLRk/sy+gAk6NYL9wwyrEOA5HxEXdjJnCzHa5Xoy++Gah861ifFBrsg/yzjIpNjChWZSxLPglkwXl2+fGfmQZOkJXJRuy4a2fBOBNmed3uCNeurOcQXAnXS/e7XXPOY3xVj9J+o0NXbBIaCWlUYrSlhB2hzDvBe/fc2KPUWA8f+s1FPta4ATO8YbF//YuyC4QA2mvCbbtLNAU6qVz5LxI3qqOogVDm0z+HwRPJEtmD9/ChU0X1XyivOsX2NBpnsz7PPLuWhhjy4TpWEAXttM3O0o0qxI+62CUv3zGnJUVG27L8Z/JckfZc7oq X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700016)(376014)(7416014)(1800799024)(56012099003)(22082099003)(18002099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dGOv429AZwZ4tkxxxKTsZynBZqmVSO5CdSKp4pYEnu9JLm8GwMrLifTbAEXsgRVPWLe2/1jxIGKFQ+banTfa4OhVpeMCOOZ+UvahXa/8hxTmlm/foxK11IZLQ4EjO9OCpDzlySQER4luMYPqzGcMWr3fPbdFNSJ2qwH2kWKYAfyShBu42XepeKKB0bvT1Zosqg+VLLYiWSG1kO0ySCieZt56LFzsvRsui0dub2RXKJl+R9cMj6cTHP9UMVPxBH7qHeNpYqqkZcToimrVdWN1GN7xr37Cs/eDj46lwk3xJu1gE1/1Fv42m3RXcQ+wYcVwi3d2TyORV51ijrfHMsE0e23f/7mm3QPyQCshNIQPD/w4Elcf3EnVH2B0MqdopcIRCwqFtbLi1/rElAojoNGZSl9bdqOo9f9O4GddDZiTja1HP11Y+GNCofW9GuwTG1Hi X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:13:49.9247 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5f1ee2ec-6984-44ca-19ba-08dea488bb7a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6229 Received-SPF: permerror client-ip=2a01:111:f403:c105::7; envelope-from=mhonap@nvidia.com; helo=CH4PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320008123158501 Content-Type: text/plain; charset="utf-8" From: Manish Honap CXL VFIO passthrough needs a stable guest physical address range for device memory (DPA) that falls inside a CFMWS entry the guest discovers from ACPI CEDT. Without a dedicated range in the address map, the HDM decoder has nowhere to point. Add VIRT_HIGH_CXL_MMIO immediately after the second PCIe MMIO window. It gets its own highmem_cxl_mmio flag in VirtMachineState rather than sharing highmem_cxl, so the two slots are independently controllable even though both are currently tied to CXL bridge presence. The base and size flow through GPEXConfig.cxl_mmio to acpi_dsdt_add_gpex(), which carves out a QWord memory descriptor in the first CXL root bridge's _CRS. The CFMWS window is system-wide, so only the first CXL bridge gets the descriptor - subsequent ones would produce duplicate resource claims for the same range. build_crs() already emits the bridge's own 64-bit ranges into crs. The CFMWS window is a separate system-wide range, so only that window is appended as a new QWord descriptor; the bridge ranges are not re-emitted. A warn_report() fires if the CFMWS window overlaps any existing bridge 64-bit range, since that would indicate an address layout conflict. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- hw/arm/virt-acpi-build.c | 5 +++++ hw/arm/virt.c | 9 +++++++++ hw/pci-host/gpex-acpi.c | 40 ++++++++++++++++++++++++++++++++++++++ include/hw/arm/virt.h | 2 ++ include/hw/pci-host/gpex.h | 1 + 5 files changed, 57 insertions(+) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 591cfc993c..863e0680fb 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -176,6 +176,11 @@ static void acpi_dsdt_add_pci(Aml *scope, const MemMap= Entry *memmap, cfg.mmio64 =3D memmap[VIRT_HIGH_PCIE_MMIO]; } =20 + if (vms->highmem_cxl) { + cfg.cxl_mmio.base =3D memmap[VIRT_HIGH_CXL_MMIO].base; + cfg.cxl_mmio.size =3D memmap[VIRT_HIGH_CXL_MMIO].size; + } + acpi_dsdt_add_gpex(scope, &cfg); QLIST_FOREACH(bus, &vms->bus->child, sibling) { if (pci_bus_is_cxl(bus)) { diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ec0d8475ca..fa07819401 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -211,6 +211,8 @@ static const MemMapEntry base_memmap[] =3D { #define DEFAULT_HIGH_PCIE_MMIO_SIZE_GB 512 #define DEFAULT_HIGH_PCIE_MMIO_SIZE (DEFAULT_HIGH_PCIE_MMIO_SIZE_GB * GiB) =20 +#define DEFAULT_HIGH_CXL_MMIO_SIZE DEFAULT_HIGH_PCIE_MMIO_SIZE + /* * Highmem IO Regions: This memory map is floating, located after the RAM. * Each MemMapEntry base (GPA) will be dynamically computed, depending on = the @@ -237,6 +239,11 @@ static MemMapEntry extended_memmap[] =3D { [VIRT_HIGH_PCIE_ECAM] =3D { 0x0, 256 * MiB }, /* Second PCIe window */ [VIRT_HIGH_PCIE_MMIO] =3D { 0x0, DEFAULT_HIGH_PCIE_MMIO_SIZE }, + /* + * CXL FMWS guest PA window - separate from PCIe MMIO so the two are + * independently sizeable. Same default size for now. + */ + [VIRT_HIGH_CXL_MMIO] =3D { 0x0, DEFAULT_HIGH_CXL_MMIO_SIZE }, /* Any CXL Fixed memory windows come here */ }; =20 @@ -1724,6 +1731,7 @@ static void create_cxl_host_reg_region(VirtMachineSta= te *vms) vms->memmap[VIRT_CXL_HOST].size); memory_region_add_subregion(sysmem, vms->memmap[VIRT_CXL_HOST].base, m= r); vms->highmem_cxl =3D true; + vms->highmem_cxl_mmio =3D true; } =20 static void create_platform_bus(VirtMachineState *vms) @@ -1897,6 +1905,7 @@ static inline bool *virt_get_high_memmap_enabled(Virt= MachineState *vms, &vms->highmem_cxl, &vms->highmem_ecam, &vms->highmem_mmio, + &vms->highmem_cxl_mmio, }; =20 assert(ARRAY_SIZE(extended_memmap) - VIRT_LOWMEMMAP_LAST =3D=3D diff --git a/hw/pci-host/gpex-acpi.c b/hw/pci-host/gpex-acpi.c index d9820f9b41..7de57bbc46 100644 --- a/hw/pci-host/gpex-acpi.c +++ b/hw/pci-host/gpex-acpi.c @@ -7,6 +7,7 @@ #include "hw/pci/pci_bridge.h" #include "hw/pci/pcie_host.h" #include "hw/acpi/cxl.h" +#include "qemu/error-report.h" =20 static void acpi_dsdt_add_pci_route_table(Aml *dev, uint32_t irq, Aml *scope, uint8_t bus_num) @@ -108,6 +109,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *= cfg) CrsRangeSet crs_range_set; CrsRangeEntry *entry; int i; + bool first_cxl =3D true; =20 /* start to construct the tables for pxb */ crs_range_set_init(&crs_range_set); @@ -161,6 +163,44 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig = *cfg) */ crs =3D build_crs(PCI_HOST_BRIDGE(BUS(bus)->parent), &crs_rang= e_set, cfg->pio.base, 0, 0, 0); + if (is_cxl && first_cxl && cfg->cxl_mmio.size) { + uint64_t cfmws_end =3D cfg->cxl_mmio.base + + cfg->cxl_mmio.size - 1; + + /* + * The CXL Fixed Memory Window (CFMWS) is a system-wide GPA + * range. Only the first CXL root bridge emits the QWord + * descriptor; adding it to every bridge would give the OS + * duplicate resource claims for the same range. + * + * build_crs() has already appended the bridge's own 64-bit + * ranges into crs. Do not copy them again here; only app= end + * the CFMWS window itself as a new QWord descriptor. + * + * Warn if the CFMWS window overlaps any range already cla= imed + * by the bridge; in the current address layout they shoul= d be + * disjoint, but catch it early if the layout ever changes. + */ + for (i =3D 0; i < crs_range_set.mem_64bit_ranges->len; i++= ) { + entry =3D g_ptr_array_index(crs_range_set.mem_64bit_ra= nges, + i); + if (entry->base <=3D cfmws_end && + entry->limit >=3D cfg->cxl_mmio.base) { + warn_report("CXL CFMWS [0x%"PRIx64"-0x%"PRIx64"] " + "overlaps CXL root bridge 64-bit range= " + "[0x%"PRIx64"-0x%"PRIx64"]", + cfg->cxl_mmio.base, cfmws_end, + entry->base, entry->limit); + } + } + aml_append(crs, + aml_qword_memory(AML_POS_DECODE, AML_MIN_FIXED, + AML_MAX_FIXED, AML_NON_CACHEABLE, AML_READ_WRITE, + 0x0000, cfg->cxl_mmio.base, cfmws_end, 0x0000, + cfg->cxl_mmio.size)); + first_cxl =3D false; + } + aml_append(dev, aml_name_decl("_CRS", crs)); =20 if (is_cxl) { diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 5fcbd1c76f..88bb3c0bdf 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -91,6 +91,7 @@ enum { VIRT_CXL_HOST, VIRT_HIGH_PCIE_ECAM, VIRT_HIGH_PCIE_MMIO, + VIRT_HIGH_CXL_MMIO, }; =20 typedef enum VirtIOMMUType { @@ -147,6 +148,7 @@ struct VirtMachineState { bool highmem; bool highmem_compact; bool highmem_cxl; + bool highmem_cxl_mmio; /* VIRT_HIGH_CXL_MMIO window; follows highmem_= cxl */ bool highmem_ecam; bool highmem_mmio; bool highmem_redists; diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index 1da9c85bce..a7c2e2edf3 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -43,6 +43,7 @@ struct GPEXConfig { MemMapEntry mmio32; MemMapEntry mmio64; MemMapEntry pio; + MemMapEntry cxl_mmio; int irq; PCIBus *bus; bool pci_native_hotplug; --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777319986; cv=pass; d=zohomail.com; s=zohoarc; b=SYUPjTpaQCbcWWDRZAj9xZO6AFDUfiDsVLlQIf7ClTLfdlOUfskoaJ+D/pBQZdrFLcf+87ooEt117s1j7DwfocVPCGQhTESJYquJkZ8wtNOjgYF6pznoNEruapCuoGO1yszg23QGRYmBDUXiWNkEe7KOVXXQJ9kNk3KfXfXjVos= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777319986; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wfW+Ey24wRPupkyPOeGDHYACfwBXVNhwnCKNuYUBIg4=; b=hdogOEyMXfShZ/GBayFygu9UiHhm21BmYHM2dDWOaRRVtdAEIpX49SZegbqlnElgWkjHqZbQ00Gpu5Q1x/kllleBKjlgv40Z0iXZe8MiNDWwjHKukSZ4yAmGJaTuLFIuli85JcgLjGN430GMMy+2I8a80uFbunn1qmUm/b5ng6A= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777319986224197.33657993742315; Mon, 27 Apr 2026 12:59:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5P-00036B-WF; Mon, 27 Apr 2026 15:57:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTc-00034u-QJ; Mon, 27 Apr 2026 14:14:38 -0400 Received: from mail-westus3azlp170120001.outbound.protection.outlook.com ([2a01:111:f403:c107::1] helo=PH8PR06CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTb-0000BO-18; Mon, 27 Apr 2026 14:14:36 -0400 Received: from BN9PR03CA0529.namprd03.prod.outlook.com (2603:10b6:408:131::24) by DM6PR12MB4417.namprd12.prod.outlook.com (2603:10b6:5:2a4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.15; Mon, 27 Apr 2026 18:14:01 +0000 Received: from BL02EPF0001A0FE.namprd03.prod.outlook.com (2603:10b6:408:131:cafe::95) by BN9PR03CA0529.outlook.office365.com (2603:10b6:408:131::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:00 +0000 Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0001A0FE.mail.protection.outlook.com (10.167.242.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:00 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:35 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SsiPjjVI9RMnGykQgbBiAzSCqpjbJXzqDw+yrgwUzbBe6YVLqvOxdi4tF8ICe0+TBFIkOggFAxEFGmh4iFfjAMfFZaDxmll8u88KI2KaKVaui3LGr+xuk/6aPvSxrpH5vKu8Ds7KAKvoswgbKdI63WDbGi3gPKh74Jh4VZYfnJwRTcrrWcEsQ9/ph5GA/V4KrLMuI68JmsrTg/bueh+rWrQ5umDqLKAj+a43wUVHWC7YUS5HdaVjwX0HYB+5fDD6d1v2HtxN6O3tHC8JIUUAl6Ov1j/9vgXnJ4/Wpx4MLeXZMEMVnofskQ3/KpR6a44WuB6WB8adzVIwT0bCfB80KQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wfW+Ey24wRPupkyPOeGDHYACfwBXVNhwnCKNuYUBIg4=; b=sAjxRj/0sJllucao9KdqCJclXWQCoC8E7DbctLCnE9OozxfOUh92+PnjaQ6U4Hb9cggIZPdFEJi9RLg/UUw7UfVztKlg212vibYaQ9eU/+HLuVc2Qcp7YW5I/phqsyzoCaRSqvuOkhZZaH09z+3RDahmyT/nFAj4ZdqA3KOm2TiWp5oiqExF3j228NxvYyg+hTcyQsZFsfLfxwLnphUd4w8vy5i09c1cTh5EaRkUy2VGmJu4xNHIzcyV4W9Zjy97GbE/6PuJ6XeDsBVB73+od5+WwQ+hgivKAnsQPU3/AKVyMK1ooeG9B6OaZn5e8hY/CTtvXFsESUGDwbk9pPp/2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wfW+Ey24wRPupkyPOeGDHYACfwBXVNhwnCKNuYUBIg4=; b=rZ3Mkn/eibn+FuD4MBhs8RcVrA1adpy4rp8lDjpJn5bN/PcHKSqY7M1sU89b2lRbenl1fEKA9AyW/Cw3v/rZE20Oj18QXE5JPISSvJfi5elDCApJ2krUiIYBtyBqmcmeUOo5rKYsEnX0bSzn+Yhbg6XsE5VdafFJK7AStwufVxOchCwyxVaXd6Ine26EGhrS/Q0vYv1CA7QlFkWeMnouN/IY8P3scyHFqMeuVMTtqnYeIr218THLvoyxw8AbhVqxXWMz9AK8Slpx18vt9tfOVi2o1ptEKpkgn//lEpvdem46KbpLLsb5SZhWYjiz/vZy3JsHaNwcNYzzMh4gaYEhWA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 2/9] cxl: Add preserve_config to pxb-cxl OSC method Date: Mon, 27 Apr 2026 23:42:28 +0530 Message-ID: <20260427181235.3003865-3-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FE:EE_|DM6PR12MB4417:EE_ X-MS-Office365-Filtering-Correlation-Id: de8bbc39-0d5b-4cbc-a31f-08dea488c1b5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|82310400026|36860700016|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: FM5opkPptdGPgWORofhFDGEpcvwuFFj9/LcSw2nKkuRkRT3+dXzEaE+DFo36iBUOkVWIaGuxVP4aLtsqVe8p8aKsY2aDdTrBQl90d5UvRPHtQXtcVvpdyiC7vQuI47wVDAu3pcVy3bZQAESDWW01WeBnhaVP1Bz9HmqfdNbA0NStUyHB5MNPgX0BUiy3kylZu+R94fdJn4fmWsNYTGketdEKKcSG49GL2NJ3Dl03hAWIN5Anuj2pryqsVwM8Rb8RezPpcU0kqFWtgJH2pGOPN0cmjdCGiC/PmvqsZzEEQj2wMV3a7FWgosD/5StYw9uCIL/kuWw1S67717hrzksSdkI9zfeY2jlm/18lww0e41AQcRpPwNcyILFEb2zIap93DEx1iBYWzU8WCYi54XGJDX43fQB4zIjGSmF9p2Gupv/V5Xchu1g6aTv7hVyKwgD+qQncVwWYv6omjPekh5ggb2sn/3AzPp5E6XLuaJS9B1hwgqsFuolT+cfYSamGbcoDD4iDXwVcotFQyAR2uhq1n/arspgRxjdmdcrRij3guRGA0+px2AtNSZFTi4mfpMpH9DOK1d5pU/hsrcCekj3yis7h6m+hTSNEqr2W0QD6oE4NnQoN/wXw7+bpipCUtJ6tJzMBRIrTFFxC8pWh3TPDUPx5wBEkRUiDhJ1YZGXh1IQeJ7y7Teg8eZeCK5vNOyy78oxH6as8g1PZL2khB7z9a2ZWNmJfqdsG68NQJOT+B5pgZXDVN+yuNP8wjY0E1Rd4d3z1U/bNmEcVzfkdRDiUE8sLhoTqAZf1WkDgGGj1fqMhUzxDk2Ov1bBtULmWY2z3 X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(82310400026)(36860700016)(921020)(56012099003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XjWHEylXYABBgHEc9eVsdxRfnutnXmDZhzWqYNrUktW23nZmlGy4T6H7unLmSVcE1lkmn2PBkWubyUcZBhqP78c/uMEfta+7bUjlNyNB9h3Nv6igdexpYiTkZcpmvhPJQ9w4lBA29FwijR10ygYYgg3mi0auqXRYOGEP8woI4QTCzBLIxP9fbUy+iez0kquaUaKcisyZ4/vTOMKiV9TcwtuTZHcrUTA5qrAc3XPyQtT9p2XPRFUCUBNUnvPqb3GI6nT6Bz6dpW9rdUQwzjhNqyMm46YZAiV+seS8XCQlonK3/v3BQKMFApH4FhNmKWCDiKB80jZLlfTVQ12lMsH4tJhrIsJEcpoo5gy3jhoCplc/+u2QasWAKWOUSpDtZ9wQv6pCXpQrfUxgw45/wJmGDFTUkNLPIZ0ll5SxzABP+7VLJNLcqtOrIdN0oLpP00l+ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:00.3576 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: de8bbc39-0d5b-4cbc-a31f-08dea488c1b5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4417 Received-SPF: permerror client-ip=2a01:111:f403:c107::1; envelope-from=mhonap@nvidia.com; helo=PH8PR06CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777319988934154100 Content-Type: text/plain; charset="utf-8" From: Manish Honap Before this patch, pxb-cxl bridges had no _DSM method at all. When the OS called _DSM on a CXL host bridge, ACPI returned an error and the OS defaulted to reassigning resources across suspend/resume. On machines where firmware pre-commits the HDM decoder, that reassignment breaks the DPA mapping. Wire preserve_config through GPEXConfig into build_cxl_osc_method() so pxb-cxl host bridges get a _DSM method that signals the OS to keep resource assignments stable when needed. The _DSM function 5 (preserve firmware PCI configuration) is the mechanism used to convey this. build_pci_host_bridge_dsm_method() is promoted from static to exported so cxl.c can call it without duplicating the AML. The x86 build_cxl_osc_method() call site passes false since x86 does not use firmware-committed HDM decoders. build_cxl_osc_method is renamed to acpi_dsdt_add_cxl_host_bridge_methods The function now appends both the CXL _OSC method and the _DSM method, so its old name is misleading. Renamed it to match the pxb-pcie analogue acpi_dsdt_add_host_bridge_methods(), making the two root bridge code paths symmetric. No AML change. Signed-off-by: Shameer Kolothum Signed-off-by: Manish Honap --- hw/acpi/cxl-stub.c | 2 +- hw/acpi/cxl.c | 4 +++- hw/i386/acpi-build.c | 2 +- hw/pci-host/gpex-acpi.c | 5 +++-- include/hw/acpi/cxl.h | 2 +- include/hw/pci-host/gpex.h | 1 + 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/acpi/cxl-stub.c b/hw/acpi/cxl-stub.c index 15bc21076b..d7c6731975 100644 --- a/hw/acpi/cxl-stub.c +++ b/hw/acpi/cxl-stub.c @@ -6,7 +6,7 @@ #include "hw/acpi/aml-build.h" #include "hw/acpi/cxl.h" =20 -void build_cxl_osc_method(Aml *dev) +void acpi_dsdt_add_cxl_host_bridge_methods(Aml *dev, bool preserve_config) { g_assert_not_reached(); } diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c index f92f7fa3d5..b32740a3e3 100644 --- a/hw/acpi/cxl.c +++ b/hw/acpi/cxl.c @@ -23,6 +23,7 @@ #include "hw/pci/pci_host.h" #include "hw/cxl/cxl.h" #include "hw/cxl/cxl_host.h" +#include "hw/pci-host/gpex.h" #include "hw/mem/memory-device.h" #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" @@ -320,11 +321,12 @@ static Aml *__build_cxl_osc_method(void) return method; } =20 -void build_cxl_osc_method(Aml *dev) +void acpi_dsdt_add_cxl_host_bridge_methods(Aml *dev, bool preserve_config) { aml_append(dev, aml_name_decl("SUPP", aml_int(0))); aml_append(dev, aml_name_decl("CTRL", aml_int(0))); aml_append(dev, aml_name_decl("SUPC", aml_int(0))); aml_append(dev, aml_name_decl("CTRC", aml_int(0))); aml_append(dev, __build_cxl_osc_method()); + aml_append(dev, build_pci_host_bridge_dsm_method(preserve_config)); } diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index f622b91b76..f66ec8ed24 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1013,7 +1013,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, aml_append(aml_pkg, aml_eisaid("PNP0A08")); aml_append(aml_pkg, aml_eisaid("PNP0A03")); aml_append(dev, aml_name_decl("_CID", aml_pkg)); - build_cxl_osc_method(dev); + acpi_dsdt_add_cxl_host_bridge_methods(dev, false); } else if (pci_bus_is_express(bus)) { aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A08"= ))); aml_append(dev, aml_name_decl("_CID", aml_eisaid("PNP0A03"= ))); diff --git a/hw/pci-host/gpex-acpi.c b/hw/pci-host/gpex-acpi.c index 7de57bbc46..247bd78152 100644 --- a/hw/pci-host/gpex-acpi.c +++ b/hw/pci-host/gpex-acpi.c @@ -52,7 +52,7 @@ static void acpi_dsdt_add_pci_route_table(Aml *dev, uint3= 2_t irq, } } =20 -static Aml *build_pci_host_bridge_dsm_method(bool preserve_config) +Aml *build_pci_host_bridge_dsm_method(bool preserve_config) { Aml *method =3D aml_method("_DSM", 4, AML_NOTSERIALIZED); Aml *UUID, *ifctx, *ifctx1, *buf; @@ -204,7 +204,8 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *= cfg) aml_append(dev, aml_name_decl("_CRS", crs)); =20 if (is_cxl) { - build_cxl_osc_method(dev); + acpi_dsdt_add_cxl_host_bridge_methods(dev, + cfg->preserve_config= ); } else { /* pxb bridges do not have ACPI PCI Hot-plug enabled */ acpi_dsdt_add_host_bridge_methods(dev, true, diff --git a/include/hw/acpi/cxl.h b/include/hw/acpi/cxl.h index 8f22c71530..6fe6c9c58d 100644 --- a/include/hw/acpi/cxl.h +++ b/include/hw/acpi/cxl.h @@ -24,7 +24,7 @@ void cxl_build_cedt(GArray *table_offsets, GArray *table_data, BIOSLinker *linker, const char *oem_id, const char *oem_table_id, CXLState *cxl_state); -void build_cxl_osc_method(Aml *dev); +void acpi_dsdt_add_cxl_host_bridge_methods(Aml *dev, bool preserve_config); void build_cxl_dsm_method(Aml *dev); =20 #endif diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index a7c2e2edf3..e5c2ebef78 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -73,6 +73,7 @@ struct GPEXHost { int gpex_set_irq_num(GPEXHost *s, int index, int gsi); =20 void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg); +Aml *build_pci_host_bridge_dsm_method(bool preserve_config); void acpi_dsdt_add_gpex_host(Aml *scope, uint32_t irq); =20 #define PCI_HOST_PIO_BASE "x-pio-base" --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320134; cv=pass; d=zohomail.com; s=zohoarc; b=Rw3oltqGIu/RrvxJjrfC5ay8bELH7OlOIFEM2LWXZ41AkTWiKk0CSNi+hzDzpgFi1lkFu6n73vunTLHoRlu+v0TlNlVZPW6+iBuiWaJENEKeGMxHrJYhr19try96SYQWypygEad10w9tmC7RA5OKNGq63+xOSMWCchH1WCSjqQI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320134; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LX1Nj7BB3BWHUjYgZUhGaqW1s17IUPGCCDQ39if0X14=; b=aNdvcd9/vVoDvbQK/dTm3ZencXZQogHf+wxa51eUVq7Z55DxN6uN/ITjr2uJfWWN4pEkaFKirB1pcaBK9i7hNjM9yaob89C0dX9Bl8exPEnDAUB9+B8eR0oncdu5X5Q6g6d2rzyYbKFwagU/5NTRYiVmPOZ6wCl3o7Bh1wfHXaI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320134893109.37912517772304; Mon, 27 Apr 2026 13:02:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5V-00038T-0j; Mon, 27 Apr 2026 15:57:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTR-00033J-Tn; Mon, 27 Apr 2026 14:14:26 -0400 Received: from mail-westus3azlp170120001.outbound.protection.outlook.com ([2a01:111:f403:c107::1] helo=PH8PR06CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTP-00009d-HN; Mon, 27 Apr 2026 14:14:24 -0400 Received: from BN9PR03CA0883.namprd03.prod.outlook.com (2603:10b6:408:13c::18) by CH3PR12MB7547.namprd12.prod.outlook.com (2603:10b6:610:147::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.16; Mon, 27 Apr 2026 18:14:07 +0000 Received: from BL02EPF0001A0FD.namprd03.prod.outlook.com (2603:10b6:408:13c:cafe::b7) by BN9PR03CA0883.outlook.office365.com (2603:10b6:408:13c::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:07 +0000 Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0001A0FD.mail.protection.outlook.com (10.167.242.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:06 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:43 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mzqMsi911SrgnB5pbfl79hWhLPOUf1sgn7FS6GAEwOXV//U9+UicHEo6UY9T7XdT8eNbtWeIcCQJGtHgdBavNGperu7vs4ysOLsMrFUFQL8S70bSWJb3Qk3c2b7j2QwdI1D2EBUzhlYXzFrX2F5KoeLjbiFbppDzH36ZJmkXmFah65eAj3IujwneF9vXQrc8yF8cko+2LZcypoS+72ynGaW/3PcdWgAUHv4Tw70kr4pB0M5XTsAwPuc892f64j24TUZJXvlEFS/sp8j7uzzocuzRNareesSnnyMRr3HgqUF20JU7TRDmp4J5eG/VJ9hPbwNxSJTxHCykistFM4VNFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LX1Nj7BB3BWHUjYgZUhGaqW1s17IUPGCCDQ39if0X14=; b=nL+LaaByKh4nG5miMFVCl1yZguMMWGHZE7bVlAyWbvRrzCuJzPbjb1STvEQbY1PHvz0ZsCAfI2+WXO/jFnfZ1+DS6DRzfQg4QkkHN9Eq+R2jfOB60VVs6VLszhzef+pIOBQ+JrorXLquxDpbx+a8scrKSbz3VkuhmzyIMYTKhXewZ6u3MiWr7q3Kpm0guV1AuGdkZdC785jkw9ZbZj4s0psl4nIeROoDmma2eTXyMmpk3ymuLIprB0iX2bFFgOF1i0SVgZ6nMZ0cRrJiMnyeiriArCbJIXvFoCDnmUd04DL2Hvx23Pt9rORrlrSwQTwZkCZLVkVuFwglMOm93gKthw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LX1Nj7BB3BWHUjYgZUhGaqW1s17IUPGCCDQ39if0X14=; b=k+pyAjzLD3EXXOzLvMs8yB+WcAq5+grDxhBsvBcVQtj6fhmKtakyjAp6YGvaqRf3bYy0BTgffgtKjP/rOc5IGVhPVZile0gDHVrLhJiBN3VQq9QddL+ERenPc9vMtUyFdLlPOMmEFgQCfpnhAryszCRhuvv2OX/nfa8gu6+WlS64fBjjRWbzJ1B+HMcfcm7ooh0KhJd/NuBoS94ky40eXbw8z2pcKC5FgB/AQXznGSkLdYW5GYP28A/zIvDBPMiy/8uTohdC6Rn+00HgsBNCVEG9t+jovBo4Tv0jbrh6GUebwZNaHmfCzNeU+n35HzlFGB5KUNV4sQS+z+s8XaMSBQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 3/9] linux-headers: Update vfio.h for CXL Type-2 device passthrough Date: Mon, 27 Apr 2026 23:42:29 +0530 Message-ID: <20260427181235.3003865-4-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FD:EE_|CH3PR12MB7547:EE_ X-MS-Office365-Filtering-Correlation-Id: c91c68aa-cc24-44e3-5072-08dea488c56a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|7416014|376014|1800799024|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: NOirRJeu/eGYudNj1nciC3miNkxveyC/kzbA7mUla8C+PyYz3Yl8piMWRUJmzq6EB2JeDPQeK2UGoEAvWjQDi2HgVgE1BQb9MnbWPOiJ/GljAQs0gLAHLCtCHQPGDJgzswjr+T3S0oc2PHwJyzmTgYCbyIm89wrigzlh5RtZaOsVNADnmxjyIvQ0fxOYoxobQdtR/uv3pAi719GjovsWrjyX9QYABPrSEOM48ula4pnfthxhaQGtCge2532W+272jteWmSLzFmrTaL3yiExL3/eLm9f9kMyAoDyWAD5aMJpqhTcD6ZO0nghJfSkte+mnAtgNFe9yYHqphPSYC7ImanBlnt0MHCLUyb0hFk6XB0PO55+64QKKIlo/fqniOcwJiTecPnRZyv66j3COtmHwA1vO6omgBtKrSuLG/xwN6u45bP6X5UGYdfMqtlAcmh7vBnA9gpPJgNGrssMN8Mpg0jNJ2V60RrjMYqZZAD43cxYM/h5IcikYBNvn7LkADLjrmEoaEViphMIRthbkpRVjRWeILSzDC1uyFqTnbTmx9fAGs4PqdNN3BH6//s5+tfZhZWhp9WlorfQsDE399mLfo3aJ3MOtcSsFOWu6uAr71OpDjlmp0U5V00N0y8hXmlKDDlxqgAuo15z6mcw5ElsGFcxjmU+OiNkyk9i7eS/M7n4T1BLTqyw1OOjlaasB4/Qa+PeKb2qebfETuI7GTLdqguEmG72aftygUJwkn4c4Ovz1Vpa8A4BYda7ffyLfReFMPJjGAqRSg/0WKGbSZEkugPqpBXsBlaMfDs3HdXwCjYzhZGlgMe3VxpFvi+1RYL9L X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700016)(7416014)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vEAypvaoCnu5fE7T0HAQvwoJf0Kl+qh0ohSGoc8kYEih9sRD+19lt4TVdG8sAGC9Mhp+kEHgO+JNSQ3P9kzoP63WV/jWkmBEzkDK1iLl0q1IMswVQe+bNu5lIRfpr+FtxAkiXXOZuvEhW+EpGNOazwopgwX1q5NjK5d3hOhvgg+7nrv8RgmQqVNqpxZr+7aL5NUvb1tMZWipxtaZXWUsbTZAMDYMncRiBNp4SHdaPG2aAYXoTKN2KJbxQZxpOnwMdlI2W+1FbR8KQkOuCa4fZK9EWz8fJ+yWF5qoszmHC4YJIc9In0UImujslkcmFNmp1Ra2hhrmlyje77JVxX4IbhPqe3ojFwXOQkIXEpOeZZiV3VqLmhU02OPsWfYBzJw+h7hIE5+NrpaAma907KZTFpBmN0qnfLJpoHkJ79bBOtR7Q07biyeKmN9BEM6K8OuA X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:06.5928 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c91c68aa-cc24-44e3-5072-08dea488c56a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FD.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7547 Received-SPF: permerror client-ip=2a01:111:f403:c107::1; envelope-from=mhonap@nvidia.com; helo=PH8PR06CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320136785158500 Content-Type: text/plain; charset="utf-8" From: Manish Honap Sync the VFIO UAPI additions from the kernel CXL Type-2 passthrough series. VFIO_DEVICE_FLAGS_CXL (bit 9) marks a device as CXL Type-2 and guarantees the capability chain includes a vfio_device_info_cap_cxl entry (cap id 6). That capability carries the BAR index holding the CXL component registers, flags for firmware-committed and cache-capable devices, the byte offset to the HDM Decoder Capability block within that BAR, and region indices for both the DPA memory region and the Component Register shadow. Two new region subtypes: VFIO_REGION_SUBTYPE_CXL (1): mmappable DPA memory VFIO_REGION_SUBTYPE_CXL_COMP_REGS (2): HDM decoder shadow, r/w only Note: UAPI headers are normally kept in sync via scripts/update-linux-headers.sh once upstream kernel changes merge. This patch manually adds the CXL Type-2 additions as a temporary measure to unblock QEMU development. It should be dropped and replaced with a proper header sync once the kernel series is accepted. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- linux-headers/linux/vfio.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h index 720edfee7a..62cd725a39 100644 --- a/linux-headers/linux/vfio.h +++ b/linux-headers/linux/vfio.h @@ -215,6 +215,7 @@ struct vfio_device_info { #define VFIO_DEVICE_FLAGS_FSL_MC (1 << 6) /* vfio-fsl-mc device */ #define VFIO_DEVICE_FLAGS_CAPS (1 << 7) /* Info supports caps */ #define VFIO_DEVICE_FLAGS_CDX (1 << 8) /* vfio-cdx device */ +#define VFIO_DEVICE_FLAGS_CXL (1 << 9) /* vfio-cxl device */ __u32 num_regions; /* Max region index + 1 */ __u32 num_irqs; /* Max IRQ index + 1 */ __u32 cap_offset; /* Offset within info struct of first cap */ @@ -257,6 +258,19 @@ struct vfio_device_info_cap_pci_atomic_comp { __u32 reserved; }; =20 +#define VFIO_DEVICE_INFO_CAP_CXL 6 +struct vfio_device_info_cap_cxl { + struct vfio_info_cap_header header; /* id=3D6, version=3D1 */ + __u8 hdm_regs_bar_index; /* PCI BAR containing CXL component registers */ + __u8 reserved[3]; + __u32 flags; /* VFIO_CXL_CAP_* flags */ +#define VFIO_CXL_CAP_FIRMWARE_COMMITTED (1 << 0) +#define VFIO_CXL_CAP_CACHE_CAPABLE (1 << 1) + __u64 hdm_regs_offset; /* byte offset within BAR to CXL.mem register ar= ea */ + __u32 dpa_region_index; /* VFIO region index for DPA memory */ + __u32 comp_regs_region_index; /* VFIO region index for COMP_REGS */ +}; + /** * VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8, * struct vfio_region_info) @@ -373,6 +387,10 @@ struct vfio_region_info_cap_type { /* sub-types for VFIO_REGION_TYPE_GFX */ #define VFIO_REGION_SUBTYPE_GFX_EDID (1) =20 +/* sub-types for VFIO CXL regions */ +#define VFIO_REGION_SUBTYPE_CXL (1) /* DPA memory region */ +#define VFIO_REGION_SUBTYPE_CXL_COMP_REGS (2) /* HDM register shadow */ + /** * struct vfio_region_gfx_edid - EDID region layout. * --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320045; cv=pass; d=zohomail.com; s=zohoarc; b=clxFQlp7YkjXgHLCalolvD5B9Q78rQv0Odo727GrltKaapEuSunAOteAT6YCg8auiiTxKKWgpn3txQWkSUxPuFXTVzNf1w7fae/BkWmOzVl2DRrOqSTTzyeF1QPjZ7vVClvBAeu6V/PyEW0Sbjewm1yeEvP3ltuiOqv0dbIZLOk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320045; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=amUqyT2zAZ5FovMijWrpd02U0cnVkmWTYD7v8WEbXGU=; b=ZSj7MliPGNcUIUMNKff+yAm1EOzMQdpimPJwdRQDExk/dz9aEU5Ir6E3FO8u9T8dfZ1ud4xFvxlouPY6rUYy/hqO4wFVanGqH51T3gIUKLBBzCcjP9IsjFXOy5ezZGJNvoyF/qFD47YrO/98/JiyXYf1sWtNJ6nkY3IqoIXdRig= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320045594957.4882447392533; Mon, 27 Apr 2026 13:00:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5U-00038G-2j; Mon, 27 Apr 2026 15:57:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTP-00032y-KM; Mon, 27 Apr 2026 14:14:24 -0400 Received: from mail-eastusazlp17011000f.outbound.protection.outlook.com ([2a01:111:f403:c100::f] helo=BL2PR02CU003.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTO-00009V-0A; Mon, 27 Apr 2026 14:14:23 -0400 Received: from CH0PR04CA0014.namprd04.prod.outlook.com (2603:10b6:610:76::19) by SJ0PR12MB6830.namprd12.prod.outlook.com (2603:10b6:a03:47c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.15; Mon, 27 Apr 2026 18:14:12 +0000 Received: from DS1PEPF00017094.namprd03.prod.outlook.com (2603:10b6:610:76:cafe::18) by CH0PR04CA0014.outlook.office365.com (2603:10b6:610:76::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:12 +0000 Received: from mail.nvidia.com (216.228.117.160) by DS1PEPF00017094.mail.protection.outlook.com (10.167.17.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:11 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:51 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kajWbX2JbIC2MWGTOhCqRgw2mrbTLIB6B2iLHVk+UaLF/Es2OdKJZ77cW3UX6t9eH+O3NaZdH27mUb++T4hSRSKsjk/WT3Q1WtbMxY1KrvbP/FMY2Ak2UQMdrSq1lb1bKJi/qka7FyqEDEzVO1QhKXiNzFHq5cr4U/fME30DQdaVWnqCQzzkqM4L5IpvmmRTizvko132HECKadsDiObemZTKwK8T+VsLgkVGhkkLmIbadBhBN6rcokAeSZiFWKnoU4nJIVMYYDPzZtcCi4Fn6eFymkFhYQVG9toUNcChFM+04066CRAjAP0pV6/12p10OjhLlMoqgHKGOSCiSXWp6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=amUqyT2zAZ5FovMijWrpd02U0cnVkmWTYD7v8WEbXGU=; b=bdqEFhiAKwUkPOOltWvzHyA5t7Y9i+AaS55o21uJo94SutKUm2eOwQy0EW9/WGTECWiAnzHGTqYTJlzxmTWhfONe+xnjJ8GyRevq/iord3ejZVxPPz8eRzuGgBWyUaTjLNBSf8N1a/Mhf5BXXViMf6z4Upk3ZYtUhCnp+/7M05MWpYo0o4w7G4Vt+/OdQVmG4wx5h4iiWYFkYs9nLbLPMtah9xJVu0QTl8oPoS0iJIaVobY58J6E7N+H55FrN1PSS6h5p6u0nL68MMQmY3Rplq1zUwVyaEWtFdtg5lxa6QCCF7Kdg8ZgjsgvyW4hnBtpf1bgjjPCZeMgJ69nL3B8xQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=amUqyT2zAZ5FovMijWrpd02U0cnVkmWTYD7v8WEbXGU=; b=dBOoLSkxGPTYGmiMqr5LQ3ZSrEsEdagWGyS5DNtcis+KCMtxvXw1ucPXR2al1l0bMkZsaJq94pfWnDAqzp73StvFczv+rcxuj/fxF6BkfNA+yK7YxS4R1mxqbkx3OBIBJvkZDCCcpOyGbCKM7e0eGDVt7SY0wncAnT/Z9Xd9lHAfCHPgPUgkhkKocUuJGh0oAVMVNN/yR5sQ5jIC/kR33nv4nYvJUoW47Cc/o/T4S3hHH035cSCrOjYNl+WW/9Mbs8NvBslmET4Ab4Jk1yyBRCCaBnawzAQPy1joXXOQh5UB9yHeTanIlOf5fcL7649roqTxiyTMy5JNHoyOGdXeWw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 4/9] hw/vfio/region: Add vfio_region_setup_with_ops() for custom region ops Date: Mon, 27 Apr 2026 23:42:30 +0530 Message-ID: <20260427181235.3003865-5-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017094:EE_|SJ0PR12MB6830:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a0d3ccc-18c9-4912-2190-08dea488c86e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|7416014|36860700016|921020|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: cAJQrGJzX6lTWkW3ZPpfnSFb2dZ2dc20cfZ6hxH4uqZ5+OyGsvaGfuOWomARGaQYBA6A2AXOqey1c/RCULqGaHEY60iTjLy2UZUYlfLnF+JpiH2IAL6o7Gr69rtc97uUuv45J9K3CjHL35ezY9fJ7RA+orOPTGmqtZmZjYMM34hOvB/aqnpOk4UZuMYs8PNjHCY4C8HyJhK9A82czBCURhVKPABqFMNIGEgnILVEABQUa5wYP2UXdQ4Xky/vdimdo3fYbXeWOqKT+CCbxJbdKvUKmTYarCMXYWTG1MSngtMW5L6fqEkenh3MUiTO0FrMdLAjfITz1hFRg95WFhHgAO2vJrMr0N+x0e/ACLNWMCCpuz/yBZeCi4GffN9nzfGRpnFXplZ1GGWcUP0jX7+4SkA+UHGZJuHTtNYo1mtw7k96gMacItJod9sOOyCB1xuJEtA1CNrtRLRBhs0jAZEPFltlMFh5tCpjAVm/hkq893HomGFFcGBIOEKvMyhkmFZujKuk5PBhtYku/uzIL/R6qK//33zG5mojSO48ydo/n7iLglJVzQngGXbCp5T4Qxnd5LCMCq0dwqUrZkz4OCjlCejnvsgJjSWz0+8wT2JoHBqmHL5MIgEXbRx6cFqFwgGA9nDDApinBK9Z1+lT/i/+wz2KnNfZ/wFBNXEAoM19mfWcvQGph1Mb7wg5jZ7SdCpJ1n87I6+mdqwMhywfMoDLY4dqARMoygroQRap3ClpXTS4TspMJMX8AKe8Zc6NBhDCskFmyoJ+OwZj6CfZwchywrd7rwxruuglgg/a8t4vXpgTHWUVtNUf3lsYsB+77IFl X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(7416014)(36860700016)(921020)(22082099003)(18002099003)(56012099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: iSwmj/H/lf5qUhWdc/DeQWo4d94UAcxpWN0GiSM4UXyuD3VS1pzB5IJxyQKhuov/tBA/VZwRBV9Iem0hnTjDzJ8O2gdverYhLr+V8twV7+W0lGSZ3OvprvKa3xuyPN4IeMgDW95pDL5aXZj+3BAxzg4yT3enGv7DGRprZu4C8rFGDg6Ju/ETFRyEVWC+1psuIDXRlJFlQHj6rUsCZvsULsXFqVIYSazvRMpokPtwSj+caxNnVAlLjfjLcP0Zr5x6qmdt+kMAO3347anCqsz8cabUXWZSOKTWTwmR3up2rNkFRvZ8hwQC5KvZvBt78sZTBuuIEgd6uF7Ta/mnFCi7hbXOugUumrcfMjV0bP8JQamd5+w2vcM8IBnECzhIKAB4w425hliAEwq7+rHCWoOrrPUZ2r0MZWAQFVmrHXq0cMTV/HtKysk2gBDH3jgvtEkg X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:11.7191 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a0d3ccc-18c9-4912-2190-08dea488c86e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017094.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6830 Received-SPF: permerror client-ip=2a01:111:f403:c100::f; envelope-from=mhonap@nvidia.com; helo=BL2PR02CU003.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320047762154100 Content-Type: text/plain; charset="utf-8" From: Manish Honap vfio_region_setup() always initializes the region MemoryRegion with vfio_region_ops. CXL needs custom pread/pwrite ops for the Component Register shadow region. Add vfio_region_setup_with_ops() which accepts a const MemoryRegionOps * parameter. When non-NULL it is passed to memory_region_init_io(); when NULL the existing vfio_region_ops is used. vfio_region_setup() is retained unchanged as a thin wrapper for all existing callers. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- hw/vfio/region.c | 15 ++++++++++++--- hw/vfio/vfio-region.h | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index 0342ca712a..9bbe758d6f 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -228,8 +228,9 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion *r= egion, return 0; } =20 -int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *regio= n, - int index, const char *name, Error **errp) +int vfio_region_setup_with_ops(Object *obj, VFIODevice *vbasedev, + VFIORegion *region, int index, const char *= name, + Error **errp, const MemoryRegionOps *ops) { struct vfio_region_info *info =3D NULL; int ret; @@ -249,7 +250,8 @@ int vfio_region_setup(Object *obj, VFIODevice *vbasedev= , VFIORegion *region, =20 if (region->size) { region->mem =3D g_new0(MemoryRegion, 1); - memory_region_init_io(region->mem, obj, &vfio_region_ops, + memory_region_init_io(region->mem, obj, + ops ? ops : &vfio_region_ops, region, name, region->size); =20 if (!vbasedev->no_mmap && @@ -273,6 +275,13 @@ int vfio_region_setup(Object *obj, VFIODevice *vbasede= v, VFIORegion *region, return 0; } =20 +int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *regio= n, + int index, const char *name, Error **errp) +{ + return vfio_region_setup_with_ops(obj, vbasedev, region, index, + name, errp, NULL); +} + static void vfio_subregion_unmap(VFIORegion *region, int index) { trace_vfio_region_unmap(memory_region_name(®ion->mmaps[index].mem), diff --git a/hw/vfio/vfio-region.h b/hw/vfio/vfio-region.h index 9b21d4ee5b..84abbec1ec 100644 --- a/hw/vfio/vfio-region.h +++ b/hw/vfio/vfio-region.h @@ -39,6 +39,9 @@ uint64_t vfio_region_read(void *opaque, hwaddr addr, unsigned size); int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *regio= n, int index, const char *name, Error **errp); +int vfio_region_setup_with_ops(Object *obj, VFIODevice *vbasedev, + VFIORegion *region, int index, const char *= name, + Error **errp, const MemoryRegionOps *ops); int vfio_region_mmap(VFIORegion *region); void vfio_region_mmaps_set_enabled(VFIORegion *region, bool enabled); void vfio_region_unmap(VFIORegion *region); --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320020; cv=pass; d=zohomail.com; s=zohoarc; b=g6MxHeqgHsZ4XfJwLTdhFnKyE+1KhyFPEekNWkyZkCPZ1oWyo1AqK9UVG7/J/kTda/BklPkBXgRYQrT1I3o3ScpGYldEaHsHPrgtQ825kMBLaayj1/jm+vGft75npNvGhJyoS/r+mKFssymPJVz/ebWueLfs6obAWpY6jUMKbzs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320020; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JuG8Ge0ykEIBDtFWCFC9wN1HAPiMU07Z5XLejSBkzZc=; b=WnInWEAGm+jzt1Uufd4oxGwZopJJ0EPnwzXqeuPX7PONK9NTHEXxtPVmQ/cK5oHieRkKDBwwIC6I0u6/x1OYraYE7IcFrIZBN6AOFPKB5j2DXooLvGr7YnrpmqxmFdZp5zDvUcnXZiddG7q+JCs+jMYmLO6GGtdPkaEetD68C9M= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320020184970.6804335970625; Mon, 27 Apr 2026 13:00:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5P-00035t-HW; Mon, 27 Apr 2026 15:57:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTa-00034S-O1; Mon, 27 Apr 2026 14:14:36 -0400 Received: from mail-eastus2azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c110::3] helo=BN8PR05CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTY-0000Bp-LC; Mon, 27 Apr 2026 14:14:34 -0400 Received: from MN2PR11CA0030.namprd11.prod.outlook.com (2603:10b6:208:23b::35) by SN7PR12MB8817.namprd12.prod.outlook.com (2603:10b6:806:347::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.15; Mon, 27 Apr 2026 18:14:20 +0000 Received: from BL02EPF0001A0FB.namprd03.prod.outlook.com (2603:10b6:208:23b::4) by MN2PR11CA0030.outlook.office365.com (2603:10b6:208:23b::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:20 +0000 Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0001A0FB.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:20 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:00 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:13:52 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vMgfi/JX0CKRWhz/P5n+JKfWxZQRE/PdGcEO2zd5yxSk/MoY7u+jB4jzgJAPrbfoQT8xz0oFzrNT/CVb0pRGvATrR4wMiM20LnLvugIWRLJpqv0id+B9yUdnZChUQpUbX7ysAtcfBl50Hv+NsjLhXEYag2LGaoDNa7M71je1ZfB3cgInxiyMHo8CwbJ/KWdrShbL1GbSO+c9+48y6Rroxtr2n7LwBFCg380UtUhL+l1SR7JkIGmrqH4lEAUWnaFw14K48HMy0ec9j6wOpZLqaejRmFftZX+Q+uWkfh9qH8f4JzgL9YbVzGpC3T80V3rC0OuVmAmLm2Tyja7UqLpkTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JuG8Ge0ykEIBDtFWCFC9wN1HAPiMU07Z5XLejSBkzZc=; b=mDh3caji+USfc6Mm6COUr5auMO/kS1Qf3gh+piXcTAlK5Phhk4u4unZUbapBDvmpCDTkPaOtWesqMKS3A1Bt7wBSvnNZfH4QSJEQ7bWSLLwNn2hRSEm7lgrcPH+KGEgMUb3/HSUqsGUNJPPKO0OtvBBR/WtNCs3r+5Nwd191D1YEWzLqavxDGWbOY/RdpWfzlY9cuFrOpbe74MhD5rZy1F2XSwBv4r4a1JAQR1VEH8b+B7b3+U5Zmav7zS9p8qACzCdI1cXojgz4vzO8a3ZEaXTNUDtDYGE6uXqzojhdQT4SHVW6H994r74aiBV1X+Nv1k0eRmtm/boDv37kSUqBnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JuG8Ge0ykEIBDtFWCFC9wN1HAPiMU07Z5XLejSBkzZc=; b=luF8HMr2GgZtmjCmO3VAcU69gr8Bw5NfFjvQsyCimKcYl8RQ54ukegQ3rmkfms1gMWdsy9bcq3Tbl+3lrQCZC0wYLGl0k9+BeEf/t8vc/+K/NEY+YR8xb8ktduB7bJwVHS6RaQ1EOhc0tZZZGQWcQrJhSBDgkIVq9qTOwBEYd/NRnyXbNlGRUxfuFAK1eG5h/J6ZelNHshS2h1vyyANe2FwVP3YIeOjurSds0oUgR6iGLUyrLXIqPWNl+WzkcZUSVbeyJ7Ol9mSsFx/fChBM5TIoGXJmaLQYtRMylyv8E/3NOIMCXHIBlGZTAiK2C1k2yRlrX9IXfs2W+hUXgGjfMw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 5/9] hw/vfio/pci: Add CXL Type-2 device detection and region setup Date: Mon, 27 Apr 2026 23:42:31 +0530 Message-ID: <20260427181235.3003865-6-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FB:EE_|SN7PR12MB8817:EE_ X-MS-Office365-Filtering-Correlation-Id: 3022b281-ce9c-4e75-44be-08dea488cd84 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|376014|7416014|1800799024|56012099003|18002099003|22082099003|921020; X-Microsoft-Antispam-Message-Info: A7u+6mZXZapd1DPWCyM5S0OUkSizfa8I1Lg9Y2BTVEELiBFQRNdLYw+VM/xpD7UXk0+XjL8cP0nRSYJCDC8aAJ/v4o0LSjoee9pJdyZ5J1bW6b8EDZ0HVSZ8LHgPXh+IN2ziLkHZTTb0KHQ4aghXRobCkIRHyNKr3SF8OFv0A4XddZaIt5yotyEMHI2bXV5thh5bcPBvFD5v4VDy8enXX034vqpfH5AULFYf/IgsKsxo4WKuczQGu6NwfEHz09U3B7FoGok2TFh+WNB6nd/5INDUHZVBj3uYD8MigVnJNit63yqAEDEmD+V5pIRH6Ng/Lq6TtQLNvUF8gBBu6PJXh8cp2QoIe8pUiR4eWl1qFZuKVFrPsiP0r42QjoZvfpyP61CTyrII/ZF6wZ+EgM+3L/W5XacwF2ehtbPtTyd3tkYWorYo6dHSqXJELWUFnevoxu/ZiLGLpFYcSKHn8q2WqFpYTPCRW6G/iJr2/qt0hYADJaZF7ZLBBDj9bYBHEyz6IvaqFx5Sc5p11Eour46hFquVe9eg0vbLGScFHwrvU+jl30jyYhK6v2StTk8We9Es7rF9iMHvxOO3KDEIE1RvkToxpkCsmiMOJHdb/YxSsboKu6yxQbRscRklZZO9JH6l4lJQExUfFFIYnfMXk8Pj1YbmUdzqf6KZR09FrejE8Z3WRhpYNxqhRlqI7KSCtzYACCfq7xLVMqpAK1nT/RYByMR6NeNBJOiMFJ204E3wtuLmKngFto9M1Bsa/vEYPa6HsZvKmS39FYigABJ4V3yvhMS0ZDuyaxT4Q6jpyHYwd+bYPktTPVyD8dMvB3wh5c5E X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(376014)(7416014)(1800799024)(56012099003)(18002099003)(22082099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6WuA0owz+mcNaLZQdFn3wUWrQ0d9eNcUr7dMmY4z1TMR7XVSsqgM3s/Bq7kL5ggx24FM5DYItLIvUkCDe6FvdlEe5qr7CgJN/cF1Su5vy0gM0aUaOdUBZPzfmL0/BY4MXXPIeCq+GvQbzm8I9oCaS/Rn4kZRFwtUb1c0xup6oHBOdxvkNcxOX6+sl7000n1jsjLtA4RXFi59jZ404LxNOxFgW1ov2bhE4tQz96HPi6AoUCMQq3S1VZO0bSojxOUBHazV3PRUt5Vk9+ymM7GJLM2UpnKTmTL2yXn3plSljRIiQu+NZEv4gZWA8RXRD6FUiRmExZaqMbaGBJI/dAHbX4TRsOHxWmmSQuOYQC+PsdiyT0HC2+TJbvHe/y55BU7l3Bds3WT6ik4mEHBNok3yv8WcydyQJwKN51fLOQb7B4ghsUatYIiJ5nfqxTv6KI/W X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:20.1749 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3022b281-ce9c-4e75-44be-08dea488cd84 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8817 Received-SPF: permerror client-ip=2a01:111:f403:c110::3; envelope-from=mhonap@nvidia.com; helo=BN8PR05CU002.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320022119158500 From: Manish Honap When VFIO_DEVICE_FLAGS_CXL is set, the kernel has identified a CXL Type-2 device and populated the capability chain with a vfio_device_info_cap_cxl entry. Read that entry to locate the DPA and CXL Component Register shadow regions, then call vfio_region_setup() for each. DPA covers the device's host-managed memory and is faulted in lazily by the VMM. The CXL Component Register shadow gives the VMM access to the HDM Decoder Capability block so it can intercept decoder commits without touching the hardware register page directly. vfio_cxl_derive_hdm_info() walks the CXL Capability Array inside the Component Register shadow to find the HDM Decoder capability (ID 0x5) and extracts hdm_decoder_offset and hdm_count. All reads use le32_to_cpu() since the capability array is little-endian per the CXL spec. Dword 0 is the array header; capability entries start at dword 1, which is why the loop begins at i =3D 1. CXL register constants are defined here using names that mirror to make cross-referencing straightforward. Add the VFIOCXL struct embedded in VFIOPCIDevice. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- hw/vfio/pci.c | 214 +++++++++++++++++++++++++++++++++++++++++++ hw/vfio/pci.h | 14 +++ hw/vfio/trace-events | 4 + 3 files changed, 232 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index b2a07f6bb4..49ac661eb3 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -24,6 +24,7 @@ =20 #include "hw/core/hw-error.h" #include "hw/core/iommu.h" +#include "hw/cxl/cxl_component.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/pci/pci_bridge.h" @@ -2957,6 +2958,38 @@ static VFIODeviceOps vfio_pci_ops =3D { .vfio_load_config =3D vfio_pci_load_config, }; =20 +/* + * CXL Component Register Space constants (CXL 4.0 8.2.3). + */ + +/* CXL Capability Array Header (dword 0 of COMP_REGS) */ +#define CXL_CM_CAP_HDR_ARRAY_ID 0x0001U /* expected ID value */ +#define CXL_CM_CAP_HDR_NUM_CAPS_SHIFT 24 /* bits [31:24] =3D num en= tries */ +#define CXL_CM_CAP_HDR_NUM_CAPS_MASK 0xffU +#define CXL_CM_CAP_ENTRY_ID_MASK 0xffffU /* bits [15:0] =3D cap ID = */ +#define CXL_CM_CAP_ENTRY_PTR_SHIFT 20 /* bits [31:20] =3D byte o= ffset */ +#define CXL_CM_CAP_ENTRY_PTR_MASK 0xfffU +#define CXL_CM_CAP_ID_HDM 0x0005U /* HDM Decoder cap ID */ + +/* HDM Decoder Capability (HDMC) register at hdm_decoder_offset+0x00 */ +#define CXL_HDMC_DECODER_COUNT_MASK 0xfU /* bits [3:0]; 0=E2=86=921= , N=E2=86=92N*2 */ + +/* + * Per-decoder register offsets from hdm_decoder_offset (CXL 4.0 Table 8-1= 19). + * Decoder records begin at +0x10 and are 0x20 bytes each. + */ +#define CXL_HDM_DECODER0_BASE_LOW_OFFSET(i) (0x20 * (i) + 0x10) +#define CXL_HDM_DECODER0_BASE_HIGH_OFFSET(i) (0x20 * (i) + 0x14) +#define CXL_HDM_DECODER0_CTRL_OFFSET(i) (0x20 * (i) + 0x20) + +/* HDM Decoder n Control register bits (CXL 4.0 Table 8-123) */ +#define CXL_HDM_CTRL_COMMIT_LOCK (1U << 8) /* decoder locked */ +#define CXL_HDM_CTRL_COMMIT (1U << 9) /* software trigger */ +#define CXL_HDM_CTRL_COMMITTED (1U << 10) /* hardware status */ + +/* HDM Decoder BASE_LO: bits [31:28] hold address bits [31:28] */ +#define CXL_HDM_BASE_LO_ADDR_MASK 0xF0000000U + bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev =3D &vdev->vbasedev; @@ -3102,6 +3135,25 @@ void vfio_pci_put_device(VFIOPCIDevice *vdev) { vfio_display_finalize(vdev); vfio_bars_finalize(vdev); + + /* + * The DPA region is not in bars[] and must be cleaned up here. + * Remove it from the system address space before releasing. + */ + if (vdev->cxl.dpa_in_system_mem) { + memory_region_del_subregion(get_system_memory(), vdev->cxl.region.= mem); + vdev->cxl.dpa_in_system_mem =3D false; + trace_vfio_cxl_put_device(vdev->vbasedev.name); + } + if (vdev->cxl.region.mem) { + vfio_region_exit(&vdev->cxl.region); + vfio_region_finalize(&vdev->cxl.region); + } + if (vdev->cxl.comp_regs_region.mem) { + vfio_region_exit(&vdev->cxl.comp_regs_region); + vfio_region_finalize(&vdev->cxl.comp_regs_region); + } + vfio_cpr_pci_unregister_device(vdev); g_free(vdev->emulated_config_bits); g_free(vdev->rom); @@ -3254,6 +3306,164 @@ void vfio_pci_register_req_notifier(VFIOPCIDevice *= vdev) } } =20 +/* + * vfio_cxl_derive_hdm_info - read hdm_decoder_offset and hdm_count from t= he + * COMP_REGS region by traversing the CXL Capability Array. + * + * Dword 0: CXL Capability Array Header + * bits[31:24] =3D num_caps, + * bits[15:0] =3D 1. + * Dwords 1..N: + * bits[15:0] =3D cap ID; + * bits[31:20] =3D byte offset from region start. + * HDM Decoder cap ID =3D 0x5; its offset is hdm_decoder_offset. + * HDMC register at hdm_decoder_offset+0: + * bits[3:0] encode count (0=E2=86=921, N=E2=86=92N*2). + */ +static bool vfio_cxl_derive_hdm_info(VFIODevice *vbasedev, VFIOCXL *cxl, + Error **errp) +{ + off_t base =3D cxl->comp_regs_region.fd_offset; + uint32_t hdr, num_caps, i; + + if (pread(vbasedev->fd, &hdr, sizeof(hdr), base) !=3D sizeof(hdr)) { + error_setg(errp, "vfio-cxl: failed to read CXL Capability Header"); + return false; + } + hdr =3D le32_to_cpu(hdr); + + if ((hdr & CXL_CM_CAP_ENTRY_ID_MASK) !=3D CXL_CM_CAP_HDR_ARRAY_ID) { + error_setg(errp, "vfio-cxl: unexpected CXL Capability Array ID 0x%= x", + hdr & CXL_CM_CAP_ENTRY_ID_MASK); + return false; + } + + num_caps =3D (hdr >> CXL_CM_CAP_HDR_NUM_CAPS_SHIFT) & + CXL_CM_CAP_HDR_NUM_CAPS_MASK; + + /* + * Dword 0 is the CXL Capability Array Header; + * capability entries start at dword 1. + */ + for (i =3D 1; i <=3D num_caps; i++) { + uint32_t entry, cap_id; + + if (pread(vbasedev->fd, &entry, sizeof(entry), + base + i * sizeof(entry)) !=3D sizeof(entry)) { + error_setg(errp, "vfio-cxl: failed to read cap entry %u", i); + return false; + } + entry =3D le32_to_cpu(entry); + + cap_id =3D entry & CXL_CM_CAP_ENTRY_ID_MASK; + if (cap_id =3D=3D CXL_CM_CAP_ID_HDM) { + uint32_t hdmc, field; + + cxl->hdm_decoder_offset =3D (entry >> CXL_CM_CAP_ENTRY_PTR_SHI= FT) & + CXL_CM_CAP_ENTRY_PTR_MASK; + + if (pread(vbasedev->fd, &hdmc, sizeof(hdmc), + base + cxl->hdm_decoder_offset) !=3D sizeof(hdmc)) { + error_setg(errp, "vfio-cxl: failed to read HDMC register"); + return false; + } + hdmc =3D le32_to_cpu(hdmc); + field =3D hdmc & CXL_HDMC_DECODER_COUNT_MASK; + cxl->hdm_count =3D field ? (uint8_t)(field * 2) : 1; + return true; + } + } + + error_setg(errp, "vfio-cxl: HDM Decoder capability not found in COMP_R= EGS"); + return false; +} + +static bool vfio_cxl_setup(VFIOPCIDevice *vdev, Error **errp) +{ + VFIODevice *vbasedev =3D &vdev->vbasedev; + VFIOCXL *cxl =3D &vdev->cxl; + g_autofree struct vfio_device_info *info =3D NULL; + struct vfio_info_cap_header *hdr; + struct vfio_device_info_cap_cxl *cap; + g_autofree struct vfio_region_info *region_info =3D NULL; + g_autofree struct vfio_region_info *comp_info =3D NULL; + int ret; + + if (!(vbasedev->flags & VFIO_DEVICE_FLAGS_CXL)) { + return true; + } + + info =3D vfio_get_device_info(vbasedev->fd); + if (!info) { + error_setg(errp, "vfio-cxl: failed to get device info"); + return false; + } + + hdr =3D vfio_get_device_info_cap(info, VFIO_DEVICE_INFO_CAP_CXL); + if (!hdr) { + error_setg(errp, "vfio-cxl: CXL capability not found in device inf= o"); + return false; + } + cap =3D (void *)hdr; + + if (cap->dpa_region_index =3D=3D (uint32_t)-1 || + cap->comp_regs_region_index =3D=3D (uint32_t)-1) { + error_setg(errp, "vfio-cxl: kernel did not provide region indices " + "(dpa=3D%u comp=3D%u)", + cap->dpa_region_index, cap->comp_regs_region_index); + return false; + } + + cxl->hdm_regs_bar_index =3D cap->hdm_regs_bar_index; + cxl->hdm_regs_offset =3D cap->hdm_regs_offset; + + /* DPA region */ + ret =3D vfio_device_get_region_info(vbasedev, cap->dpa_region_index, + ®ion_info); + if (ret || !region_info) { + error_setg(errp, "vfio-cxl: failed to get DPA region info"); + return false; + } + ret =3D vfio_region_setup(OBJECT(vdev), vbasedev, &cxl->region, + region_info->index, "cxl-dpa", errp); + if (ret) { + error_setg(errp, "vfio-cxl: failed to set up DPA region"); + return false; + } + cxl->dpa_size =3D region_info->size; + + if (vfio_region_mmap(&cxl->region)) { + error_setg(errp, "vfio-cxl: failed to mmap DPA region for %s", + vbasedev->name); + return false; + } + + /* COMP_REGS region (HDM decoder shadow) */ + ret =3D vfio_device_get_region_info(vbasedev, cap->comp_regs_region_in= dex, + &comp_info); + if (ret || !comp_info) { + error_setg(errp, "vfio-cxl: failed to get COMP_REGS region info"); + return false; + } + ret =3D vfio_region_setup(OBJECT(vdev), vbasedev, &cxl->comp_regs_regi= on, + comp_info->index, "cxl-comp-regs", errp); + if (ret) { + error_setg(errp, "vfio-cxl: failed to set up COMP_REGS region"); + return false; + } + cxl->hdm_regs_size =3D comp_info->size; + + if (!vfio_cxl_derive_hdm_info(vbasedev, cxl, errp)) { + return false; + } + + trace_vfio_cxl_setup_params(vbasedev->name, cxl->hdm_regs_bar_index, + cxl->hdm_regs_offset, cxl->hdm_regs_size, + cxl->dpa_size); + return true; +} + + static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) { Error *err =3D NULL; @@ -3508,6 +3718,10 @@ static void vfio_pci_realize(PCIDevice *pdev, Error = **errp) goto error; } =20 + if (!vfio_cxl_setup(vdev, errp)) { + goto error; + } + if (!vfio_pci_config_setup(vdev, errp)) { goto error; } diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index c3a1f53d35..f3906f0c53 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -122,6 +122,19 @@ typedef struct VFIOMSIXInfo { =20 OBJECT_DECLARE_SIMPLE_TYPE(VFIOPCIDevice, VFIO_PCI_DEVICE) =20 +typedef struct VFIOCXL { + uint8_t hdm_regs_bar_index; + uint64_t hdm_regs_offset; + uint64_t hdm_regs_size; + uint64_t hdm_decoder_offset; + uint8_t hdm_count; + uint64_t dpa_size; + hwaddr fmws_base; /* GPA base programmed into HDM decoder 0 = */ + bool dpa_in_system_mem; + VFIORegion region; + VFIORegion comp_regs_region; +} VFIOCXL; + struct VFIOPCIDevice { PCIDevice parent_obj; =20 @@ -191,6 +204,7 @@ struct VFIOPCIDevice { VFIODisplay *dpy; Notifier irqchip_change_notifier; VFIOPCICPR cpr; + VFIOCXL cxl; }; =20 /* Use uin32_t for vendor & device so PCI_ANY_ID expands and cannot match = hw */ diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 846e3625c5..3678481a8e 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -197,3 +197,7 @@ vfio_device_get_region_info_type(const char *name, int = index, uint32_t type, uin vfio_device_reset_handler(void) "" vfio_device_attach(const char *name, int group_id) " (%s) group %d" vfio_device_detach(const char *name, int group_id) " (%s) group %d" + +# pci.c CXL Type-2 passthrough +vfio_cxl_setup_params(const char *name, uint8_t bar, uint64_t hdm_off, uin= t64_t hdm_sz, uint64_t dpa_sz) " (%s) hdm_bar=3D%u hdm_regs_offset=3D0x%"PR= Ix64" hdm_regs_size=3D0x%"PRIx64" dpa_size=3D0x%"PRIx64 +vfio_cxl_put_device(const char *name) " (%s) removing DPA region from syst= em memory" --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777319961; cv=pass; d=zohomail.com; s=zohoarc; b=id30zvuDoVI2veGrpL/9QwGBoPLD69K72qAxDe1YX3PYGip8tjLYAQ1CjzW2uW3SLjRZKYBa4DPgfNLJjKDMMxAjrq02hFYYPD+yzAAR/DU7Wdv8XE3LTO816y5AFbbTyks/l7CyFtkPfNBkA9u+IHbZJ6kx7UMt0MxQtEGpIds= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777319961; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jOuH+YDKH63faEyUvLuBLbWGq7H5vFgqnGnRk0DNyI0=; b=Ladon6SheFTdS6BYx/tjmvfLTTeb7OFsm/JI9bh9RukWQyRr0po9u2gXZz6HPYhQbkFDCGGn4ywjm637ggdat8aJVcn1q/VrsDCUbXCjXMGoz2HdcVA3zWBrBvRK2fOSJ3Uq/wT92oCMLHasJksjLA7rtMYP7X/PYoPAHXZyT/Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777319961542115.22127751227788; Mon, 27 Apr 2026 12:59:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5Q-00036T-VC; Mon, 27 Apr 2026 15:57:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTo-00036A-Bw; Mon, 27 Apr 2026 14:14:51 -0400 Received: from mail-westusazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c000::1] helo=BYAPR05CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTm-0000H3-Or; Mon, 27 Apr 2026 14:14:48 -0400 Received: from PH7PR10CA0018.namprd10.prod.outlook.com (2603:10b6:510:23d::15) by SA1PR12MB6680.namprd12.prod.outlook.com (2603:10b6:806:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.15; Mon, 27 Apr 2026 18:14:32 +0000 Received: from CY4PEPF0000EDD3.namprd03.prod.outlook.com (2603:10b6:510:23d:cafe::60) by PH7PR10CA0018.outlook.office365.com (2603:10b6:510:23d::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:32 +0000 Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000EDD3.mail.protection.outlook.com (10.167.241.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:31 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:08 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dEfbj+3ZrFvUh13Fxrt7+HfB6KaxXXmGHfOq41ebjOZ6EYODO+jXl+YFsr0AYIXrGo5MZyCXagVL3jzxRw+3ezZ8GXDNEtKEAnJuR2dK6g9zaVE3i9hUjSVBWl0ruJwp3uGaK3U7FhaHTgQOnlzDbUQDrpXyU/6wjpE++rKLjNPLkDkA+hM4Dg4RBwj0QULI0w02LSyTFNBVjU3IgL7LBY/J7V3BZnKNvLfCcRnOUa2ZodWAqdtLH/bSk25WPUSEjqWeC76XdJyApvzUm3ACC/G7NBzhp0M7qiqJj5WKYcMlfq1HwpHU1ApqXp6YITEo3UUYlitum62XvTIocYBY9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jOuH+YDKH63faEyUvLuBLbWGq7H5vFgqnGnRk0DNyI0=; b=qQ01S1Z9a7GbA3wyOoV0mtPcc1DRD0JevB/u/tkemWRYYqrgN0Ho+/XWRUpL5oKfGzlBjv6m1+tJHrN/86DYFEYr1XSaDAEjPeGWIJON24g0RkmbhzT3JR2pKIWugb9sDc5slo5LQpyRHWnj+RvadBn4WLp+f1U+AoDZK5b6ehwIYEPkPgc3MdsfeQiXgiVt6U2854T0M0y596eznhJBdmu4Je5Eq5sOIuLqBNs6qQuX3P1xOGmWiEemlk/M6+Lw3t/Jur59Nb701epWUKyJwtm8h1IWErBU7ZB2OtNPyECEB/D2umBOzblqNlGPfn5jQVV+jd6Xar0+5crXoKbRxg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jOuH+YDKH63faEyUvLuBLbWGq7H5vFgqnGnRk0DNyI0=; b=MHEPFfhrp5Ee5yUQzrbZVfK3G96BbIHYC1mRvWdIgJlXaJR2B/2hz/smxSQEaGY1S8wR+fdW6L+oyBWEommbzAdVtgnkTXU7wjcSg93qW6VsJ10zJ4uhDgmtaZQfbqv6OvnFH5pm77cSjykiCQFTqFkiNpWNRUy8KHeo7nA5gnrUzniS4ReXgCX8Rwz6RAAfwpjm0uz4gpmtVeghg5cOMNtNQbwIXrY5p1GbsSZlupDVG+DJ9DYAS9Xdgsoab+k7lyRtHPdsbKnUGKUYPtmzn0e6SRQUioTZkLjZA+GwH/ZiGUiwTtPecdImXoIvyQwJ0alcL3xNer+mhy4kUL8qOg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 6/9] hw/vfio/pci: Wire CXL component-register BAR with COMP_REGS overlay Date: Mon, 27 Apr 2026 23:42:32 +0530 Message-ID: <20260427181235.3003865-7-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD3:EE_|SA1PR12MB6680:EE_ X-MS-Office365-Filtering-Correlation-Id: 7de79a8d-4308-4b1c-ef7a-08dea488d466 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|1800799024|82310400026|7416014|376014|11006099003|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: 1di1M7nQ6MNvqMOXuqqBBjoBg/o5lAz3K1kxDGIzBmYA+0ZgcbHLy/PORddAFgdgzDAddaOq12Gp9QCsL4KNeFHc/fxqHc3I21xg27qrmqr11s3hw0jCiMz54zd5Ae6EkdvHYQAwUfzCvQZA+JPkTn4Sr+8VjMM8OvUeW1Wb2y1gFpnHuBAr+OdCSggnyvmUSsRuKe0edx6PFOfegcafzsAEu5YELsX0NwHJyZ99AEjDUpOnucgWjVYDIgizrdygo9S6gviDsHEkigavgM9RlLdb1yKPqyu5Ybr7truOdPV6+h4KxvnGHgtZvsnnnX3JP4G15Hs7OAQTBAoCsHYvR8D6tpmNEDLmTzv0wq4qFOd67emz1HtABnUeCLJWUNly5+hgRt3gYezlQWUZHXmXw6fejAqxfYmx3K6UbY/Zj9gnPQncp5jJ/opjKsrA6TSDvtxW1hfzeglnqC0tjBJT7vlE9r6U0k5Ek/KZ8jcTIkF44jUsSfRp0Xv/1X+qPIKJzoezuQdHxqjtHPR9ObLWEx/cYNvmVy63eZ6LavLW/fjnYpuwYhm2a836A3bOSP4zcVXk4db3CkgimG277iYSow+FPXNfxRUtSftOaLFLSVcCfWZSenNsnElJDbAovguW7RaWui1rHbaN2mrQ2rfCWdAvRGKKcFzWyzTNPrC8yamo5u6ljuWW4an4D9qS9WTscJodPiUpEs3+lN8XORPChcXKbIeDUhz9Mh2esfTESqDffXR2kqM+4tvU1ns6sS2Z7pUQNoDQw1SPY7vdQieJdZQN/KX8d5lcs99bock1TWECCBZIA4Wm4RwA1Ew8A/Nq X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(1800799024)(82310400026)(7416014)(376014)(11006099003)(56012099003)(22082099003)(18002099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YZmkcU75pTgI/mENTm4hdqpAlX/TalBuX3u9XpWnf3ChY3yfjuML8ZDcTgoEbUZUx1k71arh5cY81zGvmy0vI9QgyK/KR7JRbyw1c7fvVNS7t0eG0htgz/f2K24MGQ0CZ0P4o5E3/2LMk4P1GGBuDwrCVlnzrNSXV6nQurESdTNcEppZ0hzynvonV1Px/ZFsvurp6Wiq+81E01zBdvEMZ5ngak28w6xHO7XtMRe3ynMygfspKwgZWN+TiAHoZRPWFFRr27IZ59oAu8fR/oH13+NQz8JpbeuB4pqG92WLIFBKKnEt5kp92BT5Smzg3yr8Peyr06Oi3VK5np1VDw7eXecLYpfrcC//Q0PaRy2dc7Txz8F9XvFJ5hrPoVS1umgDdL9s2lNOv8pYKTUEOV49P01/ktp9ovfLhKDgzMrAkC7k2jTSJ7jfEKsiEME+yyjG X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:31.8418 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7de79a8d-4308-4b1c-ef7a-08dea488d466 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD3.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6680 Received-SPF: permerror client-ip=2a01:111:f403:c000::1; envelope-from=mhonap@nvidia.com; helo=BYAPR05CU005.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777319964411154100 Content-Type: text/plain; charset="utf-8" From: Manish Honap The CXL Component Register BAR contains two types of ranges that need different handling: - Accelerator register windows: passed through as direct hardware mmaps for performance. The kernel reports the real BAR size and lists mmappable windows via VFIO_REGION_INFO_CAP_SPARSE_MMAP, excluding the HDM Decoder Capability block. vfio_region_mmap() creates hardware-backed sub-regions for each sparse area. - HDM Decoder Capability block: guest accesses must go through emulated ops so QEMU can observe and program decoder state. The kernel blocks direct mmap of this range. vfio_bar_register(): after the normal mmap path, overlay the COMP_REGS emulation region at hdm_regs_offset with priority 1. In QEMU's MemoryRegion model, overlapping subregions are resolved by priority; the default is 0. Priority 1 ensures guest accesses to the HDM range always dispatch through the emulated COMP_REGS ops regardless of any hardware-backed sub-region at a neighbouring offset. vfio_pci_bars_exit(): remove the COMP_REGS overlay before the normal BAR teardown path. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- hw/vfio/pci.c | 26 ++++++++++++++++++++++++++ hw/vfio/trace-events | 1 + 2 files changed, 27 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 49ac661eb3..0270de61d2 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -1960,6 +1960,10 @@ static void vfio_bar_register(VFIOPCIDevice *vdev, i= nt nr) return; } =20 + bool cxl_comp_regs_bar =3D (vdev->vbasedev.flags & VFIO_DEVICE_FLAGS_C= XL) && + nr =3D=3D vdev->cxl.hdm_regs_bar_index && + vdev->cxl.comp_regs_region.mem; + bar->mr =3D g_new0(MemoryRegion, 1); name =3D g_strdup_printf("%s base BAR %d", vdev->vbasedev.name, nr); memory_region_init_io(bar->mr, OBJECT(vdev), NULL, NULL, name, bar->si= ze); @@ -1974,6 +1978,21 @@ static void vfio_bar_register(VFIOPCIDevice *vdev, i= nt nr) } } =20 + if (cxl_comp_regs_bar) { + /* + * Overlay the COMP_REGS emulation at hdm_regs_offset with priorit= y 1. + * The kernel excludes the HDM Decoder Capability block from the + * sparse-mmap list, so vfio_region_mmap() creates hardware-backed + * sub-regions only for accelerator register windows. The emulated + * COMP_REGS region sits above those at priority 1, ensuring guest + * accesses to the HDM range always dispatch through the emulated = ops. + */ + memory_region_add_subregion_overlap(bar->mr, vdev->cxl.hdm_regs_of= fset, + vdev->cxl.comp_regs_region.mem= , 1); + trace_vfio_cxl_bar_subregion(vdev->vbasedev.name, nr, + vdev->cxl.hdm_regs_offset); + } + pci_register_bar(pdev, nr, bar->type, bar->mr); } =20 @@ -1993,9 +2012,16 @@ void vfio_pci_bars_exit(VFIOPCIDevice *vdev) =20 for (i =3D 0; i < PCI_ROM_SLOT; i++) { VFIOBAR *bar =3D &vdev->bars[i]; + bool use_comp_regs =3D (vdev->vbasedev.flags & VFIO_DEVICE_FLAGS_C= XL) && + i =3D=3D vdev->cxl.hdm_regs_bar_index && + vdev->cxl.comp_regs_region.mem; =20 vfio_bar_quirk_exit(vdev, i); vfio_region_exit(&bar->region); + if (use_comp_regs && bar->mr) { + memory_region_del_subregion(bar->mr, + vdev->cxl.comp_regs_region.mem); + } if (bar->region.size) { memory_region_del_subregion(bar->mr, bar->region.mem); } diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 3678481a8e..3bced3cebb 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -201,3 +201,4 @@ vfio_device_detach(const char *name, int group_id) " (%= s) group %d" # pci.c CXL Type-2 passthrough vfio_cxl_setup_params(const char *name, uint8_t bar, uint64_t hdm_off, uin= t64_t hdm_sz, uint64_t dpa_sz) " (%s) hdm_bar=3D%u hdm_regs_offset=3D0x%"PR= Ix64" hdm_regs_size=3D0x%"PRIx64" dpa_size=3D0x%"PRIx64 vfio_cxl_put_device(const char *name) " (%s) removing DPA region from syst= em memory" +vfio_cxl_bar_subregion(const char *name, int nr, uint64_t off) " (%s) BAR%= d comp_regs overlay at BAR offset 0x%"PRIx64 --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320034; cv=pass; d=zohomail.com; s=zohoarc; b=SXjPiPogKWmI76uGiVAg5Rumol7DVWsayghIb2GSLLzlvKZ/vaVhiZOI3yrC3PwzMjlxVmrviaHaH6MqOuzZTBuPHdTBNPIVSckJxGh2njtlK/HB6fRK5lJxsgwuZlFJL6roF2Pszy1wcs7tBht20Wuqh+qgGX42WypNaxdsiBo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320034; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YbfMC/amRJsGvbjWK9+uOWFMnjrdJBePyasFxsn0gI0=; b=jXwbLU8Y06W5L78whFIk99NH9bRLLECbUS8VnoY5e+lhItoEinR9KQ4E1d9azPmZ5wNFo+rBW3l/P/yS7z/BxsIcxmmSHvc/Rz4yMzfTwQOaSrh37ypDtaJJ+dbJHUj6T4ELlbFh3q6bGXAxebSaX5E+hB1GFApRTntXNlRSGF4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320034020997.2495319113655; Mon, 27 Apr 2026 13:00:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5U-00038M-PD; Mon, 27 Apr 2026 15:57:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTx-00036f-9L; Mon, 27 Apr 2026 14:15:05 -0400 Received: from mail-westusazlp170120002.outbound.protection.outlook.com ([2a01:111:f403:c001::2] helo=SJ2PR03CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQTs-0000Hy-Qn; Mon, 27 Apr 2026 14:14:55 -0400 Received: from PH7PR10CA0019.namprd10.prod.outlook.com (2603:10b6:510:23d::27) by MN0PR12MB5785.namprd12.prod.outlook.com (2603:10b6:208:374::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.16; Mon, 27 Apr 2026 18:14:40 +0000 Received: from CY4PEPF0000EDD3.namprd03.prod.outlook.com (2603:10b6:510:23d:cafe::bd) by PH7PR10CA0019.outlook.office365.com (2603:10b6:510:23d::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:40 +0000 Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000EDD3.mail.protection.outlook.com (10.167.241.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:40 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:16 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TJBsT6F89+KqCibCrbB32gHfxMrnPy/zoFXQgJpS3i/70IUl9UN6M0PIKh/32KAMBc90V62dtb3ToU5rne8Ni107CLRQNHS1XcTpvmmJlB19owIn3MlDEdt7tt0ABZ5SmFNIIyIAufdJy/4bVwpgEBZIwFFhl2FxeGndOlmnjN9ujnPw/WLcE+ECH0XZnjkxdsMqNKhH/zV8yWCeGktVTlVPkXM3NPQAzgWjD0TsH65k+fFYHOVjXFhkfJAZ6HwoTVjLjbdkhOWSAbtOl9b2TbHb/g3ErTuCd2NqrYp7/+XvgSSTTM5vAAbaSyt/Au79dtdtAqbpE8WvyVZKPmaT2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YbfMC/amRJsGvbjWK9+uOWFMnjrdJBePyasFxsn0gI0=; b=JHF20nA9iCS0gnCbOQ1D8xm6TBA2C6Wn1TTSjuU89CLzjnfQMWfiAQaf2hAzQ+1FRbtPv2jfpKgDfymF43Wyc3LiHT00f61rsbqOQ3pubeM663f7W4AyDHrJfQnNOdBc9lMI3GJyhrggkZVuo8s3Vl1FvEHQQZHTDBVd4nkpuQJPDvpWwqK0tF+qtD92kmZu1S8qdPZW2Wq3+ZGBH1XW2w6DYJbT3e9w6LHPvCWsdfUqeRf6fCS+G+v4AdQ4wSFSkdSIMFJQtfc8LeGY+EhodqKrLN/VcbKe1c4WmJe1u6JbalQwh95jn3CjePsk3q/Vw25bTG8aMMxwcs6+fyOghQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YbfMC/amRJsGvbjWK9+uOWFMnjrdJBePyasFxsn0gI0=; b=XNQU+xRe/3giSzLGsNvW9w1giLs3M84WhMmYEbQq129s/PMr3B6AsyvzIgk5gJCU/3sDlOt0pP+VHqT3GHfenB16e7KNS0hHtXz341t7AdSjZbeJTuncimvhMMPsEXXF0XJRppO4KvQE4mv3zoRydX+wbNwgxvIiu3TwRqppALaVl4CAVgG3G+qEV7mdVYXPi9jVfPyfMCFPoq+Dvi1EhkmQ82P6nnocWlzMEkLxMI3JZPfL+qD16OuabpuN26IuSgTTYINN1TEq8mZw1pV+uY3gPPZYKqeiS65fOPTXJ/CgIAlWIDYrg+29stGXSzbkd061qtKr2eZvpiFRKUKMfg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 7/9] hw/vfio+cxl: Program HDM decoder 0 at machine_done for firmware-committed devices Date: Mon, 27 Apr 2026 23:42:33 +0530 Message-ID: <20260427181235.3003865-8-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD3:EE_|MN0PR12MB5785:EE_ X-MS-Office365-Filtering-Correlation-Id: 44d258bb-7378-4c58-20d3-08dea488d972 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|1800799024|376014|7416014|56012099003|18002099003|22082099003|921020; X-Microsoft-Antispam-Message-Info: qtkB/ofjo91XNMEgtFYSmb+IzOWB6cnczaPgpYELVLx+HOcztu3AFyUbA65Z4bU7Ec47SICZ1uVAtpjHuzSgUmyIGuR84tBZzGHmWVezbB5x5IF8gQtWcATtjCpMylyUI5tkF8q4mlZZeXWxg3jk/G/TEizBiUPJ4AwaIENG+aEH7VA7bDc8xvj1ppKwLDAf23L/FNBjicThLfgbwzt9CVwtoPztCKpFCPejCAdTotqxeXMGZlQfrjYgwUT+HT6Q7DES5Eli7qAV7euZ8dZLxOokjQzABA8eSVgDanmFgQaVdP4C5FRkeKgTmUNT0s70OCwDcnA/4AA3+6ZK/nhg5x14T1PCkTXTxX9Mk2/u+YH6kMXfNBC8QPF4z/lOVfCELIdTw6VNx3sU3H0B3dHrWMNB1BmeMJIjZIdDLBwebBGIcB/StagpI6mKAv+4mCRQBCc6iCbtqcbh61Dont32386gLF7XxtPQEmle603gqUkMQXZ7uLQ9t2M3QfSRV9TIdUg5HczW4aaLQzPwWjQdXGYJ7Qc10CK+sVR/vYa2pJW3+Xx2bFk8bkoO0RUxB7Rkh+nVCeDle5dNAL3pyqXhZWlNXSTEbvKR3Ip9PmdMlr/29jHusDMKDW6QBXJuQsEAi37mmJrkxuxMBWyrqfYaO4cBZCzOn/0RZE38ZjX3zgeU+cxYXJCVuIiJgKYnvHyffN8oehTD0I2eOlkyhn9Dq55XISMQNpx2joucwvrY7ASVzvC39QDgJHwdjteIr6/7qzLNbn0wO3qPNz/nwFgefxyBtxnIejF3oyP9whxscrFVjdWThoYweeCbQHGR5sKe X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(1800799024)(376014)(7416014)(56012099003)(18002099003)(22082099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XNB0Pze+VV0f5q1Ysyg02DeTCC/CsyQomWCLlFCDWHNBpm/gpBqjLa2PONhR0LGmcoAB9lGLQnZqHx6z4RLGEGMlGpTtuWg0UIZgPY4RVS1fwIuVmv33M/UCOAEQXUCEoz897ckLvRAPgng3tWuT7fuyP9Ah9B8vHG3dEsuptX7/3ddi8oijSq72aHIiLRC15SjdHVQgA/6vxJ5vIdjT9KVBCcy7XzCutQVIa6iXo9KfftCAUIDO0vNSKsbujUu00SLAQGo+3qmTqS7f7WtCiN/mMHTG8D4fFNViMF/3REw23eKb3w9RUUn6x7zg0P6Un2OwgnsDsrlt7h7z3xbK8euZQSre3qb+YabujnU9D4QzdCCyjyZ8NLA/CLzy6KIRNnk5ePktR7Wcmv9RiCPWgsWgf8lSaYqcT5ZFH1YpZvBRAOxPJVMA0i4ya06b+euj X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:40.2316 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 44d258bb-7378-4c58-20d3-08dea488d972 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD3.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5785 Received-SPF: permerror client-ip=2a01:111:f403:c001::2; envelope-from=mhonap@nvidia.com; helo=SJ2PR03CU001.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320035684154100 Content-Type: text/plain; charset="utf-8" From: Manish Honap setup_locked_hdm() runs as a machine_done notifier after all devices have been realized. It programs HDM decoder 0 with the CFMWS base address so the guest can fault into device memory from the first instruction. The notifier is only registered when the kernel reports the device as firmware-committed (VFIO_CXL_CAP_FIRMWARE_COMMITTED). The host is responsible for HDM decoder programming; the guest has no mechanism to remap host physical address mappings. The function uses cxl->fmws_base (set by the optional cxl-fmws-base device property) if non-zero; otherwise it falls back to the cxl_fmws_base global captured by cxl_fmws_set_memmap() during machine memory-map init. If neither is set, it warns and returns without programming anything. If COMMIT_LOCK is set in decoder 0 CTRL at machine_done time (left-over from a prior FLR?), it is cleared before writing BASE so the subsequent write is not blocked. COMMIT_LOCK is re-set after programming so the hardware enforces the committed base. read_region() return is checked; failure aborts programming rather than leaving ctrl uninitialized. All write_region() failures are propagated. The function exits cleanly rather than leaving the decoder half-programmed. Add cxl_fmws_base as a hwaddr global in cxl-host.c (and a stub in cxl-host-stubs.c). It is set once by cxl_fmws_set_memmap() and read later at machine_done time. Signed-off-by: Zhi Wang Signed-off-by: Manish Honap --- hw/cxl/cxl-host-stubs.c | 2 + hw/cxl/cxl-host.c | 8 ++ hw/vfio/pci.c | 176 +++++++++++++++++++++++++++++++++++++- hw/vfio/pci.h | 1 + hw/vfio/trace-events | 1 + include/hw/cxl/cxl_host.h | 10 +++ 6 files changed, 196 insertions(+), 2 deletions(-) diff --git a/hw/cxl/cxl-host-stubs.c b/hw/cxl/cxl-host-stubs.c index c015baac81..0294d484c0 100644 --- a/hw/cxl/cxl-host-stubs.c +++ b/hw/cxl/cxl-host-stubs.c @@ -17,4 +17,6 @@ hwaddr cxl_fmws_set_memmap(hwaddr base, hwaddr max_addr) }; void cxl_fmws_update_mmio(void) {}; =20 +hwaddr cxl_fmws_base; + const MemoryRegionOps cfmws_ops; diff --git a/hw/cxl/cxl-host.c b/hw/cxl/cxl-host.c index a94b893e99..f7e933f452 100644 --- a/hw/cxl/cxl-host.c +++ b/hw/cxl/cxl-host.c @@ -429,11 +429,19 @@ void cxl_fmws_update_mmio(void) object_child_foreach_recursive(object_get_root(), cxl_fmws_mmio_map, N= ULL); } =20 +/* + * GPA base of the first CXL Fixed Memory Window region placed in the memo= ry + * map by cxl_fmws_set_memmap(). Set once at machine memory-map init time. + */ +hwaddr cxl_fmws_base; + hwaddr cxl_fmws_set_memmap(hwaddr base, hwaddr max_addr) { GSList *cfmws_list, *iter; CXLFixedWindow *fw; =20 + cxl_fmws_base =3D base; + cfmws_list =3D cxl_fmws_get_all_sorted(); for (iter =3D cfmws_list; iter; iter =3D iter->next) { fw =3D CXL_FMW(iter->data); diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 0270de61d2..2595229ea5 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -25,6 +25,7 @@ #include "hw/core/hw-error.h" #include "hw/core/iommu.h" #include "hw/cxl/cxl_component.h" +#include "hw/cxl/cxl_host.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/pci/pci_bridge.h" @@ -3016,6 +3017,90 @@ static VFIODeviceOps vfio_pci_ops =3D { /* HDM Decoder BASE_LO: bits [31:28] hold address bits [31:28] */ #define CXL_HDM_BASE_LO_ADDR_MASK 0xF0000000U =20 +static bool read_region(VFIORegion *region, uint32_t *val, uint64_t offset) +{ + VFIODevice *vbasedev =3D region->vbasedev; + uint32_t le_val; + + if (pread(vbasedev->fd, &le_val, sizeof(le_val), + region->fd_offset + offset) !=3D sizeof(le_val)) { + error_report("vfio-cxl: pread %s offset 0x%"PRIx64" failed: %m", + vbasedev->name, offset); + return false; + } + /* CXL registers are little-endian; convert to host byte order. */ + *val =3D le32_to_cpu(le_val); + return true; +} + +static bool write_region(VFIORegion *region, uint32_t *val, uint64_t offse= t) +{ + VFIODevice *vbasedev =3D region->vbasedev; + /* CXL registers are little-endian; convert from host byte order. */ + uint32_t le_val =3D cpu_to_le32(*val); + + if (pwrite(vbasedev->fd, &le_val, sizeof(le_val), + region->fd_offset + offset) !=3D sizeof(le_val)) { + error_report("vfio-cxl: pwrite %s offset 0x%"PRIx64" failed: %m", + vbasedev->name, offset); + return false; + } + return true; +} + +/* + * Direct pread/pwrite MemoryRegionOps for the CXL Component Register shad= ow. + * + * The generic vfio_region_ops routes guest MMIO through + * vfio_device_io_region_read() which returns EINVAL for vendor region + * index 10 at runtime. The same pread() issued directly via + * region->fd_offset works fine, as vfio_cxl_derive_hdm_info() already doe= s. + * + * The kernel enforces 4-byte aligned, 4-byte accesses on this region; + * valid and impl min/max_access_size are both set to 4 to match. + */ +static uint64_t vfio_cxl_comp_regs_mr_read(void *opaque, hwaddr addr, + unsigned size) +{ + VFIORegion *region =3D opaque; + VFIODevice *vbasedev =3D region->vbasedev; + uint32_t val =3D 0xFFFFFFFFU; + + if (pread(vbasedev->fd, &val, size, + region->fd_offset + addr) !=3D size) { + error_report("vfio-cxl: %s COMP_REGS read at 0x%"HWADDR_PRIx + " failed: %m", vbasedev->name, addr); + } + + val =3D le32_to_cpu(val); + trace_vfio_region_read(vbasedev->name, region->nr, addr, size, val); + return val; +} + +static void vfio_cxl_comp_regs_mr_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) +{ + VFIORegion *region =3D opaque; + VFIODevice *vbasedev =3D region->vbasedev; + uint32_t val =3D cpu_to_le32((uint32_t)data); + + if (pwrite(vbasedev->fd, &val, size, + region->fd_offset + addr) !=3D size) { + error_report("vfio-cxl: %s COMP_REGS write at 0x%"HWADDR_PRIx + " failed: %m", vbasedev->name, addr); + } + + trace_vfio_region_write(vbasedev->name, region->nr, addr, data, size); +} + +static const MemoryRegionOps vfio_cxl_comp_regs_mr_ops =3D { + .read =3D vfio_cxl_comp_regs_mr_read, + .write =3D vfio_cxl_comp_regs_mr_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { .min_access_size =3D 4, .max_access_size =3D 4 }, + .impl =3D { .min_access_size =3D 4, .max_access_size =3D 4 }, +}; + bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev =3D &vdev->vbasedev; @@ -3404,6 +3489,78 @@ static bool vfio_cxl_derive_hdm_info(VFIODevice *vba= sedev, VFIOCXL *cxl, return false; } =20 +/* + * setup_locked_hdm - machine_done notifier that programs HDM decoder 0 wi= th + * the FMWS base address so the guest can access DPA through a stable GPA. + * + * Uses cxl->fmws_base (set by the optional cxl-fmws-base device property)= if + * non-zero; otherwise falls back to the cxl_fmws_base global captured by + * cxl_fmws_set_memmap() during machine memory-map init. If neither is se= t, + * the notifier warns and returns without programming anything. + */ +static void setup_locked_hdm(Notifier *notifier, void *data) +{ + VFIOCXL *cxl =3D container_of(notifier, VFIOCXL, machine_done); + VFIORegion *region =3D &cxl->comp_regs_region; + MemoryRegion *sys_mem =3D get_system_memory(); + uint64_t hdm_base =3D cxl->hdm_decoder_offset; + uint32_t base_lo, base_hi, ctrl; + + if (!cxl->fmws_base) { + cxl->fmws_base =3D cxl_fmws_base; + if (!cxl->fmws_base) { + warn_report("vfio-cxl %s: CXL FMWS base not available", + region->vbasedev->name); + return; + } + } + + if (!read_region(region, &ctrl, + hdm_base + CXL_HDM_DECODER0_CTRL_OFFSET(0))) { + error_report("vfio-cxl: %s failed to read HDM decoder 0 CTRL", + region->vbasedev->name); + return; + } + + /* + * If COMMIT_LOCK (bit 8) is still set in the virtual snapshot the ker= nel + * should have cleared it during open. Warn and clear it here so the + * subsequent BASE write is not blocked. + */ + if (ctrl & CXL_HDM_CTRL_COMMIT_LOCK) { + warn_report("vfio-cxl: COMMIT_LOCK set in HDM decoder 0 CTRL at " + "machine_done; clearing before programming guest GPA"); + ctrl &=3D ~CXL_HDM_CTRL_COMMIT_LOCK; + if (!write_region(region, &ctrl, + hdm_base + CXL_HDM_DECODER0_CTRL_OFFSET(0))) { + return; + } + } + + base_lo =3D (uint32_t)(cxl->fmws_base & CXL_HDM_BASE_LO_ADDR_MASK); + base_hi =3D (uint32_t)(cxl->fmws_base >> 32); + ctrl |=3D CXL_HDM_CTRL_COMMIT | CXL_HDM_CTRL_COMMIT_LOCK; + + if (!write_region(region, &base_lo, hdm_base + + CXL_HDM_DECODER0_BASE_LOW_OFFSET(0)) || + !write_region(region, &base_hi, hdm_base + + CXL_HDM_DECODER0_BASE_HIGH_OFFSET(0)) || + !write_region(region, &ctrl, hdm_base + + CXL_HDM_DECODER0_CTRL_OFFSET(0))) { + error_report("vfio-cxl: %s failed to program HDM decoder 0", + region->vbasedev->name); + return; + } + + trace_vfio_cxl_locked_hdm(/* name */ region->vbasedev->name, + cxl->fmws_base, base_lo, base_hi, ctrl); + + memory_region_transaction_begin(); + memory_region_add_subregion(sys_mem, cxl->fmws_base, cxl->region.mem); + memory_region_transaction_commit(); + cxl->dpa_in_system_mem =3D true; +} + static bool vfio_cxl_setup(VFIOPCIDevice *vdev, Error **errp) { VFIODevice *vbasedev =3D &vdev->vbasedev; @@ -3471,8 +3628,11 @@ static bool vfio_cxl_setup(VFIOPCIDevice *vdev, Erro= r **errp) error_setg(errp, "vfio-cxl: failed to get COMP_REGS region info"); return false; } - ret =3D vfio_region_setup(OBJECT(vdev), vbasedev, &cxl->comp_regs_regi= on, - comp_info->index, "cxl-comp-regs", errp); + + ret =3D vfio_region_setup_with_ops(OBJECT(vdev), vbasedev, + &cxl->comp_regs_region, + comp_info->index, "cxl-comp-regs", + errp, &vfio_cxl_comp_regs_mr_ops); if (ret) { error_setg(errp, "vfio-cxl: failed to set up COMP_REGS region"); return false; @@ -3486,6 +3646,18 @@ static bool vfio_cxl_setup(VFIOPCIDevice *vdev, Erro= r **errp) trace_vfio_cxl_setup_params(vbasedev->name, cxl->hdm_regs_bar_index, cxl->hdm_regs_offset, cxl->hdm_regs_size, cxl->dpa_size); + + /* + * Only pre-program the HDM decoder if the kernel reported the device = as + * firmware-committed. Non-committed devices need guest driver involv= ement + * to commit the decoder; registering the notifier for them would writ= e an + * uncommitted BASE value that the hardware ignores. + */ + if (cap->flags & VFIO_CXL_CAP_FIRMWARE_COMMITTED) { + cxl->machine_done.notify =3D setup_locked_hdm; + qemu_add_machine_init_done_notifier(&cxl->machine_done); + } + return true; } =20 diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index f3906f0c53..5667c6ec17 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -133,6 +133,7 @@ typedef struct VFIOCXL { bool dpa_in_system_mem; VFIORegion region; VFIORegion comp_regs_region; + Notifier machine_done; } VFIOCXL; =20 struct VFIOPCIDevice { diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 3bced3cebb..174e577837 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -202,3 +202,4 @@ vfio_device_detach(const char *name, int group_id) " (%= s) group %d" vfio_cxl_setup_params(const char *name, uint8_t bar, uint64_t hdm_off, uin= t64_t hdm_sz, uint64_t dpa_sz) " (%s) hdm_bar=3D%u hdm_regs_offset=3D0x%"PR= Ix64" hdm_regs_size=3D0x%"PRIx64" dpa_size=3D0x%"PRIx64 vfio_cxl_put_device(const char *name) " (%s) removing DPA region from syst= em memory" vfio_cxl_bar_subregion(const char *name, int nr, uint64_t off) " (%s) BAR%= d comp_regs overlay at BAR offset 0x%"PRIx64 +vfio_cxl_locked_hdm(const char *name, uint64_t fmws, uint32_t blo, uint32_= t bhi, uint32_t ctrl) " (%s) fmws_base=3D0x%"PRIx64" wrote decoder0 base_lo= =3D0x%08x base_hi=3D0x%08x ctrl=3D0x%08x" diff --git a/include/hw/cxl/cxl_host.h b/include/hw/cxl/cxl_host.h index 21619bb748..f890a5c0b9 100644 --- a/include/hw/cxl/cxl_host.h +++ b/include/hw/cxl/cxl_host.h @@ -20,6 +20,16 @@ hwaddr cxl_fmws_set_memmap(hwaddr base, hwaddr max_addr); void cxl_fmws_update_mmio(void); GSList *cxl_fmws_get_all_sorted(void); =20 +/** + * cxl_fmws_base - GPA base of the first CXL Fixed Memory Window region. + * + * Set by cxl_fmws_set_memmap() to the base address it receives (typically + * ROUND_UP(highest_gpa + 1, 256 MiB) on ARM virt). Valid after the + * machine memory-map init callback returns, i.e. at machine_done time. + * Zero when no machine has called cxl_fmws_set_memmap() (stub builds). + */ +extern hwaddr cxl_fmws_base; + extern const MemoryRegionOps cfmws_ops; =20 #endif --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777320092; cv=pass; d=zohomail.com; s=zohoarc; b=O109rsKMFmtD2DEHFaCG8rx8eBWlKUL3WeydBiUeh3PDWsm85wZcEj1zNU1iaNqKfBLsJn7uG7Zcbbq6kF5OGTiV0kZdqJ5xgkL2+IsAzVbkAIZxCPGQobvqVG+o1xQVqnayRCIV9vbvWonMFsF4F5I7+E5LTBRAKmWfLSA8pqc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777320092; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Anam5tdNgehzH5xKma/xc3k4D0B0r/APBocD6aQy0rg=; b=V0gGNMRCM9JiqT5PWfLzWAnYnSzxGFP0oHd/K7xqluG944/XVSGn+i5cU2jifO58PyXKasqSSJJ++zR7bXGZ5iWiIYc30mTw5kC4BCAnnwuvsVZC08x+P4I988GYgWWJebYkelxV9hMWvUp+YoxX+60z2YswGwHFjHedVW8RVCE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777320092446826.9156101849593; Mon, 27 Apr 2026 13:01:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5V-000392-K5; Mon, 27 Apr 2026 15:57:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQU8-0003Aw-UZ; Mon, 27 Apr 2026 14:15:18 -0400 Received: from mail-westcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c112::7] helo=CY3PR05CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQU6-0000Ji-6m; Mon, 27 Apr 2026 14:15:07 -0400 Received: from BL1PR13CA0014.namprd13.prod.outlook.com (2603:10b6:208:256::19) by DM6PR12MB4041.namprd12.prod.outlook.com (2603:10b6:5:210::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.16; Mon, 27 Apr 2026 18:14:50 +0000 Received: from BL02EPF0001A0FC.namprd03.prod.outlook.com (2603:10b6:208:256:cafe::e9) by BL1PR13CA0014.outlook.office365.com (2603:10b6:208:256::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:49 +0000 Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0001A0FC.mail.protection.outlook.com (10.167.242.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:49 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:25 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:17 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=haV+/KDRjSy3IcUYrbMeSdZMFbUJJ6bS5fJaWte56miZpHBBXqN3Dr/60LDKlWwVoAXp1kvo80MRL1iW6Jc4EaAkln02gwz4QPDKcK0RZo26Uz1eGOdJUsZI8OT3SDwQwyuZNWIm4dD6v+cK3rXZU6ZVqK3aFQH6tA9lbLmgXSTFp+Iklhrn1K0mueAgvKz7ZkyddEzYierTtbxAL6TksEayLoN0REfoWz13e8nKcLRkLh9y/Od6foIIUEHN9I+5LM3LcJGaVsf/wX6fRZblNbwpWn04Al0j/ZCxFSZKY1iR+XBNtqyl2uNFL/fbDFzeU9pPflBAOL6Rugpk7FAcyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Anam5tdNgehzH5xKma/xc3k4D0B0r/APBocD6aQy0rg=; b=JsDz3UQi6RwC88LsEe4lB9HLE7Z0c7g0w81DbvCgCB3Mm84VuiwWOJsa68Ddg2gEnEQcgtnadqT9N1cuFSI2QIB6FrmOymfozHD2VJN5NglJYqpwYbB1s1TZjUUz0LIfaIgQyVXa6qGkJlZilFVTE6fvEq4Ue6cqpkVP/bWIgLKMWm/j9r/MevbSGjapVC0GbXkidwRt1Lh5e4TQC2I8BxzU1FYJ/vXHe9S61DnswkQecDufnZZD/fudO7QjHApshGPp2pHusJ/EzDn83AeZqcltL/tuwvrXc1Rk60QDbfN8X249WDVT3N5UHFYSWfp+9OISbQfDS4jvQXlNri5uFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Anam5tdNgehzH5xKma/xc3k4D0B0r/APBocD6aQy0rg=; b=Cd/XjHzZXOZuYHCWJ2TVtl/92DrORSJixpYXck2v+QlGW/5pNFIplYyG9dmXEJx+kUNdO5qKJBVTGynMQWeORTZeAJizcuZ759yfwjzQ5Z67R4sUH9Xeg34voPDJsRpuN9Yj4nuxyhU2IIq5fBYoShJ8cM8VUx4GaX8l0Z3UGTKkteotIm73jsSgGngaihgyj3XVjHfRx+1iikFq4qXrzxc4oTiMZdgCa/0I5hcG4WG9Afiu5YyfBvr8hoWcEg3DjVnR9UjqxNORRTkJVdSETplo5mzd3QvOB4PdHn5llWJXD4V/xM8FVY6g2MVjwpE8oH/tXOEl8Bthxt/SSI82cw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 8/9] hw/arm/smmu-common: Allow pxb-cxl as SMMUv3 primary bus Date: Mon, 27 Apr 2026 23:42:34 +0530 Message-ID: <20260427181235.3003865-9-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FC:EE_|DM6PR12MB4041:EE_ X-MS-Office365-Filtering-Correlation-Id: c8aa36e9-57e5-4663-6885-08dea488df16 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|82310400026|36860700016|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: A+PgMTlVfr0JqiZxRdAcyq2HQsNV2E+Av7sBmviJamNDoC4vIQhu2Qe2yNnrohAXYrUOokCM5/v24PUHvgsQs/z5NYvQqIKcn+Nswc9yUKmjnvNzgECRCsj+kx2K4vobQZAA/oDWzlEoQ9WYf+mLLfMgpfo/nhzRPw5cs3Q4ZwFJouKYSCd7AkFkZNR3iA7urFl1L2RRYuzQ6f0fj+daObiiQTomdMD685iuHil+HwFKNNu4RQQVBLyPo9fhb9tyBsBVJ+X+G3DkYRKc09CHcB2VzRgGSutLuQeYu1jCQ1yUhwddpa9eVZIU1mdQYzXaeoIWuWrdHFwT0kQzc5HnwcgJf3zOy5rgn8Y5xnqfjVsUai2mKUI92PvwzlRZz/EHisFsI1LduqP/2dnfnBaHL9LUcjrv3ozksalo9N33zFQK+yLB4T6e9F3naUzCKNOdHOLOdBpGcCjAeQHAXPHd7+J13uhpJkAlo7+Hb5O0h/fLMHc3/vXJo89CfW6elqRCUfCM5u+UcLjt2csX/7b090XJQoZTgLnfx42M99btxBl7clxHhBzXwehD7Zb4liOQ2+52CWjPRAgmTIr7mdM3genqKkFP5vNtwJH/6587+WdiFXZ51VeSkCGIR8BbRQdJPe+D7OB8lKLis7KmIUibeDoClyPLxEdl0TSttHdCMGus+LoLWA5+SF/T+mXffdQ90z+YIMqjdwouMaTPNEOB3sKQpKjoUXVIPa+dg9njxrGU/UyR5RmUguIp2DcJZ82/C8O31nicDGEyfquY0mjnZ/ZF7/E8T9CKeJyBETFb5ekKtE1xAeAIbndrT+Cc7VSg X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(82310400026)(36860700016)(921020)(56012099003)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /ZjmGiA/lXKWndNkD2yNgYekGH1Yfctloq3Jrm/QyWSWBGe9KjJsbDDULFvAf+9cG0jG9W4qpdhwLL/GG7iw+foQbvLpOHvps4tP0Sfz6Q2vEIyQ86Egr6Pu/SIVeckBfA09iYrtqBLaOLfsqLqJWli/hn8OQE++N6JOK6e378VoHIo/fiCrzNHy8m2PYmZP3LxxH68mxCIIYlhMHev8ksrO6MIL+ccjpYWj853Pl3GjOStCRc/sfFvdR7aHF0/9jrV+iS0dEASxfkCi6a3HrlCcTvuLWF8VW/6+za8/qFqBOu/g9uKy7prNsGfGCtjjUBC15vmSg4kkBDNJE5OrcNApfmt4cvjBMPP7TBsU/epVLXpBss+YKlanYVBBii3S0NE0bf+yx3eSMxml8or7Ur14+2NkVxjlrIzD1BCPkaOzkOLsF3VKSSBXX8bYGKEt X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:49.6680 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c8aa36e9-57e5-4663-6885-08dea488df16 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4041 Received-SPF: permerror client-ip=2a01:111:f403:c112::7; envelope-from=mhonap@nvidia.com; helo=CY3PR05CU001.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777320095212158500 Content-Type: text/plain; charset="utf-8" From: Manish Honap The SMMUv3 primary bus check only accepted pxb-pcie as a valid root. pxb-cxl uses the same PCIe-compatible bus implementation; reject it and CXL devices behind it cannot reach the IOMMU. Extend the check to also accept CXL buses so SMMUv3 translation applies to passthrough CXL devices. Update the comment above the check to mention pxb-cxl alongside pxb-pcie. Signed-off-by: Shameer Kolothum Signed-off-by: Manish Honap --- hw/arm/smmu-common.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index 58c4452b1f..eb52ea1976 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -963,19 +963,18 @@ static void smmu_base_realize(DeviceState *dev, Error= **errp) s->iommu_ops =3D &smmu_ops; } /* - * We only allow default PCIe Root Complex(pcie.0) or pxb-pcie based e= xtra - * root complexes to be associated with SMMU. + * We only allow the default PCIe root complex (pcie.0) or pxb-pcie / + * pxb-cxl based extra root complexes to be associated with SMMU. */ if (pci_bus_is_express(pci_bus) && pci_bus_is_root(pci_bus) && object_dynamic_cast(OBJECT(pci_bus)->parent, TYPE_PCI_HOST_BRIDGE)= ) { /* - * This condition matches either the default pcie.0, pxb-pcie, or - * pxb-cxl. For both pxb-pcie and pxb-cxl, parent_dev will be set. - * Currently, we don't allow pxb-cxl as it requires further - * verification. Therefore, make sure this is indeed pxb-pcie. + * pcie.0 has no parent_dev; pxb-pcie and pxb-cxl do. Accept both + * bus types explicitly so other root complexes are still rejected. */ if (pci_bus->parent_dev) { - if (!object_dynamic_cast(OBJECT(pci_bus), TYPE_PXB_PCIE_BUS)) { + if (!object_dynamic_cast(OBJECT(pci_bus), TYPE_PXB_PCIE_BUS) && + !object_dynamic_cast(OBJECT(pci_bus), TYPE_PXB_CXL_BUS)) { goto out_err; } } @@ -988,8 +987,8 @@ static void smmu_base_realize(DeviceState *dev, Error *= *errp) return; } out_err: - error_setg(errp, "SMMU should be attached to a default PCIe root compl= ex" - "(pcie.0) or a pxb-pcie based root complex"); + error_setg(errp, "SMMU should be attached to a default PCIe root compl= ex " + "(pcie.0), a pxb-pcie, or a pxb-cxl based root complex"); } =20 /* --=20 2.25.1 From nobody Mon May 25 13:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1777319876; cv=pass; d=zohomail.com; s=zohoarc; b=EvNG3p9U1O1dHC5ylEp5Ee6BIzRA1ODmMjzqrwartNs4wy3obyNWHX+3UwKjXjAY3urrdmb2qDjvcsTZYcCxJwQzaQEaN2OvDb1oHcnr9IGljM5zINKIZ+1314ufrTIPw4YtU39jMHxBbV+eK7Blso+nEUBAhEqvK7Ol046BTT4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777319876; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zSkxixl6ty0mR2L2DuoSTBnD7O+GqEJhhqrxwvTBwvk=; b=eGftBFsQmYudFB748sw/TugiY52jS68wYbFm9/BYO1M1hrwEj1bhshnEeBTshBMf6+EiyGCg1b8AR0YT4IPa4Kgb/8Ko8Cg/e3CS/7ziycrmEGnXc7Kr0Tlbz9jWkpKnMFBt4HZyPwWIy5N9LBcUcBbquuGGViQg1scBc3MpdCM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777319876094258.9811043100027; Mon, 27 Apr 2026 12:57:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wHS5O-00035s-Tr; Mon, 27 Apr 2026 15:57:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQU7-0003Ao-7U; Mon, 27 Apr 2026 14:15:11 -0400 Received: from mail-southcentralusazlp170130001.outbound.protection.outlook.com ([2a01:111:f403:c10c::1] helo=SA9PR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wHQU5-0000NV-LK; Mon, 27 Apr 2026 14:15:06 -0400 Received: from PH8P220CA0033.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:348::11) by BL3PR12MB6522.namprd12.prod.outlook.com (2603:10b6:208:3be::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.16; Mon, 27 Apr 2026 18:14:55 +0000 Received: from CY4PEPF0000EDD0.namprd03.prod.outlook.com (2603:10b6:510:348:cafe::96) by PH8P220CA0033.outlook.office365.com (2603:10b6:510:348::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 18:14:55 +0000 Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000EDD0.mail.protection.outlook.com (10.167.241.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Mon, 27 Apr 2026 18:14:54 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:33 -0700 Received: from nvidia-4028GR-scsim.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 27 Apr 2026 11:14:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wxCmETYSDWy6SgsnCtRuPHfpBtVVIIvYAqRKwSCRdh3Fnxcf4kS+KkMAcgONZo61zZ+SyMGD/u8VZnkBRvn27+B5zjl7RLL4invXop+zpwlO2GrtiMhdHOHyw29/yFYSSf7kDvXLYYSG2Bje123Ge6JIxoIbCI/Nl2qeQWwwZDLl/DwkhiqVuRc3BEmAoZ2CFWQ+//KUCuPv9NbNabII+gM7KDGL+xmHphOb7G68n+hNZWv5xAkbqaPilfLwnLrXLgP1V7a3SjpEUwcVkokUapVNNCLjHLmQB9VeueX4fxgR+qno1NIRWjrSMjIMVo4Db8XsKf82bmcL6rjsbGPgxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zSkxixl6ty0mR2L2DuoSTBnD7O+GqEJhhqrxwvTBwvk=; b=Gquzuhr/uHM2ct8BsEtlG0Ycab+VrWv30UIu7fYtuMIOBDBpcM2Bsvd9SagDp4mw3b6d06o1SwMXYXkq7kBNRewh/6zUm+rjsPbCaweDa/NWLjOlVRGPxeAXQzbVoVplAo4DMjlrY4mnlwoQ+6HMmKWyCMs4l89E7iJiEV9WS1Ch1e1+Sj7/40oNxyP0JOCJ5/DmwoShA5emed/ld70tRrWRKdBHONLPdZeh4SlwP11ZF2iUQgxF3Zq/y62S7NZjHmNfpE7liDMXfBOPiZU7ZgDxjvOFf0EoAWVb/GA9VAjZBAPJa6yvw2zcbSlDcne8+1mv9Ka7AuqGZwjfYC/4Qw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zSkxixl6ty0mR2L2DuoSTBnD7O+GqEJhhqrxwvTBwvk=; b=RNK4V1H2E3t0I55AmTtYouGOzKINiMNWMUiivgVG8VMOiPZJuXhQZ/T1tcniMYIzKFJwGNH3E/VSVErR8Q5reG85zDF2khPxUIBkv5CIhmxaEF4pW6Skaj6GfrEEBHOy6c6Jm9ALlVS1FOb6gFDzVEKxgJ8mmFDwzsj+esgRyGYf9fWEsucERRn/kUGnvsBr8BrAflxh104JXk7AcOcqtZR4EYT+8rwwKVtzJVkveg0g/qkNyKPCKflYXjUPxsvFU3TYpugdWnSmN08XIpGaMAOsG8+sfZUQdSxnZpR70wMsT1yYYD+rg3IQ5L9QyTqAhhtCJ+z0GYhYrCH5fV9HSw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , , , , , , , , , , , , , , CC: , , , , , , , , , "Manish Honap" Subject: [RFC 9/9] vfio/listener: Skip DMA mapping for VFIO-owned RAM-device regions Date: Mon, 27 Apr 2026 23:42:35 +0530 Message-ID: <20260427181235.3003865-10-mhonap@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260427181235.3003865-1-mhonap@nvidia.com> References: <20260427181235.3003865-1-mhonap@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD0:EE_|BL3PR12MB6522:EE_ X-MS-Office365-Filtering-Correlation-Id: 00024a03-dfee-4293-5e99-08dea488e204 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|36860700016|376014|7416014|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: mni4ZTlaNXFIJIicT8a0lBKLrUxIbdjXGVAtaxRuXSuMx7ctU8GXmCGIHtr7y+r3IgT9yVQKR1e+tCCRDf4zeh0NreG4cXe7DZe4f3ZMj9w0+salXzBHbVCZqRsxdjOuAvYCI8iGgYE58ZIVfBg6QJY25vHIownWmVy20GBPSSDmuQNq1EGzoGhVuVP5hJXSqix6gf5H8L8VZoaSxRbxEkJuHGvb/mWNMw8S16U9j3NluxPCX9LJhq2Jygb3oqHKCja1SpiD3lGfQeYPosmJvIOegMOzcTBt0o34bzphmsDMkvPCT5oEeYpkvRcTOu6mOK6HbenXKgEJnE1DgYuDhuWdvEL+Rd1YcpTUEyn4KmSt5TWUwQM+Kb6hJ7HyIWLnpH6c8mso/LzEEmw8taHHzr0l0inKZc+DvdaTFqwHWl1tpiK8hCBR3rWDR5tFkp537AENZaWEUfyIF8+C/P+kuvUUtc3Q0DHYvz2xx++GwiAiflR/U4pJ/ciR0JiCZpHdj+0OA3MeO2T+yR1RVR9/WsyHnyKoKc8XbaYtM0CJjPklEIy4kv8iNl0xIM4hLJmGAM4oF1XcSVMByV/sA3cw5KN1re/seucYHapedTTbCoT6m8z5U+Fqea0PqDfCt8XI1vB91utTsn9qxFC9Uf+/8bboM95COW+b8N2OnkhlX+sUHYHFe08gtY6CgPh3Gn3Ux+MSQH3nMnHEvRgCrk5gQSAXUAjk3UpUgowIgw9la7Bibek4Yc9Tq97ftji0C2nFf30FpY9WH52ct4T90K8dKNnZ5i2d8/yBWefX4fJZP4EdC4apY+VHa4OEzu/RYG47 X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(36860700016)(376014)(7416014)(921020)(56012099003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: iJkJVTKPV21OueNuCeWULUALlNIcbEcEQSxGlRLVfaPS6+zSXVtp7vaktr9R0g3N5PJYCFDKiNUeu4SiVb05GpI3R5FdpGjCY6mrR11Sj/gQxoFNi/0BtSS8PfiY/nKE3JCMG5tMSJBc8Kd5CeaJby+DBu99cH3r99pI+0E8GZlorpLqpGs/cnTo26MfIem57vewvTA+BGuB4lqsobU3Q43atjh4gDCmMrp2QE66pF1CSozAtXE0vrfak9pBhnA8zH/N+9FHAx6R3UkIZj5s8LIWtoaO080Hv8UdiAyPuWbqlqSuUcKaWzXOzP2mebQ74md9zqS05OA6+2yTHFAOfvPq60IR+031ghl9fX5maXkE+FOKXdLqKEq2FDeBBVdFFUYiCvw7rcYnvmWFaZ3QI+uXORyNJ2UBxvZMT4zBw9/yf7jNI+GTp3c/b2BxKu9k X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 18:14:54.6718 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 00024a03-dfee-4293-5e99-08dea488e204 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6522 Received-SPF: permerror client-ip=2a01:111:f403:c10c::1; envelope-from=mhonap@nvidia.com; helo=SA9PR02CU001.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 27 Apr 2026 15:57:41 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1777319877876154100 Content-Type: text/plain; charset="utf-8" From: Manish Honap vfio_container_region_add() attempts an IOMMU DMA mapping for every RAM section that enters the guest address space. For VFIO mmap-backed regions (PCI BAR windows, CXL.mem regions), this mapping always fails: the backing VMAs carry VM_IO | VM_PFNMAP flags and pin_user_pages() refuses to pin VM_IO pages, so IOMMU_IOAS_MAP returns -EFAULT. CPU access to these regions goes through KVM Stage-2 page faults independently of the SMMU/IOMMU, so no IOMMU entry is required for correct operation. Add an early return for RAM-device sections owned by a VFIO device. vfio_get_vfio_device(memory_region_owner(section->mr)) returns non-NULL for any mmap subregion created by vfio_region_mmap(), since memory_region_init_ram_device_ptr() propagates the VFIOPCIDevice owner from the containing region. Matching on ownership covers both normal PCI BAR windows and CXL.mem regions uniformly; non-VFIO RAM-device regions such as NVDIMMs are unaffected and continue through the normal mapping path. Signed-off-by: Manish Honap --- hw/vfio/listener.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 31c3113f8f..46cad18357 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -608,6 +608,20 @@ void vfio_container_region_add(VFIOContainer *bcontain= er, pgmask + 1); return; } + + /* + * VFIO MMAP backed regions (CXL.mem) uses VM_IO | VM_PFNMAP VMAs + * backed by physical device addresses. Skip vfio_container_dma_map + * as mapping is not needed for this region. + */ + if (vfio_get_vfio_device(memory_region_owner(section->mr))) { + trace_vfio_listener_region_add_no_dma_map( + memory_region_name(section->mr), + section->offset_within_address_space, + int128_getlo(section->size), + pgmask + 1); + return; + } } =20 ret =3D vfio_container_dma_map(bcontainer, iova, int128_get64(llsize), --=20 2.25.1