From patchwork Thu May 2 15:29:17 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: 1930666 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=eviden.com header.i=@eviden.com header.a=rsa-sha256 header.s=mail header.b=gPsT8bXM; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VVdHr1dL1z23hd for ; Fri, 3 May 2024 01:33:28 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s2YNY-0003o3-72; Thu, 02 May 2024 11:29:48 -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 1s2YNW-0003ml-As for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:46 -0400 Received: from smarthost4.eviden.com ([80.78.11.85]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s2YNG-0005z0-Bv for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1714663770; x=1746199770; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=gouuSI73YO79A3pxghx3VxnSjCaNE4VgvnGoPug7hsY=; b=gPsT8bXMFMBjLqgHzeAEaS5dqVM+Ij7ftldqAV/qRIHed0TEcjKHlPs9 liZmsyQoHx/f3YO3HZ5vIjITnLXsm9bR82oJtOEE1NAAEkobnaKS0muYY R4c3ovOsVSKgOvVJxT9fgzW+jciXPR6aIB9isij68DQ0GF5dfA0ws4jwr SMAC0v9V/N0MQxMkjp8DZPKa+PzBfpVlRalf4Y7Tk+5lrhCQNETuqS3Ls BR1LNu40DDIqybBOoRmZA61hknOwEbYe6lvcBzRB+BwousOdFgdl9BMLX D8LcIwEc7bldjcXEsr15DCevCazmwOOpHsNSbRDWeotq0kbveeqOfcioo Q==; X-IronPort-AV: E=Sophos;i="6.07,247,1708383600"; d="scan'208";a="11785877" X-MGA-submission: MDHNQtB7hKQPhwM+Z9nxgpLMQvBBJkJCDhA5/1ku24GH7I+HEJmd1fpC8RZHTBlWR8qGbzGph4Ux6FSd/uqDw44A+kgizpHogMpNjPa22HyYWcUsizlL6hQ/hVZyNjJki/+3cI4Z7TsqpVMduw2EvnYLXprip315wkUCmG6a6k/p/w== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2024 17:29:19 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D6ADbNN6/JcKUadYJWqEhZ8ppvGHFXlPHtorhPAp2fgUkX57ZO1kwUdVUEyf6O9yo6lwIoJxAlLuVxs9dvMFdHkvenC1mQyx4wSYA57gfvUOfpHAqbk3JlwlkFtjk19eRNyTOs8+/H/2jx/1ztTJuM8ecr5L0Unxo+/JqaXJk+nXpVuI1LJffaNglLF+cPT7GfDNkSoMe5ao83DKTjITp+FvwhgnO4jVqD8V/DsuCI325GiEvHfjjQR8LpEd7V1b99jQGOv24GtEDEpG/j01T6JqcfKHeKWqsLGthXVgF9aaofndID6RJ9YAjIZCy3fMoBlaxCRz2Rwdpa3tJEpPqg== 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=gouuSI73YO79A3pxghx3VxnSjCaNE4VgvnGoPug7hsY=; b=NvJT7gnnwMIEWJPo4GZXBaSDQF5mkTmaFlijPkbBSJeTs22ZzVL2TcQVfHJmCIOnBwOTfHeGUYJqObPHGzj8RyzsTxDeY8eVZcraLWu/RoHGgbcrGhPt6bZPMobU9lCwLKDViXY03MAeqwn70YOY9M7qmzuF3DC79xA7Tx0UxEAVg2eK6a8vuFDokYtdpTwFU3dbX/NZEyG9CZRJyBOVu3gl0tR0tpxlvg6FWNkoIT+aMXXvlzpwDrximEKbcMTXJ+AI5WC/cssz8LVvCFjfuIkB/effCS7D+4FpMYAnzVSzJ11xMQC095Y1rUJKdaoXJcJ+ZhhUMaPS4Mo0WZfsiw== 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 PAWPR07MB9661.eurprd07.prod.outlook.com (2603:10a6:102:389::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.29; Thu, 2 May 2024 15:29:17 +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.7519.035; Thu, 2 May 2024 15:29:17 +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 v1 04/24] intel_iommu: set accessed and dirty bits during first stage translation Thread-Topic: [PATCH ats_vtd v1 04/24] intel_iommu: set accessed and dirty bits during first stage translation Thread-Index: AQHanKV/mhjM4ak/Ekuu9if0HXvkSw== Date: Thu, 2 May 2024 15:29:17 +0000 Message-ID: <20240502152810.187492-5-clement.mathieu--drif@eviden.com> References: <20240502152810.187492-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240502152810.187492-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_|PAWPR07MB9661:EE_ x-ms-office365-filtering-correlation-id: e0a055a6-711e-410b-e5c7-08dc6abca189 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|366007|1800799015|376005|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?o76tYTt0muI9HcCoFCX0K3Alftcl0wk?= =?utf-8?q?jhPoLpy3wPMWVhZyZQ3QoISq8wnA67MJLYkh7YNu6QP7JcpxMO2qbmc2r3qxyQ9yT?= =?utf-8?q?ccfvHA1JSIuMnpVu5Na0sV+Vsv1MMLc+rutkYufwRDI+f24TTKimSgYZaMvnIvq/o?= =?utf-8?q?T7alm56ZHzkucatqqcNEXvklCftT1TPeaOSUji03iQqCfwoTZ8/H6BbvQo6y0Iv9r?= =?utf-8?q?QdgvX+8CVQvXTu87LO6JeM0GAYY2UJ1enKQ1v+tqS25kubW1hPNhxnePrUxCJpmCB?= =?utf-8?q?wsU7/CpSQRxcCxV4VCPt8fmtQFIB83QdqVtY0e/uFG1GQkbZDhY6gNxXLxoj0imgA?= =?utf-8?q?odm1mtkh63woNruizOy8yzhO+UnZdu+WDMXsaPCYgAICY71k2Jcf0P0NjV0zNqf8O?= =?utf-8?q?tjSOEnhx3FjpO7qayE3S8gGH4A2A/Smt5o+KmgoJIHd/iuC8vEo7UNCSBYmXTFCxv?= =?utf-8?q?2j3qkkzlVt2PcITzAekUe/oRiP/EnFtfhyiNPl6DOM+agWyl4uqS5oYmWlUyBDrs3?= =?utf-8?q?0O7mpBN58xeWZgWN7ZFfz4skFe5hsEC7mVFkglF68jcvqy3rdmAzyBHFpHPQSufMy?= =?utf-8?q?hrKIRVo44GwvRXHR3hh0HG/bAiw8+wGtQ+IxLIWpIhR6CzxLTimyyHVZkO9onom3g?= =?utf-8?q?O28B+fa3QCNx8N7vjp7ZbgA1D7L7mr3XW+rgeDTnq81j2oHRc8OraXEdotxDm9Ef4?= =?utf-8?q?LwmLLmVzIW4ejL6jYMZMftbPJAimj10Q+G/T6LVkOEgHd3YmbY1Nj4jS+pSVmE7zc?= =?utf-8?q?Mif5tuMrClQf41eUpxQKJrnk3/GyomKMxWsWQ4957n5rBHnXfzjonwYXZatew44x7?= =?utf-8?q?mOTTH/P+ThAHjtbV8/AFX/pyUBvLkYN1VUyO4ENUSfFOlDSxKX7zD5dFm70I59MXp?= =?utf-8?q?IO/ab5PXXnFn3oFA9VrC0/DSmpcvVH3ikbEow2HOptmo/q47trLfISIVtX2UqEO/K?= =?utf-8?q?TRKAUMOYo3GGVFh21A5Ag7d4R768uIwUr46suaqMk6No0CoYDgF7XNnH6DNO4IF+7?= =?utf-8?q?HyNYOHJdJCQ2rwrFihWIqVOsvywOeUrRk0+hk8JK5V307RuxBU5EVbBpmBag20b/c?= =?utf-8?q?RnRJOTlGGOz4BAarrjgkW3Yd+bdlC8/B7omEdVvUyij3MxunBCDuolH56+05ovMx4?= =?utf-8?q?/Or82of8jmAAyxsSDDDn+nHgwAlMKp1ON4JWSA6an/FZEjRC3WcH6R+Yg0g3oDZc4?= =?utf-8?q?bh7f4LeA36rYFJS4aKVNoXEyIIe291omEioIYYrDErTE7I6zW4WpZEnjJI0VugCWy?= =?utf-8?q?5b0+l8uufPeCDRRY0NN/M9ihKgj85scfjeA=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)(366007)(1800799015)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?uIYrROi6MCaielZEymABBOrdjJ/r?= =?utf-8?q?hh+GhAUbeFwET2pfD2HAbxcyETI1TpmzRiEs6pgsJ6TqnpYi3fF5R3V4Z6WYWFcYE?= =?utf-8?q?pJOWc4BgjK55HDOvxmhN+E3OTXuHVAikTResqhv9H3TXDl11e3WRVFvb1cgNKszOx?= =?utf-8?q?qfLW2H4iJquX3xlCY70ZKswj/vkW/BMMQMZh3CbX8G4ztNqoqKFo8I1hH5K9d0V/g?= =?utf-8?q?fWiZh341nM6PduD8fkz2tW/mrbnCkwYOFvjzDs8qz3+5a5hNV+OgCKXRKDehvjmMi?= =?utf-8?q?MEP3fuj+smNa4qH9S1C/WT4Cfw0qIorBSnmZDxrQWKAYf6K/UEu25Ch6PSVxctYm+?= =?utf-8?q?wML0zwdSrCGT7A8tj7urTcdx5opqk9gVkz9W68rRO0mc/yaaQA8x4WoFDH0MQb2JI?= =?utf-8?q?NoQbQClUcfCOhCIyje17rKnQv9W/g3VpiZ29kypB2Q3wbEqdirrqSmEM8b+NEVpNX?= =?utf-8?q?4iXlv79dVc9lH7hl3NWr6GF9YajHsNd9vB0dfmSqtYCnDVoxFvpE1QVaxuiQjEErT?= =?utf-8?q?o6FyRf5h2cPN/ZureEGwHY+DQAexMaVYrd7tgiddUSp/TALQXmmzqNrdPPDHV4aDF?= =?utf-8?q?K8I2nJyIoH3zqZFJLmAFDOYPw1TK8YOLbb64PTU3oLsjgx6aaOHEqF9epLO0W+77i?= =?utf-8?q?Saqb1hPIr4Diz96p+hqu1tPMUMkgfIHwUb1mJ9Xl5/z7BAjpZku/F5ZrzJoW38SFk?= =?utf-8?q?H091qGcBEMkXiTw4pxSWHI9IRwe2v0tcsTpwBrhjvJxJ9dErSBeO1zHiT0DSg8K+B?= =?utf-8?q?kAGb13iI97N4MNhzsFCLKQoRO8cPVpypsWnUpqYyq94TQcXle2G9tbP6DjpLo8IRx?= =?utf-8?q?J4Au0OsabKn0wZ9FBqQHnUqijj1JMXVqK+05Rzc+8SQpqoe0i3xguZzqGTve4ydF1?= =?utf-8?q?hUcYTkfjFgNuUIQKs4wM4khX4TqX+bbW+o7/FQKMsoeF80JDv8EOBLnbCJf4pq6Fl?= =?utf-8?q?jYzRSBShjrJ+zOEAoCBWtR+pupkPZU6GG7ILQE5TS2fbOSFbzX1hJ+fYMWsfSxL2s?= =?utf-8?q?Np02whKQdB9rmTUPxRVCtN85bOUOZj8Fzt7VEPgBNVIxBW+VVaKThxLwiGYwXQc5o?= =?utf-8?q?rEZdUfQGLtJkX1lcEV7M16veQijcWmcPfryCNH1CK4hoI/JYlqNB+VKXafPm8POF4?= =?utf-8?q?/u46VL19tCQTs7ujuG/WJ0GIfWIQo3Eit29WJYdFJy0rpczOrtiJIz91s37KuQGOX?= =?utf-8?q?FLpATGbwoDOL8HFl04hcM5uSv/8xPfyQT4Hn3LalcZQz+FOTTSbPmr1iGm5UbcBi8?= =?utf-8?q?UjhNJ04mCrlpQ0Wfn8zYpQNLwByywKe0+g6zJVXWw6doSuVgmb9ZKlg00Rz3ml6ND?= =?utf-8?q?EAmEDeK37NJhnPFrUGLgba4c88Y81myJZKH8jfg+vSrRblyMqWZSZPUnBwFk757Bl?= =?utf-8?q?iGzSeVJmrjPk9ZiVDIwH0n1loLHiWNvp3R1PBd6zynS9f11Y3eM7Al4YHut3uuhoo?= =?utf-8?q?dXqy9BVpYFc3FqZ5Uef31gD2qnNOqtv+YNpxLBzl0RvLzphsN+4kFSu/QMuAOqvNQ?= =?utf-8?q?iAIbWHIvqWo8fyUwJxzxbZ4aukbE1PKlGnGHzTpWQ67fkF4cEoWotlE=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: e0a055a6-711e-410b-e5c7-08dc6abca189 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2024 15:29:17.5817 (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: eO5s+VL9VErq2nP3qHlVrJgn0mDriQskyfOc4HtB6K89IbiV+6SC4tvBicYwHB5ePqkFsmsYUBBu7cprPGSvBbd/opD4pEPglMtR+K8tRqW9p79ClBPhMUs910KHGmj8 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR07MB9661 Received-SPF: pass client-ip=80.78.11.85; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost4.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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 26 ++++++++++++++++++++++++++ hw/i386/intel_iommu_internal.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 240ecb8f72..cad70e0d05 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, }; @@ -2039,6 +2040,20 @@ static bool vtd_iova_fl_check_canonical(IntelIOMMUState *s, ); } +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. @@ -2080,11 +2095,22 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, *reads = true; *writes = (*writes) && (flpte & VTD_FL_RW_MASK); + + if (vtd_set_flag_in_pte(addr, offset, flpte, VTD_FL_PTE_A) + != MEMTX_OK) { + return -VTD_FR_FS_BIT_UPDATE_FAILED; + } + if (is_write && !(flpte & VTD_FL_RW_MASK)) { return -VTD_FR_WRITE; } 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)