From patchwork Wed May 15 07:14:15 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: 13664736 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 29352C25B75 for ; Wed, 15 May 2024 07:15:38 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s78qP-0004Zu-Nd; Wed, 15 May 2024 03:14:33 -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 1s78qJ-0004XV-9t for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:27 -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 1s78qF-0000oW-NX for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1715757263; x=1747293263; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=Iwcyrl9KCw7Jh1dv0E/FHT7n8wj4cy1aJ6V3NU3ckeM=; b=NKEJIS1B5yeBtQq1SEIHceQ5N8czr24gjxZSwNbLVJwMdUe3CefPW7tC Sw3pSuEoWJ17Jyta8G26sZJpRdvecCem+yDOxeVFsWISJXEURUJODzaZY 04+H5KCx3A4I+/7GhCUWFvudYfMqSEHu1ed1n+4Jvk9rhEpqgSvLQJssd /1DyFrCbWMOnvCZtD3ObAVh/HpgGKK9H1Lb32VTtfmpzRWnmYYUE7KER1 ICsEK6wbBQlbrLwrzxxho1BJeHvI7+zVdFHYi292mtcATD25BfTfDzEBp ncB9fFLWv9K8XRnd/t6aIZgJJ8DWOkmq4J22YgNUWTx93xeZYFGnZaIPZ A==; X-IronPort-AV: E=Sophos;i="6.08,161,1712613600"; d="scan'208";a="12581795" X-MGA-submission: MDECe5PZv9r3WN/RiCMzTDZoqjrcYsH7bqlmnezuZkD13qFuxGsTqA2cYMCH0C8RmpfC+nUsP7RZHtnuExZltPc22LgFUPzaihmG2iERTna4pwjvMQhffzuwydifk6OuObosG5eC842ldtdmP8eW9va0vq/JKIBPbtqN6z+zm51cpA== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 May 2024 09:14:17 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JTaaeFzPeLdVB4EWi3r6wEG9a0W/GMtoY3kFfb5C1ESdNRi7ge8zKkoircmlpKTDySmuNychjBUjEsezh6GnkS5E5eKs6CfDJt7HFsncyv1DqMBsa/HqzcP/mK3mY8OkjFISbq0Aa04L55wXQHFZ/ohSh+T6X9plz1FmZ6W03jHWxsuX6VxbKv24RouZ/3ZoUClUvR1ax9ciHf5P7zVMq4WKFObHq7VPfnccfNT6ygWEW3gak32t9ICIezWkmPnUAesV3yrGl/Qz22sZVtnBtWonPA7a62/h5U9W/Dw9XSENgj2LpLlDRASlvjTW4fgGYj89ltTLwjqW9P53FBWVMg== 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=Iwcyrl9KCw7Jh1dv0E/FHT7n8wj4cy1aJ6V3NU3ckeM=; b=Ho6MlY2d9+PTFfZkE9Fi+M3dG7j99q6OONx8N3aUdT7JIUgjMv100OvO5rUHQryiDjm0LSPX1eJb3A1iQ67APLfxhQwK5xCaTtEwsVd4vY50AJSTEuQcnFwmfSYPU1W2CaDH66iUYkAuAlwGsWxIkAK/JQDhOpWiwhpoCAAYcZ0SXgpmbTMF5K4kWTAR1yKq7rX9xQOgLETnlEuJkjVe7Xnr8BFzQI+/mm6vyqGFx7tiWW9OG2DLL+/vSjPlM3sT4PtnXsQGesE72EKQcSqbHk22PsfnOAyjLsSC96R+TrPjxsW/ffQ3LXKyU68di2Nfp9GFfQmw7MU24rSpHw/X0g== 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 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AS5PR07MB9896.eurprd07.prod.outlook.com (2603:10a6:20b:676::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Wed, 15 May 2024 07:14:15 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%5]) with mapi id 15.20.7544.056; Wed, 15 May 2024 07:14:15 +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" , CLEMENT MATHIEU--DRIF Subject: [PATCH ats_vtd v2 04/25] intel_iommu: set accessed and dirty bits during first stage translation Thread-Topic: [PATCH ats_vtd v2 04/25] intel_iommu: set accessed and dirty bits during first stage translation Thread-Index: AQHappd+pmoR6qJa2US/JV5yJx2XMQ== Date: Wed, 15 May 2024 07:14:15 +0000 Message-ID: <20240515071057.33990-5-clement.mathieu--drif@eviden.com> References: <20240515071057.33990-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240515071057.33990-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_|AS5PR07MB9896:EE_ x-ms-office365-filtering-correlation-id: c4372143-42ac-4cdc-61d8-08dc74aea0c8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|376005|366007|1800799015|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?24inncJp69/aKUM7hdfHs6E5wS/HKJD?= =?utf-8?q?AG62UUcyS+Wt8v/wWTsvexN6HkHHCLEprnno9WH3RYyuVlpvSAbRjXV/IJnqS5x9s?= =?utf-8?q?n5HzLEx6y6pbkiiPh2hAkY0ygC3S3P3sNIY6jMyr6BdiAlIiRdQEkdyYHpqpL/7te?= =?utf-8?q?g5ZJ/E042Z/wYlZCWixhwXZ4VsbOqVgqhujFG1qQXvLdNI88pVFuvueyljn2CCa3S?= =?utf-8?q?vD3eLezRYRpO8OuFq+1FhmVfmeZKNH8Ma4q9zD5xgZ5NU0ddCGIDxKrgg3UhgJdWr?= =?utf-8?q?Lso4qDKdppmLZB0uMTO05XyWX3Kca4rMOzbGU8tUjPyQARL2W1o6/uvhdWQHkZGyc?= =?utf-8?q?xbkseTsTACZS9/sIodU47AsK/WlpX3AknP1ppRAso2iz3TCNy9yA4KLWa8yvlBbop?= =?utf-8?q?X4iw6EFzh9Cp2wDSH6+3MrBHUl1gKwhnKxgjU4nwnwVSOFxrylW84Na6prJ8Nbgn5?= =?utf-8?q?Q5/eAf9HR6+Yp/kg0vLk8PsVwNUpkuu+mlgQAHrU8Y8PIdkKtJ7uI5p1x4rEyNOZZ?= =?utf-8?q?ILrRUBf2A330NyPj/PvkaIdwCmMpR4suuHjdT64FDffncsZOLxbYKhGZhaw4tH8ZJ?= =?utf-8?q?Xh38vYM8fE8H5KQcssabU/SMJh1WuYIQ5I3GIg1/JggWt664l5/z/i7kzYX4KghoA?= =?utf-8?q?eP+LwxbZroeexOhDJpPyCk301x9U8iZqifZ8qU4xBIlDGTRt+DQzHBNdbmJFcn8+1?= =?utf-8?q?ZWWgs/4BjsQ4QPdOsnRsBuH2ziXqzAI0ukhljaSMeNIWGKDgujKfll18DgIgjJHbq?= =?utf-8?q?tD8UlAf+C/uTNqiuSuiKJEDX5YQywVd3T4MN+AK+u4C/Uiv5PQhqoXfgF8DNl0dUY?= =?utf-8?q?wh9qYfv4WGxxrrJJOIUTA8uz98S45oPQVfYnnexuxcztXf03YMLd/sYMGC+p3u7SJ?= =?utf-8?q?pN36jj4vltOCt8Ca2buHqBZ3Whxs5+tdlOtlYRx/QaW8rcXFyD2YReL7edqvMs4MC?= =?utf-8?q?RNIgRtmyzEy/20UDuT1fbERVY3QiaiV97+8om5xv1T7lATafNzTN+8Nw+5pfTXQ/1?= =?utf-8?q?2HlZ+OCnAxcWj+iWcVwHDAeUf+frZ1FWpxTxt8PlxoZB3A95HwjjGvVPEGOitniTO?= =?utf-8?q?bPF8jM8UOnz8gOrwgHKKMgPJzumTE+3qfI62iTxjH+648BxUp6F/XIBCHUXPWljp1?= =?utf-8?q?mqJkbRW5WSkGvHPHJ1YGhmQKdv4mW7L3o2ViMaSaMoiuyi0PokKqapqvcjzVvUb4K?= =?utf-8?q?HI1rDO4KlAM4Drui1ybC/lae5gWZSYZKPkLyTMhbFSOTC0vZNTU5yLeFXRF5WR0yp?= =?utf-8?q?x9+DqDEiauegquvYP8CjVZNTXaAyDeCUBdA=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:(13230031)(376005)(366007)(1800799015)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?G1wPoM1dbOnBdaI6253BuvfalRI5?= =?utf-8?q?pAAmdmzSxOHdyuF0jrmW9JTkMy9Rd41aMdPVp+fdNVvX0U1Z+b50Fmm24PPFecK+X?= =?utf-8?q?IuBU3TBTFK2fUjD985CXeYMR/ot24c8zx9tV5sQB9mvBfHZsA8rYOoCsIJA2apEjJ?= =?utf-8?q?o1XlJHS6amPNN/+WjaTrCIaamxYHDDvz5RouLjFmEeSUlLfeccECpTgwNVG0LgYKe?= =?utf-8?q?yPHC/2EN+EyqgCP9p05L7IbILgeOW7Ti1saGswQRIXVVg6BN2WLvHDjPs8noTaNPE?= =?utf-8?q?M8IB0jZVibO1wb2NpDno8woRi0MYgSxZkgd0FlPo+52hEMPFOtAUWcF7Oa8aBzxld?= =?utf-8?q?yTM7C5liM5qO3a6q0NXTqIXniKl4GHIboJowU/VoH01Taw8Ca/y4IJ2r31yQilJHf?= =?utf-8?q?wBgpwnwmBiIMdWN928EKyU5gWbvTjRHydSu1QoimrlnE2Mq7Hon/tzU0Ub1NOJe1h?= =?utf-8?q?5hnTmQWuSd1p49JKwjEeMBzQ9iQ7ghCtTGwykD1AlJt5mHtbD7vFQW1mgu2Cvw6+d?= =?utf-8?q?b0Hnc60rVvyq19XxLZPai4Dw7P1JU/zU/fCqD8I+d7zJ7lUvFNlsukaealmcrVmG1?= =?utf-8?q?NeXLln7Ek4KE7Dorq9IQHBgr02MZ9LJNAQusX+ovoAWT3b+uWA6hWs6XMmO7K+U0R?= =?utf-8?q?HkWgk8FgLWLr8/fgQkoDvf0i3laod23x/y06N28Rr6EwXi7sc3hHdCShUjxKUDo93?= =?utf-8?q?fhSa/s5pdFx5xw2GF1dsa5gFGfuYiaRFiL//8MjTTxVF5v6Su9qinPwvjJ2kOkaRV?= =?utf-8?q?s3++ofNSGd9iY8C6AlcfuPpqo81r8b3SH97KgYjdq0HjBEyI0KWB3+eGCnvGUUyJ8?= =?utf-8?q?BvEmaQ7PkdOcUf9eF3yBv5bTNfjb3J4KeMgvHRdeXgKBWj/2JKYQ+sicmE4tlqvXU?= =?utf-8?q?p6dpL5J7deLqutYz7LPPeW2zu4dvGYEW+z7O9K9xNFj9PaEbWKAc0X8EKqkOKxF8F?= =?utf-8?q?k+1z5Cr6evtNEuYKYKyU52L4FV1jleY7Mq4FbrYIzoaMQaz274yuxQ/oRMxLAsXam?= =?utf-8?q?kZgdFxpaicfmRXnNxCNdlXY/PrqBXrMTLJGBDEVuze9AGhybKmYugz2IspQJ9fZ4b?= =?utf-8?q?94LxoK4RgUhSxFHAiB4UKLXZHhNjF3TrWsDYG7KdVoMt8rgue0ye3TChaupnRNspY?= =?utf-8?q?AxTjCK2rUJ4bYZtfS6V8IY6t4u2IDm6/rN6O3ylBbIn0TwNn3m7aHx1yx/RAmB7rC?= =?utf-8?q?MNmZI0Zhb6IVOEo5FimCIbJgTlT6QfVOxH5FpxG0rvBHJOTvmKO3SGPbMM4b+HlsX?= =?utf-8?q?G8pduimHQgrzs8CZB1zt4Lrp+TFoQT2Hr7f0y9mAyTYPFZOOHxK/L+oYmkz7jKJJg?= =?utf-8?q?pCJgWEiNXRYz+ma1xWVXzzEU6AQj+BsiPM7tki95WR8aKnLcDzUbw5MVI9Oyl7UsP?= =?utf-8?q?PMCkmoCm66hhhgq+u6COr9EwWKitCAO2aQ8p+qNREqRrkY4km41+rOQqUEztYxEbF?= =?utf-8?q?im2gQde5s7QsKR87V4ejVa+HnYSuiMg/aOa3o6N+suVlXwYKWA/Hg1S4zIBnsiHsy?= =?utf-8?q?9fOsqOEmdJJ12tB81fNZzSGhK/IXR+Ff6BHT6QvcR6ZjBImMvMPnxxE=3D?= Content-ID: 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: c4372143-42ac-4cdc-61d8-08dc74aea0c8 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 May 2024 07:14:15.0089 (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: 5wbXepameibmKyYB29GPJV8lTkOkpwbwcIYEHo0GPhV0iKO7rdMbhenr81dN5kIdruBvlXzukI6cH4hs7Y7Eb2g822zomxHi81+zeZt7xDVpNDAR+RI6LSYzPX3qAHFY X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR07MB9896 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 Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 25 +++++++++++++++++++++++++ hw/i386/intel_iommu_internal.h | 3 +++ 2 files changed, 28 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 0ecf00f37a..252364893b 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -1913,6 +1913,7 @@ static const bool vtd_qualified_faults[] = { [VTD_FR_PASID_TABLE_ENTRY_INV] = true, [VTD_FR_SM_INTERRUPT_ADDR] = true, [VTD_FR_FS_NON_CANONICAL] = true, + [VTD_FR_FS_BIT_UPDATE_FAILED] = true, [VTD_FR_MAX] = false, }; @@ -2038,6 +2039,20 @@ static bool vtd_iova_fl_check_canonical(IntelIOMMUState *s, uint64_t iova, ); } +static MemTxResult vtd_set_flag_in_pte(dma_addr_t base_addr, uint32_t index, + uint64_t pte, uint64_t flag) +{ + if (pte & flag) { + return MEMTX_OK; + } + pte |= flag; + pte = cpu_to_le64(pte); + return dma_memory_write(&address_space_memory, + base_addr + index * sizeof(pte), + &pte, sizeof(pte), + MEMTXATTRS_UNSPECIFIED); +} + /* * Given the @iova, get relevant @flptep. @flpte_level will be the last level * of the translation, can be used for deciding the size of large page. @@ -2083,7 +2098,17 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, return -VTD_FR_WRITE; } + if (vtd_set_flag_in_pte(addr, offset, flpte, VTD_FL_PTE_A) + != MEMTX_OK) { + return -VTD_FR_FS_BIT_UPDATE_FAILED; + } + if (vtd_is_last_flpte(flpte, level)) { + if (is_write && + (vtd_set_flag_in_pte(addr, offset, flpte, VTD_FL_PTE_D) != + MEMTX_OK)) { + return -VTD_FR_FS_BIT_UPDATE_FAILED; + } *flptep = flpte; *flpte_level = level; return 0; diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index e9448291a4..14879d3a58 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -328,6 +328,7 @@ typedef enum VTDFaultReason { /* Output address in the interrupt address range for scalable mode */ VTD_FR_SM_INTERRUPT_ADDR = 0x87, + VTD_FR_FS_BIT_UPDATE_FAILED = 0x91, /* SFS.10 */ VTD_FR_MAX, /* Guard */ } VTDFaultReason; @@ -649,6 +650,8 @@ typedef struct VTDPIOTLBInvInfo { /* First Level Paging Structure */ #define VTD_FL_PT_LEVEL 1 #define VTD_FL_PT_ENTRY_NR 512 +#define VTD_FL_PTE_A 0x20 +#define VTD_FL_PTE_D 0x40 /* Masks for First Level Paging Entry */ #define VTD_FL_RW_MASK (1ULL << 1)