From nobody Tue Mar 3 05:10:35 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (Bad Signature); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1772010471640831.3592932315079; Wed, 25 Feb 2026 01:07:51 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id C59E441D57; Wed, 25 Feb 2026 04:07:50 -0500 (EST) Received: from [172.19.199.9] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 904F742408; Wed, 25 Feb 2026 04:03:45 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id A33BC3FCB1; Wed, 25 Feb 2026 02:49:39 -0500 (EST) Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011068.outbound.protection.outlook.com [40.93.194.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 186F13FCB5 for ; Wed, 25 Feb 2026 02:49:39 -0500 (EST) Received: from BY5PR04CA0020.namprd04.prod.outlook.com (2603:10b6:a03:1d0::30) by SA1PR12MB8721.namprd12.prod.outlook.com (2603:10b6:806:38d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.22; Wed, 25 Feb 2026 07:49:32 +0000 Received: from SJ5PEPF000001CE.namprd05.prod.outlook.com (2603:10b6:a03:1d0:cafe::84) by BY5PR04CA0020.outlook.office365.com (2603:10b6:a03:1d0::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.22 via Frontend Transport; Wed, 25 Feb 2026 07:49:30 +0000 Received: from satlexmb07.amd.com (165.204.84.17) by SJ5PEPF000001CE.mail.protection.outlook.com (10.167.242.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Wed, 25 Feb 2026 07:49:32 +0000 Received: from lenovog2.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Wed, 25 Feb 2026 01:49:29 -0600 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_INVALID,DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lxqSnTmx5HJ4DC37jZaisAnqs67FhoYdMo5GgbGFNGJlGfAMDb8K8i94fv9l5zJ+Xc1dhBP3azXASBk22cmgFR7ZubclWLP0kMCx1P3Y954FDn2AEjqr5jqYdsmUxO6bvfQcUXowmwFYA5niusDAm9lV29nge8bWx5Vus7gz5dlpzty6K/vH+TBad7rKTofnMDKj+UVPY13FicsTTTPEy7no/lEIW+tgEnjOdr/UKCQfggkSTLtncMTgzWG2cCTTpGa9yjx1zKAlkBV6sNCnXb5LPHPK3iz0GWRclibcZgcqWSKETmK8KMUW+iq7lIFjtG4htUy1Z/+peasOJH69rQ== 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=ZLx7e/yeUMu+cJDLkZu/pPtdy4YY1hmOOfsx2iw1ZLM=; b=n5sMwFGGDCI0TKrPk6s+4Iwso3cw4PtCtgMuDBbz1mX1J5QRb6hbaIEJ4RpU1PSQHHVomEheLZdOgL+ydLqlOx0NIoqYWAfisTgDIP2FOejrKFum1jaK1DjQaJFzYJFXGhpDLL/O7OZC3SD1YxA+1XgWx1h0z5QQtr7/n8N3G/2UAamkeIfvMiDIbcN9qLOCDijw3Wcf7tgHZmhMdjD0kd4M/9G6ghbrNIoEvRD21LiJPETiuCV7cNDdwnzU6qkh2ioS9aRG/Z0jCI+K+U0fnUdwHfwBE/prk4WCdiCCGeY1T66tKLhJTewnMXSQiF/qW4mG7xxbKgbeJHP9sBuhpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.libvirt.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZLx7e/yeUMu+cJDLkZu/pPtdy4YY1hmOOfsx2iw1ZLM=; b=G1jDrdAypUeSsNDgq4uMr3l5/PpjB4wLU3f3nDsDAG7oF+beEaq24KUjYILWk2sdRg1IKjrStH5jddHoCUjB9DOFB2N4nQMWUAzsGRVcosLJi3tWAJ96wHmZNA6P1J/RPffw+ESH/Cp4bH2KaH/qRYlh+Acq9HyLf85MYSLKiO0= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C To: Subject: [PATCH 4/4] qemu: Enable AMD IOMMU XTSUP by default Date: Wed, 25 Feb 2026 07:48:21 +0000 Message-ID: <20260225074821.654557-5-Xiaotian.Feng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260225074821.654557-1-Xiaotian.Feng@amd.com> References: <20260225074821.654557-1-Xiaotian.Feng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001CE:EE_|SA1PR12MB8721:EE_ X-MS-Office365-Filtering-Correlation-Id: ca0beb06-40cb-49bb-ae82-08de7442699b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?J540QzGyKk2/BXfdgFQuSMkBy4vIyaoEDQ7tcCa2ya6VmSoSbWml9BAVTDbF?= =?us-ascii?Q?HcYB3+lFy3Kg2YdhHniLPsOgsuNyUC9qIqYsb7+mJ6oYtBX5tp8ZcYUS4pTq?= =?us-ascii?Q?/mFDCVXlrFwGSzCS2mC5lU76ZCNlAZY7lxC9b4zqNCXTCTMYn9jgK1vIwrAT?= =?us-ascii?Q?ppjJzAsi8FiSX68us8sxFgpsqPhDez3xsNrc1C7wxa56SEA+8yk/mjJ5KMEA?= =?us-ascii?Q?v7ATxnnGnfnU0WwX+MKCZ6oAmEA4mrVJpHeyyNtLycyxXq5aS3gV0b8GQOUY?= =?us-ascii?Q?9HoyDcgcwnb3u9j6KxawwpNLuD059R7rYpVRrhLqbVoHKXwwNqZS5IySE2aT?= =?us-ascii?Q?3jt0GBjo9vIFRx6wdPuzsyIlk41/Z10ECGodSUl7pTODz6pMAs+gbMpyXaYK?= =?us-ascii?Q?oz48Lk47gvpR7icStjZGuFE1u9OUwej1g/aic5asfTDAeqY1MPOnp12cvxPZ?= =?us-ascii?Q?M7azCffmssONyr1VYe/9KCWrw3YGOcVdcAlmjV2nrZ0NSXwL8yNVwl1TfMkA?= =?us-ascii?Q?aW2S5I1CsNcOcHgikgyQdJLKP/ju/AM44YNtEappc9no0cY3WqUEVMjsCpJn?= =?us-ascii?Q?x4HEcURx5yHsmA9OUMKcuGHHKopPqxyNcmI5287OFxddMu7lPDnPKnnuhBJA?= =?us-ascii?Q?JLDnYc/EhjYG71uWGw3/j2ECmoX6by8qbgVm0PjJIPHTVUMMso55Oz1YtBUc?= =?us-ascii?Q?rfV+QxRsLtUW73/Wo3EjBpM6SnJZ+Grd1n/EU5aWVfjhX4X1Dn5HYWYA36u/?= =?us-ascii?Q?CvRmpAOk6e4E8x8QE9RJ/nOQTcCkWqbTOBicxBCt2UzNNwIOwLgFvmmUS2Qa?= =?us-ascii?Q?B00xlBK2fT0K9FvVV+vhKxL6TGagEi4ARQobMbrv2x2UNXrBbemnFDACicrJ?= =?us-ascii?Q?ju3QjIpoY0vaXCifYdPOmQ5pyyMTPZor2aRU5urDCd89p5y/1do/+lkwUaL8?= =?us-ascii?Q?1grpFYiabqcn4FBqCfxNlLG0heIU5zaWNV7mEoLb23fQ+rX8nvsHBE5TdPFo?= =?us-ascii?Q?uUrSiNskUJnC1VCI8nQuf2QmlbXR5pj9by+eeP5jTcMajnzmMgCZGhUBbKtg?= =?us-ascii?Q?jGANEAYcuPMhuQ2luV7HbZgBZmpSK3Izvwoh4l8tsyZon7q2gJQWyJ3ij0wx?= =?us-ascii?Q?z/oSY43E8fgb/eZ3F1drXOx6Pt0lJBu8mCrvG1N/8ze79i0tGaC2ybCKJmCw?= =?us-ascii?Q?hzM+CbwkdRJr1PVznECIHZnuRv1rp95fbKI2Zk8XOCZJLV/UxL6fNjMbTJnw?= =?us-ascii?Q?VX9r42PYpVcpPjIPxltMd8gLdgj1+Jhq0Q2RzUTWTltmmhey9k4Wob4wYbGo?= =?us-ascii?Q?TZERCDrPLCLwAdYgNHENdosIlxMhbdZanwWKP9MGQHJZUespnhByxXyffjSr?= =?us-ascii?Q?t2gLKX39h+aeU2+ec1GAc58T3zvESQtiM5XNU8SPISo/iYbH35TiJOWqBG4R?= =?us-ascii?Q?XCN7hqdiLOllZHk97Hw2EENrG9W9dcIRFX9aJ4qT8q71NsrseakgnbdZQSes?= =?us-ascii?Q?9XHj4nPAFLtse3wZVCbS1GwQJzu/qmEhEE9O6A3HqzUXzk/cJDQpH2IoBZh7?= =?us-ascii?Q?9hKT/h0JKC7w5SAvrgEZ09WaISTkws51uxd9qbI/a36u9n3hCjOLq4/wkaHB?= =?us-ascii?Q?Hws93OiTHx8ihUEf4EbOIEOtFZi7BOmA9BNn2A0/qjiAQMgfjV7uoWDMJOf9?= =?us-ascii?Q?b2N6Cg=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eYoy/U2zDYMtejvF+LhI6DyAuuifmeN18pexxKB1r5GMxaWMv26O+f086ms9GJc5hTiBWc5YNPb4IwEJbUYnBXcdFoSq4ajXMIz53FRkhUS7l4LTTGRGj+hwLhacYjBCzHsAVE3oMg/rE9nkXQg4FgCkgoSNliPC+/V0NBcTjSQcUynu9a1IEV1bK97ZUFNq8XVpRSdGKVBwYOn3tp8MWgWxYc312/AVUMMrbHETHbpV/Fv37ZbeJoWHAQfsHF+DpVnwQA/rj85xas9ahuOFgNDQd7T9UlZ3MbOpD9rftb92bx8ZRd4m48iG1j3mK9O8F8J7Mt5C3v9giO+Ibu13zCqNjHgpWxk7VVcPtORFSfM+z+d+buhmX/uoRr4pkisyPl7Pd6gzCmVAhntP/mNRYzPLD/wrpBVgHd2XfqSK5O8SouX3CTbJWnv2B0AxQy2u X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 07:49:32.0317 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ca0beb06-40cb-49bb-ae82-08de7442699b X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001CE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8721 X-MailFrom: Xiaotian.Feng@amd.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation Message-ID-Hash: FNFMAU6M57O4Q52MZGVLRQM2CDDHEQJE X-Message-ID-Hash: FNFMAU6M57O4Q52MZGVLRQM2CDDHEQJE X-Mailman-Approved-At: Wed, 25 Feb 2026 09:03:31 +0000 CC: Xiaotian Feng , Xiaotian Feng , Ankit Soni X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Xiaotian Feng via Devel Reply-To: Xiaotian Feng X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1772010474021158500 Content-Type: text/plain; charset="utf-8" Add QEMU_CAPS_AMD_IOMMU_XTSUP capability and enable xtsup by default for AMD IOMMU when a Q35 domain has >255 vCPUs, similar to Intel EIM auto-enable logic. Also ensure intremap is turned on when required. Signed-off-by: Xiaotian Feng Reviewed-by: Ankit Soni Tested-by: Ankit Soni --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_postparse.c | 38 ++++++++++++++++++++++++------------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 5d75c23072..c8667fd77c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -762,6 +762,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "scsi-block.migrate-pr", /* QEMU_CAPS_DEVICE_SCSI_BLOCK_MIGR= ATE_PR */ "iommufd", /* QEMU_CAPS_OBJECT_IOMMUFD */ "uefi-vars", /* QEMU_CAPS_DEVICE_UEFI_VARS */ + "amd-iommu.xtsup", /* QEMU_CAPS_AMD_IOMMU_XTSUP */ ); =20 =20 @@ -1632,6 +1633,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCaps= DevicePropsVirtioBlkCCW[] =3D =20 static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAMDIOMMU[]= =3D { { "pci-id", QEMU_CAPS_AMD_IOMMU_PCI_ID, NULL }, + { "xtsup", QEMU_CAPS_AMD_IOMMU_XTSUP, NULL }, }; =20 /* see documentation for virQEMUQAPISchemaPathGet for the query format */ diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index a48e1d0367..5662c81e71 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -736,6 +736,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_DEVICE_SCSI_BLOCK_MIGRATE_PR, /* persistent reservation migr= ation support */ QEMU_CAPS_OBJECT_IOMMUFD, /* -object iommufd */ QEMU_CAPS_DEVICE_UEFI_VARS, /* -device uefi-vars-{x64,sysbus} */ + QEMU_CAPS_AMD_IOMMU_XTSUP, /* amd-iommu.xtsup */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index 58bd70c741..79e02e34ac 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -794,7 +794,7 @@ qemuDomainPstoreDefPostParse(virDomainPstoreDef *pstore, =20 =20 static bool -qemuDomainNeedsIOMMUWithEIM(const virDomainDef *def) +qemuDomainNeedsIOMMUWithx2APIC(const virDomainDef *def) { return ARCH_IS_X86(def->os.arch) && virDomainDefGetVcpusMax(def) > QEMU_MAX_VCPUS_WITHOUT_X2APIC && @@ -808,22 +808,34 @@ qemuDomainIOMMUDefPostParse(virDomainIOMMUDef *iommu, virQEMUCaps *qemuCaps, unsigned int parseFlags) { - /* In case domain has huge number of vCPUS and Extended Interrupt Mode - * (EIM) is not explicitly turned off, let's enable it. If we didn't t= hen + /* In case domain has huge number of vCPUS and x2APIC (intel EIM or AMD + * XTSUP) is not explicitly turned off, let's enable it. If we didn't = then * guest will have troubles with interrupts. */ if (parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE && - qemuDomainNeedsIOMMUWithEIM(def) && - iommu && iommu->model =3D=3D VIR_DOMAIN_IOMMU_MODEL_INTEL) { + qemuDomainNeedsIOMMUWithx2APIC(def) && iommu) { + if (iommu->model =3D=3D VIR_DOMAIN_IOMMU_MODEL_INTEL) { + /* eim requires intremap. */ + if (iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ABSENT && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_INTREMAP)) { + iommu->intremap =3D VIR_TRISTATE_SWITCH_ON; + } =20 - /* eim requires intremap. */ - if (iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ABSENT && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_INTREMAP)) { - iommu->intremap =3D VIR_TRISTATE_SWITCH_ON; + if (iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ABSENT && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_EIM)) { + iommu->eim =3D VIR_TRISTATE_SWITCH_ON; + } } =20 - if (iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ABSENT && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_EIM)) { - iommu->eim =3D VIR_TRISTATE_SWITCH_ON; + if (iommu->model =3D=3D VIR_DOMAIN_IOMMU_MODEL_AMD) { + if (iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ABSENT && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_INTREMAP)) { + iommu->intremap =3D VIR_TRISTATE_SWITCH_ON; + } + + if (iommu->xtsup =3D=3D VIR_TRISTATE_SWITCH_ABSENT && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_AMD_IOMMU_XTSUP)) { + iommu->xtsup =3D VIR_TRISTATE_SWITCH_ON; + } } } =20 @@ -1544,7 +1556,7 @@ qemuDomainDefEnableDefaultFeatures(virDomainDef *def, * modified so change it now. */ if (def->iommus && def->iommus[0]->pci_bus < 0 && (def->iommus[0]->intremap =3D=3D VIR_TRISTATE_SWITCH_ON || - qemuDomainNeedsIOMMUWithEIM(def)) && + qemuDomainNeedsIOMMUWithx2APIC(def)) && def->features[VIR_DOMAIN_FEATURE_IOAPIC] =3D=3D VIR_DOMAIN_IOAPIC_= NONE) { def->features[VIR_DOMAIN_FEATURE_IOAPIC] =3D VIR_DOMAIN_IOAPIC_QEM= U; } --=20 2.34.1