From patchwork Tue Jul 2 05:52:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: CLEMENT MATHIEU--DRIF X-Patchwork-Id: 13718982 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0B482C3065C for ; Tue, 2 Jul 2024 05:53:49 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sOWRZ-0007vV-57; Tue, 02 Jul 2024 01:52:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sOWRX-0007uU-3m for qemu-devel@nongnu.org; Tue, 02 Jul 2024 01:52:43 -0400 Received: from smarthost3.eviden.com ([80.78.11.84]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sOWRV-0006Tu-18 for qemu-devel@nongnu.org; Tue, 02 Jul 2024 01:52:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1719899561; x=1751435561; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ozTIDtEY7hjZ6/CqnUwPAuiGQBOY2pjpxiBUFYZFZZY=; b=lEjzlOLyXTRjZCqTWvzgcf/Q1Q3sughcSTfY11Wkx142ZZaEDgyhCmPZ 6ply84BUNhDSusknCke3EfGRvxp6Z+ALIQBs0NFRLJB1bPLlzW7fUyzWy rmcbC3bKM4WY8gt9CqQKAyXUiG7KdiKSfNEtZeKng0B3s1FkW/6KW8OL5 8INIcCZsgXmR9YuSVa/JVAiIjix45chvxMn0QcAOxDawkV8ZeBPMWVVOS ksj6BBI0ECbQwd0yqKLd9Xw9wL6NtpqeRmAbqvovKX4ypJxa6xcz9KNjK KEQhUgYWc9d9NxivbmHJFLbCyvWfzVenr3MAqUj4+9ay7xgqDYWW6iyGP Q==; X-IronPort-AV: E=Sophos;i="6.09,178,1716242400"; d="scan'208";a="15721576" X-MGA-submission: MDG18OMg4f4xBuh0nzXnnu5iU7EXHK8R6Aqa0ozSm+RP2I5j7bNA7s+GyP8yIxmTHdKMirYqBGX5vRGPWJJRG+mnHrJYScF9R30G1iDMFSYY3R/3H+gnTqzizdertzzZ7Yynp8+g2Trm2g9Si8i8jzsZQgdbjcOnSZLieVydlAkqFw== Received: from mail-am6eur05lp2108.outbound.protection.outlook.com (HELO EUR05-AM6-obe.outbound.protection.outlook.com) ([104.47.18.108]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2024 07:52:34 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kxHh4J0tB2zi1ormagUMPrLxN7szkgsrJeYQ3Q3dKjsNsVGVZdvbYb657V7SixMSDfwf8lKc9sh0ci8bRmvM03ktpJZTw9QMqNQYxhiaMqkal17xxdq16mivXYndGl17olxzTJ8RrHjT0v/vWiWeQMhPp2JS3n2YClSGwtSNFoGpFk2SfBKN7UkOXp3m145XIX7X8Gy9X5c+hw+172H09PrTxf5YdbLyyXx9fRQosjhMIoUbcSYzNnaRoD06QBiGtwUS0VzX+4zGR2R0n6NVgYJ0/TR+CAokPLYuoT8YGX+AJwHtiSxCcHacvCGwCMrG+YPkK4wnownf2B0xXvVmig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=ozTIDtEY7hjZ6/CqnUwPAuiGQBOY2pjpxiBUFYZFZZY=; b=gPoRgIaZtt/j1/eZ93bW0OkG86ty4CBRqRKHKHeXImX4PGMemQuDQLuJsljkUgGQpAXmxOmwKU4/XNXL9nTAoayk2je0+vF/1aCei+k8sYIj5NuLVelvSu5CprCMwd+K5EAG+juD5+7l4Me6SYEXT3MNFQkpiz4IGbqYEmW5ckXwGLlvUC2m0OeVBj3L7AlYx7EppmhBUfB512Zjk4AQZ0ZwXw1fJZVXCegIZTTxwX8VYP8jOzUvjEjiqr9GQi24gWt9d7AsermFJHNSV1u1HdAaj+zwdMdTMKJSSOfYf/tdpm1uE2WgHuHfXoyqBo8zPSGEKZ9a0Gn7pOUTRID6SQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Eviden.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ozTIDtEY7hjZ6/CqnUwPAuiGQBOY2pjpxiBUFYZFZZY=; b=jkV90/WAZOawAaJp7P7PxHF9fJZGIPVgqrWdLC1JzcAtLAd1J0Gl10h4gOhkZJ/mw/fMrQjm/6jITK4KbuAQIrG1dCLgK47p1DUc6++0VTONtKNvOM4a9+JUyewK0+TRI3JJPS2/6UVIUID/2hZzzfFpfxzlHFA0Gseti6oYhwo0t0DRUSVL8JSomevMECO7s+kBtUujnTG2bZAez+Y9CxD8/E3UIEeHC9LRhluflNzW++Y8xYkjW+3DLqSZl1VSI56FJbzxJ0A/Wwyf0iTYjUOpfoTxSYc04s6+iymUdM2dZ3RCebIyzF3ZqUS5pFvV/pXzFWFoI46lkEcY9unKbA== Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AS8PR07MB7080.eurprd07.prod.outlook.com (2603:10a6:20b:239::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7741.21; Tue, 2 Jul 2024 05:52:33 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%4]) with mapi id 15.20.7741.017; Tue, 2 Jul 2024 05:52:33 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , "mst@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH ats_vtd v5 03/22] intel_iommu: return page walk level even when the translation fails Thread-Topic: [PATCH ats_vtd v5 03/22] intel_iommu: return page walk level even when the translation fails Thread-Index: AQHazEQIX64drBolXUuuM+UyOsesIA== Date: Tue, 2 Jul 2024 05:52:33 +0000 Message-ID: <20240702055221.1337035-4-clement.mathieu--drif@eviden.com> References: <20240702055221.1337035-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240702055221.1337035-1-clement.mathieu--drif@eviden.com> Accept-Language: en-GB, fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM8PR07MB7602:EE_|AS8PR07MB7080:EE_ x-ms-office365-filtering-correlation-id: 6740b182-17a7-441c-f0db-08dc9a5b2afc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?BSmHLQKq56UB1THoTn+4RWDHfpoLTBI?= =?utf-8?q?6GEZJRwxsSj9jARtCJE1Hkk8SSR69ETLPOwyNxhBqwTuB59XW6z3WARMacGzaDMg0?= =?utf-8?q?k/WFhK+72EUd/DnPTF+d7OCi4sy32bvdaNhwrn/CPaLvCjk47wqB998khoFvgwL4q?= =?utf-8?q?l06b4ghFOnXkFGVr6ZaWOD60dH/aEnY7fz8SUIE/fXSX7zwbqZwNmGaX10Pjk/7hT?= =?utf-8?q?UhJnGFHF/bKzX1dmlpjxGdwFkfCJgvwlL860bEnq/6Zdgb29rJtE/PNb2NcDQ5GBS?= =?utf-8?q?DQE67Xcj8ABhpEYr7r8DJiSlOO6AvpIGZA2Fde282zxZv4suvzLSfDOt32P7/MCol?= =?utf-8?q?kafQtze5n62ic9ElVdUVWZQtk9LNVCR5bp8oXN6eHhgIjAEelOWqnxMaojRIkpJLY?= =?utf-8?q?QEpUGmK6KV3LHXSnthoCdG/8bsDUhpBvHd47l0OhPj632jfaZM6HFKIyG1A0P5soK?= =?utf-8?q?LoA9qmvj4pTsdu/Ji5ONRopUDClTkhGxS5B9pvfQk8GzPW8ZiMuPI555HIQUNQkLX?= =?utf-8?q?Y6F954nJLSfqKkLmsGCbXCPRz4w3f4oZyv3UNfUcf/ecZQjcND/TIm+SUUEgS73zZ?= =?utf-8?q?w+c5zxGhiLBFox1lEmCyy5mlrBimtrXiBUUN10U2g4Oork92yDQtVyNvPemaHSHgb?= =?utf-8?q?SGDCVQ/FcptX8hYXHEXnAcvxqtTajW54iBa/Giw5zbroT1GE+TN0B2yLD0lgPIw8r?= =?utf-8?q?aoLd3r2zKr39NbZwubL9p+wOEKWEjeTnAEpLcvnW5Ie52BSdZgPZgamcrXe2KKjc0?= =?utf-8?q?529mcq5boU3AQonj/6PQUmSp8+omOl6WW9VzvL0uIMxPs+GHMz5l1idjAE3hdKIiU?= =?utf-8?q?gfhGJmvLy8/Z8VlptNXMcBAbXHr6KSTVJjkR0MOq1XmobWZabwFeXl9ovlwVKE+BH?= =?utf-8?q?dJsPNkX3JWZYPxQlMMVuV323SY8Lik9UcKjv5g0dRwoXY16LeSQIa+wzIET5c2ShK?= =?utf-8?q?0Dh1zzbRgGIn/tj6E612ysR5Vin+fNE2fZVMvHYmwz4xeYPXV1p20WMiw8hTOmOGV?= =?utf-8?q?nCdm6UrwM0rZosWgqx7brkQWpRa1e8SGDe9VHkKgGouNH877MsYt2l8/U0qDEMVeF?= =?utf-8?q?rJpI6A2dDC7aG8ooKHwfu0simV6I+IDu5Bc1t32q+ET7cP80BKvD7BXNS3DCMK5GC?= =?utf-8?q?/+re6djw79gqe5nV2EGtNlkz1mDvdlVFYAUMOQaar/HMNYE7HJQ+Oj0jt1ojVfdNx?= =?utf-8?q?eIxJY4pmPNkBjA4SkwerWGQ4cncsSYpVHVT2QVSsM0EAeuig4y92oEIG67F3D2IpV?= =?utf-8?q?zQ3molWihs/QgyXM1TCTGMRzKdbUqUoe8GT92XsZDf0KRjR4JIpl9HaP0YNcfHqmg?= =?utf-8?q?wUZiE0zJSoYTRU2Exc8oaw+SMB6HW4nXTg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7602.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?Krm9xuhlcIrpB4CVumEe6xy7MNt5?= =?utf-8?q?MSRbIMRJmFH6goE0NzlfCZRcsAR8AGXU7CjO5/7epvbuqXQr7tLeIXIuHAjRwSO+K?= =?utf-8?q?mBgMyk9+qTqvsoXgDr1O+SQGPA4jJcU4gbEEzd+091Ib4Uh1R5YkH4jmj7wxtyFlU?= =?utf-8?q?upOfwXWLESVmOgbUSfZ6t9zZDsDtW6NpSt6n6tom3cmJ0sTNj/c0jVzSVnYggLlIU?= =?utf-8?q?eFTaEQcignhOZNAoGmQK97mifek0QVgsLq+flEqle0UGCSP8a+qFDUpZWwPaVgaQo?= =?utf-8?q?19S1sTGQBEi/9ZYlj1GHZ6MjVUGg1vUi3QMcKHrefXED9TAhjNvMRxzuuSNsFE4wt?= =?utf-8?q?lW7op8nYB1uw5yqyJ71v6C5QQDjSTE/729KAseSD8QcBN9R9GiSs9HA1020GZxFkX?= =?utf-8?q?/KdtPr48ejyyc7fVluRaivFbEtA2wtKDr+dNvBVEHXwbC1Da9/uSMoInE+VNzvjxa?= =?utf-8?q?KfoFBB42kdbun+IkoRY43sY9nmo9oyfmSaBcaw8KzscnNevNgPDiMKd0q6R78T8kl?= =?utf-8?q?USOi/ljWRf/ehS2vtzFOKsyfGqD7Wl2GeQo56z2aR47/pIQuhH75FtnKDlfxwnYLW?= =?utf-8?q?5W4b9Q9RceGm4RXZ0nd2HGH0kyOHvLoPzIqUkYo7S74+V0frqK8D8OYnT0RSUiKZF?= =?utf-8?q?gES48SJeVf3KImMuUAlHLukqZCFGgGDYKu9otQyA/ZksAjCgy70xpO7GQgcy2uLVe?= =?utf-8?q?jw1Kd966egWls+Oo6NYLfTDmsYNVpRiic0DG4OKCPXbRXFi7C9FsGKv5VRHyjX08v?= =?utf-8?q?D00RsmX/u0KmmHC/4sIKaffVxcl+F7wHcE6wnSNGpBaCjlIHNXAM29VIwNwUYFkhY?= =?utf-8?q?DTXpJ47vNqzFjas10FUv+Y7EKFtw0ZpyDMHcUOEaISX2OUpPjERu2/dkmyHXU0Gwe?= =?utf-8?q?fnSw1ckUk5kBFxqD/fgygdqOZe6Pva1OGrNlpfv09WteeWTzT7QZVC1V9qjNBu9jR?= =?utf-8?q?TlaAoX4sbO+q6VkujNmlCKI2iQXHgbP191CLQ9At8ciE2pe+PRTRo4bkq5Rs2xADw?= =?utf-8?q?2SqHdq44lZuAszpQYCBx1vrQdfxJ+mW5MJ6wu70x5JYGf2nv74JZBwI9gVH2Dy0Ix?= =?utf-8?q?XTewkFCDnRXv/BX72loi5IQ4mMsR8ICCDWLD2dq8ZzlTwV7XSerFX0WKRE7JXdVlL?= =?utf-8?q?sgiV+sgwzO8KEMjoez0UvocBcMJ39E6Y3aOIFBk5J46MQuPJscbR0UVrdrRZIMxQD?= =?utf-8?q?fz1Djew4nZyzBnA4C8sas4U24BrMl9/uVRh3O+xTOH0LUZLtjFoh8w7eUNygmlMNx?= =?utf-8?q?VMFnB9iPqlkr2U6y3DeOUzhttr0o0i1EHPL6OChUzqfhopUeA4rhZ431jlLko6d7I?= =?utf-8?q?f5QiACgddqXED6VsFgRNjNHVoqfvv4xsImX2+xxgjhuj64kY6YNTmHQs/f0+7lcTj?= =?utf-8?q?JVOEKKrFwf1g7+7jhPafxL6CSnzyqJTKKUXuevpEPRqUL+7FYikfFEDZUzeZY4vUm?= =?utf-8?q?tk7iF+7VOAbLlzMLtpg5UMf/lmnKVj1TaNxBtKUJbV7yrw6WSn/axFbhqX4KSCo90?= =?utf-8?q?SNRMhrF6ixm2wIkGyU/aE0yiIoqYZCR/ZeZWtK3NqqCYPRDm0+f4fjM=3D?= Content-ID: <8F03BB60A4371545BB01E4B3D59AD471@eurprd07.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: eviden.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7602.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6740b182-17a7-441c-f0db-08dc9a5b2afc X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2024 05:52:33.3587 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 7d1c7785-2d8a-437d-b842-1ed5d8fbe00a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JSY0UtuwjBJn4CRdGuoldqUw85aqyFoNJQSqE4vnpFRp1Bxx02utsUO5LO8bXyd0LQSQUAzboqM1A5ct+83+PPcCRybfdBY7Zz+xAYtyJv7+QJX4tDeTh0OX/VXxZnLn X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7080 Received-SPF: pass client-ip=80.78.11.84; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost3.eviden.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Clément Mathieu--Drif We use this information in vtd_do_iommu_translate to populate the IOMMUTLBEntry and indicate the correct page mask. This prevents ATS devices from sending many useless translation requests when a megapage or gigapage iova is not mapped to a physical address. Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index c6474ae735..98996ededc 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2096,9 +2096,9 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, uint32_t pasid) { dma_addr_t addr = vtd_get_iova_pgtbl_base(s, ce, pasid); - uint32_t level = vtd_get_iova_level(s, ce, pasid); uint32_t offset; uint64_t flpte; + *flpte_level = vtd_get_iova_level(s, ce, pasid); if (!vtd_iova_fl_check_canonical(s, iova, ce, pasid)) { error_report_once("%s: detected non canonical IOVA (iova=0x%" PRIx64 "," @@ -2107,11 +2107,11 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, } while (true) { - offset = vtd_iova_level_offset(iova, level); + offset = vtd_iova_level_offset(iova, *flpte_level); flpte = vtd_get_pte(addr, offset); if (flpte == (uint64_t)-1) { - if (level == vtd_get_iova_level(s, ce, pasid)) { + if (*flpte_level == vtd_get_iova_level(s, ce, pasid)) { /* Invalid programming of context-entry */ return -VTD_FR_CONTEXT_ENTRY_INV; } else { @@ -2128,11 +2128,11 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, if (is_write && !(flpte & VTD_FL_RW_MASK)) { return -VTD_FR_WRITE; } - if (vtd_flpte_nonzero_rsvd(flpte, level)) { + if (vtd_flpte_nonzero_rsvd(flpte, *flpte_level)) { error_report_once("%s: detected flpte reserved non-zero " "iova=0x%" PRIx64 ", level=0x%" PRIx32 "flpte=0x%" PRIx64 ", pasid=0x%" PRIX32 ")", - __func__, iova, level, flpte, pasid); + __func__, iova, *flpte_level, flpte, pasid); return -VTD_FR_PAGING_ENTRY_RSVD; } @@ -2140,19 +2140,18 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, return -VTD_FR_FS_BIT_UPDATE_FAILED; } - if (vtd_is_last_pte(flpte, level)) { + if (vtd_is_last_pte(flpte, *flpte_level)) { if (is_write && (vtd_set_flag_in_pte(addr, offset, flpte, VTD_FL_D) != MEMTX_OK)) { return -VTD_FR_FS_BIT_UPDATE_FAILED; } *flptep = flpte; - *flpte_level = level; return 0; } addr = vtd_get_pte_addr(flpte, aw_bits); - level--; + (*flpte_level)--; } }