From patchwork Mon Apr 22 15:52:52 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: 13638646 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 2C057C4345F for ; Mon, 22 Apr 2024 15:53:34 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvyZ-0007E5-6F; Mon, 22 Apr 2024 11:53:03 -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 1ryvyW-0007DJ-OM for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:00 -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 1ryvyU-0007bi-Qv for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801179; x=1745337179; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=4cnIcDoqGHDL1Z0x70yJNdcDhiQCEDUbH698gtLc7kE=; b=nG5aTr3hJWu7UTPHJtYzEa492Z0CuuLejTThjkO5ICOgXR8Y2otbopPk 6hfigrB7bCvUDZ0B82dD4woz1qgr1HyvJRfmVTIp02AW9q5b6rTlcB+dO tsAQh8j4vP+HkLttPk7yMQsJxjlZ9zfkhqo4tlX+5senLKnv3iwgGun/O GXQuwnqsFxn3peZ+XOgXcFaA2z2W/42sLPH7uS0l4448PwtvkutvxL5qf GmnhYOfCQeMVuAD4Xe0V14JOCmX+qjXf0Eup8AYB8Awqw/Alt5v9iptbo VyCYmW6S8AibPLqVzJnn+4DtSOxnGGl72MgqZIqPFqTG8MpCcsBAh33A0 Q==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027665" X-MGA-submission: MDHJ37PvaTsQTQVLnmavDLm4el/1eeDDDWgdMI/+e1wunmKBenyQowoL+MyhNQX9VzyjgXnXag8mSF3q+lURaVKmPyBafvIzUh5oJxMrfj/gFGDHCKMu5oC5z00PFXeVIak+vD4rAl2dEWlQfjGxac+EqnAqYsW0jel3psINO1K/CA== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:54 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ivKfQXwGrGOigYZuFYqHhiV6InQoasJsqpn7pauYKPg3lpM8lgVUnkS80E6fAZnUaKAkbFw3ZJJxCFrAvSgNjM6YXLlr//4tsOnwIs05Ew9B0O6Mbmmb+k9hhY9i9sj/YWMPIXosu2jeWq5O2JpkBa9IP/aA7lBm2K5P8/oLRqqUrpb0Fx0Rw6SO+6AVXnj0nIRDI6rdoEMLZ/yhQojqyfEpjRYsZ07hHh1jXPA0bUEh5SlOtMNM6OJyOqrM58pgtjxuHJCUUd/xiJ08/s9GThZGvnJawdPrGEwdalKwrkqTjB2uVnfMfO19QhLyRzfO7Z3MMiR5BkVDknAdbBBMRQ== 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=4cnIcDoqGHDL1Z0x70yJNdcDhiQCEDUbH698gtLc7kE=; b=bSJ9bZuAqy5qQMdysOiOznzqh51iONcNbhhFp71a+js4LHi6rsoJ8VvIBTf91qzS10dlZBq9TasZvZiWoZH54gJC5INvqsR/cs2+h7X+96l9YIpqopzqaDKBnp6KJW6JtAR0EAA4naeKw6yqQ2vbQBnb8OUIfePDbYWDBgElUwCT6jlb+VOUxtTXnIFuYJrru1UOdwENdS+Rl927mO0/tswolLlisjDlK9RCLbjnBBJyAFQyzHpsOLBt45eqM0PnH4CicS9Lw60aw1CcacRlZpSXpAndRqeQlFRm50hkwJPKTl1os/WZ5DJzX/beyJ4GWBBd4ZlXXsEEY6hPebMHKg== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:52 +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.7472.044; Mon, 22 Apr 2024 15:52:52 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 1/7] intel_iommu: fix FRCD construction macro. Thread-Topic: [PATCH intel_iommu 1/7] intel_iommu: fix FRCD construction macro. Thread-Index: AQHalM0iDk6hOYr1Bkut1qmJ4l2A4Q== Date: Mon, 22 Apr 2024 15:52:52 +0000 Message-ID: <20240422155236.129179-2-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: e63b34bf-bb6b-4008-e083-08dc62e444ee x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?2rrQfjlboCTyV/eL6IOLsWOqj8vQ18N?= =?utf-8?q?b/ndh61sUVVast/oork2i19C89vYfHjjQQA/CkdMzJyhns+DMH2yRIq8pkUt1cES8?= =?utf-8?q?nfJG7dS0BOzPz8IwFQF/3C9MqgLRujmJDgVo8l+XAISzNmcczhF8UgvzexYM/a/1T?= =?utf-8?q?NbTurgrM1WvTorL/KwEN4TKOzvVPx6X3h/PAa1INGrNrUkaeT5ZJhdM0J+u5zUe9F?= =?utf-8?q?qGqRTMDmLev5OOajIJqXj5sa/sVT9V+YnYCCaFCvW8Z6Xk1wJto1ZsvlY8PWkUKGK?= =?utf-8?q?QjrRq2r2IgSS8h4MFCwbfsOkws9dBTmzqKoKYldMSEo00XPrBTsKKPKTPPIr7t8AD?= =?utf-8?q?8VzMBh/DHdyt0N7h3mvncmk0U9sj67W5PUxrPwC9W2xVtEmEHeBAdBJJrdXAonH8H?= =?utf-8?q?fuABnsK16CfofWzR/1fRivYFIgK0cPn4rh6/dBcob53JEtnY8eN2/St01mHFgelEH?= =?utf-8?q?ZmK2NP4o/6XkG/B0CGX/O3MBJbTE87noitTLlmPG/utLCIk0LAIz+iBKyhgpZLuLy?= =?utf-8?q?hfBHu3ELPRyyuSmIerr8FYxDzeXBo30h8HvyMz/k7gB77p1Rd5Jd4vaxpFhDIpl2w?= =?utf-8?q?VpH2Bznd/xuPTM6/LAPC8CtWThsTHuXR4LBK04NYwoscIbu6HmaUBjybg+/gW+xoN?= =?utf-8?q?fQ81S3+ZOsQvPCZtEqUWkjzKDolxm9K9pfa1u4kcc0qwm6vE0xbiWECvpiSsFv0JR?= =?utf-8?q?i5xT0/xbpYhqvTIr0daRrNnj5A8jlM/DMpSJo27mVJogrSadVw3OwCxjXHkbxGSYt?= =?utf-8?q?0fPMZ8PzaieFYyvRVbxZ2Pcrt/2wz1qgpxgBFPmycSMFsr/xfKkKUHyHxqcJpfR8c?= =?utf-8?q?j5b7TRe3RKF/36HS97QmEL35wtM7+TA2MZ6YDgePlJ3hKd4f2+fnt4QmfRZYX/7Qi?= =?utf-8?q?ZI/Yjy6VqLId5NdK+H4eW8ewcBFRUKOl13xqTVaPQi3pHw81R9gz+7GDTPPlQD8oI?= =?utf-8?q?wd35J5d3SZrQ7r4A0V953g1FV3DAw7uMLnqTEcXPHAf6CQPzwCifppq04M9S6FG8B?= =?utf-8?q?gyiQjbB1AAnZnnwCEqhG5cAUd9QwnsjNPUUHn8eXdSMf3tAvQ8llQA4Cw6WwXhnqy?= =?utf-8?q?Qqcy5NMeVpcIn9OfY3JX3QcMQOTqqyYl791uLpz/ilSAaZPqegALCL2FbQxO7lXfG?= =?utf-8?q?wA77Kgt3Kzhk2zNJtEDvKeH/O6BYc1qrO1qHSiuEgswcLRIIXPb6GTYTxe7nLNUZy?= =?utf-8?q?mHXSYXESVlDjK01E67f5V/q2WhCCgZgF2jR6FBdCRlGOSNRDHwALybdrjdrhGGl3o?= =?utf-8?q?Q7ucHwwbM9rAUyDC0YYEwTQGYFXJxT1MRiQ=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?Yi8nGsRsZdvx2fge53zYB/wqkXBp?= =?utf-8?q?zVHxMeSkElmHB5yL1DHtYknI6ZlJzhOm7dmw9pDgGhuhyq8+ESbyi38D963cNm54B?= =?utf-8?q?BKwfSh9jYz3+SNN3T5/BkAAiE8VYv9H5YO889/XhLZcGFl/OYVqGW4AdT8Pm/GXsG?= =?utf-8?q?fCvv5s5gLRu40hKdMHhXqHx6kG/8uJh0KE+3pwM+VCojT7Xvt3+lXYWMj6f+otpY0?= =?utf-8?q?PxPsPpFa3uNOK+aif2OIrGZ4oifxuWqfAdY5edUVD9CtITD9ss0XYQ1BCt30yt0YR?= =?utf-8?q?adepekBTye01H14N6x3Q1u/3WB2R+lkQIl9jZ1GsT9sgRropyxyn6nHmrO4/Lfp30?= =?utf-8?q?EvKX3OTzFwDwe5wggZ3OxWoqr1IJbQHkBM3h5ODGEC336nSSjs+DijTwx5Jl1LYjD?= =?utf-8?q?PeCk3vfhXi8lf6IucDzn3lbHH1gRbgdIEWmhwwT6yO9Uca1skU+LGvYIwz0DPFgJy?= =?utf-8?q?1lsgqwO4TG9aJhH1hLpduFh5Dg/lMC/fYgADHw08+ClcJ27GvJw9DN8Qd+h9CYwSA?= =?utf-8?q?E3AiCq66CaEKOXoKAWOjVg7K27UIyiLWjKeqkSz8nV/wlA7Ft1wAm+AMGuGBRA2oj?= =?utf-8?q?llK6fMPhtpkBAtvpbgdSQKypca2Q1BtZtaxMNDFq2ZJJwArgFLQZ3nP1/A/24moH7?= =?utf-8?q?c96Q6+QFgE3R+71p6pvVR/2RHLEy3tJ0uzJ5rxZKloHhhaqmdKi7qEmUOFNHex0jt?= =?utf-8?q?j258ZmbgTtLe5Iq2T8Nq9W4GzBp4lcxZ/QY1GnlEW4F5U6fWImtQPtiYah+IJsvZY?= =?utf-8?q?BLk7kEf8e66PbEUzxSZ38YH0VwHD+9Z/YSwQsas1sJ5OYyIW2tJWxcq9Dor8PPsPi?= =?utf-8?q?gACc6tkzjCyt6w/YAo2QszG9F16zxRRitK0bmMguhCuRQMWS/PGxeBoursWwSPDda?= =?utf-8?q?e8EeM/LbEf9ttjG5fIQDXDUasxP66+JpjPSmE+zVTnzztf8affdGfnpf9jufijPMK?= =?utf-8?q?5wSCl2pSul4+edGfHZbfaOer1/EH1QqcVUO8dWk3lWvT+B4pceJPETCl5y3B0T5SR?= =?utf-8?q?fU7xaAUAdP21MIGPRUkr9siJueA/ZovG3b7+sl9JZYOZoQtelPS4o5K/96CL5ZhH3?= =?utf-8?q?FDu5BwegShU8/u6HQ8dBzCGkQXh8thPSbRzT1at21IFQa7jPvGL2Dx4pPDoYpYVVE?= =?utf-8?q?FX4xsa+a4/xKnaFS7EIqtZZEct6XXs02ygd93AkWBqDryY1LzcXmm/eO/wR6FprJ8?= =?utf-8?q?j8ofkgcKLZ5Vd3ButdSDL4YiRwzDJfhGaTjQJdiYxpB/0x0idwG0D2zwZ1RDblRaY?= =?utf-8?q?G/DOMahiaB+2maDzccl2dKcMvW3Tl9kHxbKhFRsin1+binPJKbi7xIaw5KqIPMk3v?= =?utf-8?q?ljrqKSonueucLTNeO7x0NbMIIaLYVh9dfdNOPk0ofcWwswWfhslWQ/51VGHjt98JH?= =?utf-8?q?k14ZnTeGqEZgCvr9CxKRtObQkWinXpmGMg0eyRGHKoYhHYm+apGMG2pEvYCwarTSX?= =?utf-8?q?GcmROhiwDymg8Wp4mO7nMvG5on7X1sIFErpGInMcgvAOvAwTzEaoeq2wOfWsKaCdz?= =?utf-8?q?rKzdxeDlc649he5LZTYPEYeKHTw8z3PYAZJq26Mkaj9nXZmL//z98R0=3D?= Content-ID: <5561B50DE06953448E44197C645B2BB6@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: e63b34bf-bb6b-4008-e083-08dc62e444ee X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:52.6475 (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: TqjMOYcFwf5gnZioe91//QxdTKjxsdvKMtAIAMJqYDeYyGybNAtKJi1OVKAL9JdwoRFm0O0lzPFV0imu+6HiW1ZyOuFULNeHkZJwj2FfbL1SzNAj4jrXydZAF/ZoAW8c X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The constant must be unsigned, otherwise the two's complement overrides the other fields when a PASID is present Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index f8cf99bddf..cbc4030031 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -267,7 +267,7 @@ /* For the low 64-bit of 128-bit */ #define VTD_FRCD_FI(val) ((val) & ~0xfffULL) #define VTD_FRCD_PV(val) (((val) & 0xffffULL) << 40) -#define VTD_FRCD_PP(val) (((val) & 0x1) << 31) +#define VTD_FRCD_PP(val) (((val) & 0x1ULL) << 31) #define VTD_FRCD_IR_IDX(val) (((val) & 0xffffULL) << 48) /* DMA Remapping Fault Conditions */ From patchwork Mon Apr 22 15:52:52 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: 13638651 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 E7193C07C79 for ; Mon, 22 Apr 2024 15:54:14 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvya-0007ER-8t; Mon, 22 Apr 2024 11:53:04 -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 1ryvyY-0007E4-W8 for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:03 -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 1ryvyW-0007bS-Dd for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801180; x=1745337180; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=7jLCsNJx8lCeA6DFN4EYr1QUUYAosNseFTCvam9nezs=; b=gDHE7T5K/kWrOBQcu55qalsLhgsxX/vX6DocqpiaXOg6vhlOYCMUYVbc 1+64VMH8O1ZvgNRzeEVypETLxAr32Iw4sbIx7pWDpvBCW6ZC2vCOQUqWs dgf81DhGS9LpwyYHIafDofK3KxegnlgJ4mkVLMZ5zzM4rkwu2xgaCv3NA 1VIWVZ229zKJayz1nOGusUeSoJzc0epP5/4Bx6BOW3g/HyTxLCB2SMBZQ aXuyhjMlOQvDeaouE3GMOkjEAmusDAne0pWgxiEIItj1unPSECq7O3Rmu 8ztKRVzPaHOHgLdMHK+CbjDDh4L9oEhPpoU7z2utA10bQMW7HG2+ALskr g==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027668" X-MGA-submission: MDGysoVmv6eMTPk+neONAIRBoArbk4L7AIc0Z3i814Xo2IAbw6BcDiYjmi9uZE24EkGp4JtaQZjM9lxTZqULvsvDM3RmZJ+Jx5vj5qm03+Ydu5wwlozyJeF1qn+4epWycuBgIcSVXdsElAN/BEaIJaNNlLR0TeELHDXZsxpgnHgKFQ== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:55 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QtnSi4jCUjA0c7sWKilGAiQZNXd2Da7cheaqoP2bZ3F8Ap/kFs9HZiD/8Vl/b/pDbKjWHcxFjMch1cHV5ZaGa/YJh8voH4iDofRfHKi/N12Dzvpuybl0hRm4RIW1ySLk8sFdhBlKnQuCmb0k1LTknYFhmDsdWmHeRC3On1uyWVLe+K/E19y0iydgsSRWZ0oDh1H2zlfOdRVmyPJmupgb8Ili7sNuOurHTiz/xvLk9THJ7r+CpxjetP15p0FueCBTxE6FE9IPdP5j+aWbbbeQh1cY3stonroWyWQSAxJFs77gFYGfnGEgyvOuxKlgRhm+nPCzxYvwVkG5fYp2viwYIw== 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=7jLCsNJx8lCeA6DFN4EYr1QUUYAosNseFTCvam9nezs=; b=L/0gu3A9wLdo8OE6DLCzmYsdz72/kS4xYzNXEGd7HdoWYoAHyQ3G9H0mfPxeKrSq9Zv1mY4kTBzbWklt1mnzhNnO9V/tnfK/jmmEqCljgw3zUDJvJfoKMq8t8sNohWO9gU5hM3ySnGFxsN8E+zaRV7cBXDSUQO6+GNI4R2TaRla0m+DaslSR0dgR4H7rDGxSeB6D+jVV4FRJV767vA3zFX3YqdvA/Mke5LqnLdrEst4b6W4YrRrLWdtTORCZi/Omkbaw3vQ12kh+FG7cxWz2hJZeAqDMMl1vLBNlfWKJN7WAZggYKVptylA9VE13v8gqoyOBj2AYGk0lPaTbtVPiWw== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:53 +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.7472.044; Mon, 22 Apr 2024 15:52:53 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 2/7] intel_iommu: rename slpte to pte before adding FLTS Thread-Topic: [PATCH intel_iommu 2/7] intel_iommu: rename slpte to pte before adding FLTS Thread-Index: AQHalM0iJJ5KBZ+noku2MdxtTQSxUw== Date: Mon, 22 Apr 2024 15:52:52 +0000 Message-ID: <20240422155236.129179-3-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: 2058bd59-b70d-49d5-0223-08dc62e44522 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?03m54tyXmDST86iBEVDnfBUUg8+ja1q?= =?utf-8?q?ogTrIb4wcUZaUxLkW21PUGv+06XeMums7Mqg6Bykgyj+/6Mqh2zmdIxDg7S0MHr5O?= =?utf-8?q?w9ULoagrZXvl/Hs/DAdQLdaj2D92buyx54NHklBWV50S2vs26nDRYC9bYDFWyllbg?= =?utf-8?q?xJKdheEWNqWEJ1IEXhfJGAH5A8XUT83o5kZt7Vx0+DOeqBl11s7W00kryX1FIMu1y?= =?utf-8?q?RRR2G50lwAw5HVPip10C92XQUz0HfnTXC1F4hHGpgJWjS4NZjS2y5Dg4gTFD29xKI?= =?utf-8?q?XX/V12JMYFS9iZwmNvfxO9cuhi8wKNGuEOqn57q+8NHF+HXwx4ltIzWVHVW1ewdaC?= =?utf-8?q?p41OIvZsuGjhY55J07uR/8zD16cWBNqWmT6rykLsmXrMW7/wJCXc3g/7riAsd7+XK?= =?utf-8?q?21inI90qESHRHRJggsozKc+FvSAKkVgq0D37gzCSKBaNLqleCoru/AmN2ds7GMvzK?= =?utf-8?q?9BcqWiDe41tLoh0cJu3xjIlB2weu11Mzi7Kdw2/rGcnEIIrzG7ADdl4D18ygR8vOh?= =?utf-8?q?Ejoe7Pu4rR9W2RHaMdZkwmdW2TLS24uPoBDgQ3ApgCX9O+8L/GySTqkZc9NjKPdfl?= =?utf-8?q?bf9QZD8mH8FD52LXYDXQwGG6HeJH884LyteOiCuUUc/AQRTa5Pg3bYJ1hxg+ipONb?= =?utf-8?q?PGGTW14HOuLs3OQwfaT+NRMW6UtGgfPRJKwOMArY3IIUvLiTUZLL1IKL2aRKMq6AL?= =?utf-8?q?z7WiDp2snFZta0v2Xlx7p42lVhvKV7mkv7X5dLGmlZOjGv1+oMGH+FxKHyL73OQb5?= =?utf-8?q?QU0WcfPcPb4LaECOPi9GVeshnpiCu4csm8x4MgGZcvCnh+RW7V2l9DYA6LmZ9Uf/x?= =?utf-8?q?p+alpe2uswzCML0RKFoal8AaYkAkERbVKmIYyP08QYBteR892ddrASt1IVBOZpXwP?= =?utf-8?q?NGsF7c/e07A3IgomBcZ3Ct+4d8PJOGyyAXGQvellDj7T0w8D3Pf7Xp9oq6g50hoy9?= =?utf-8?q?sLg1Ru0A+YawlwrVTR21S18TlozvPB68+PHJELxxSTB8wgFdaayYvoqpFBm6Ao6lL?= =?utf-8?q?BIBkLLt+jpOI+ILap+7BYZDrncqn97z8SV+wizCFnWVoEm1liu1ks1BK5TbQEGem3?= =?utf-8?q?uzFe9TF5FjF0TqTTMKHb2c4oesyQCdfAv5tEQXFi/KG0PA8+DdSow4ml+QZxMuW10?= =?utf-8?q?SO399jh5wpxMh/t+6f0FAwu9BaD6rECLqYd9/x1hPYNmfbgu3vYyBWXUGbrBK6bR6?= =?utf-8?q?jK8PDzX+L3rynGCLnbyzF6xqvx2wDXLI6gOcnTYF7kid8/QiHS5pxkHnug1DRDVZL?= =?utf-8?q?zTIGwXujjaST5iiklfEoi6uu/hsnWcWZK+w=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?rCV9ULZHG3+shEf/qDoqXiQhJ/Ew?= =?utf-8?q?ughZFlbLofQZdwIG1YPS5v1/ZsUVwWeW6fXAJPohuSkko1I6sm8hFhJTtuqizXeKh?= =?utf-8?q?EFfedGf0Z2OexDGoa6j+CyCvJ/GJeIe8qnS68L2rZPnTJGNUljT4hPerQFRR0PJ15?= =?utf-8?q?70Bg7LTyCPLIPX9/x3DLWy8727lOU1/ufNdIPe9eeCecWOMecTBGaaMdbISrNhtfW?= =?utf-8?q?7WMJ5ojGjcHAtmiRMX7EUze5gs3AiyRwGtdkg9V4q/fNrfDiZUMrOPCI3EcAJPapx?= =?utf-8?q?m4u13AKTgbqEjlIohRwlWKZTqcB0KK3AIyQraMOFiGJsQiy5F/FiwKZMjWTNbo4sL?= =?utf-8?q?9ZLDbH1Bq3W36hohD2ei+FGyPrdHf7u6gb4ZZ+aEThKqvBT5M/3WBIpPfuONY7bZ8?= =?utf-8?q?wzmhKeJBWHCSYTuuW7QsBbFc2xK9vL53nngULJZlK6c8ZqnqP/JbLtTImrbUja4iC?= =?utf-8?q?FTXE/Zb8nTqSF9UeUGG+DYZsxz+Qmj+WHklLe1qmnza2TWUqrD4NSUg47sl5Xb4BN?= =?utf-8?q?MtshmASCkZ+1/9BU81SyEY2A6M2xxVslAiWUW7psc011xYEslEf7WRdufCJVmpcP5?= =?utf-8?q?YQCgNHDcF+vkAZPau+iUJSD1gbkOlK0MKQ+AeOZgJnuMk3sb11RnQ0y4wFJXH1rlM?= =?utf-8?q?uWPyscDVL7zbdGAxHsG0m8aj1jDuCGINqd72Ac/+0IC2J1QIWmad6lEXcjOlN7qry?= =?utf-8?q?1VA0JOaUZ5JR0vCWK2rh1j375IrsYBE1OPeaK2uWzkD/Yx5gcz9UL6rgL4RhhcQEP?= =?utf-8?q?vbs13kGvCqMQnEtj6fbYOUZhMcs+SAXKeK+KrTrtl3GMy71d84bKZhXeb98qVyENC?= =?utf-8?q?9zQKW4ig7zSiRexNnmcTeoE7k+zGjwIMV83MeCDA1v5q+vy8ZGxry0Vu5Wybq1LxI?= =?utf-8?q?ReZkWofypALqoa81U9TZ6zX+1T0Z1tK5kJqFa3PZuaMZkxhEnMAHOZEg7nPY38RXV?= =?utf-8?q?YrRaRie4+4pdQhPVXaoIH+N71BC3T0udHadVGkFxLfEzr2jj/me42FAoDi1yf9d6c?= =?utf-8?q?2k1L3C/WeabERHm+y4S3A7GjHkzIcQYl5uyO9qPR0P7qJRe/2YLUpIwYwGTFGKAUD?= =?utf-8?q?aRN73JdalkqQ9gP5hhs5AwzG+uS/0dd4ERZduXNaRmwdPcj2NYeCaAZmxR5d67gaF?= =?utf-8?q?hoXsZs+aWJyD23KJQ587VHC480yickDVBrz73UlUW5ujYSYP75ppQ0H5SEM2zjI5R?= =?utf-8?q?/3h6dvQRBBSfFOtO5OympGRG9psz2IT0nPOxnc9YKC635dTRF1gHljS+Pg+bq6cv1?= =?utf-8?q?cNclZ8094UTXGMSG5xDlNQEnKQ72RTjRlMV07Voov/U0Zl3iBIHHeFiTiOwa0M9qr?= =?utf-8?q?MU50tTTdxHerNHClWqKbVKAa/Jccg19Al76QPbRce2clc45VsHmsXyDQotjZXcdYF?= =?utf-8?q?qNrTAUQgOXkLwisxGMbBHDvO9yKaAt2PnnQ1qysUiN/xDJr3lBH08WrQKj7iYcW/j?= =?utf-8?q?+JbAzNR6T89X00Dd2Dr/cm7aZ4ponr9FywEXW/P9jfjB+HZ0BUGVDh94+9R6a1F2s?= =?utf-8?q?bBfXcLpewsbSl3k3FQnpP0tdSdOAKxLtg8uoIuiTTlae/QZuxYlLNkQ=3D?= Content-ID: <6A4C84B3AFBEB74B95DE316E4F3AB62B@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: 2058bd59-b70d-49d5-0223-08dc62e44522 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:52.8866 (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: NDdhkzuJ6rrE6X9gqp3OXds6E1+xOY5Trkd+uRLuLy92HweJx09D9WhVFHRNkoIFvbk5H6jZy6x0LtDbtrw0dBQtMHO1XGyc+cY8F171NTw0CavSerFnKz8W6mf1/W+D X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Some variables struct fields and functions can be used for both slpte and flpte. We can modify certain identifiers to make them more generic. - slpte in IOMMUTLBEntry becomes pte and will be used for both FL and SL - VTD_SL_PT_LEVEL, VTD_SL_PT_PAGE_SIZE_MASK and VTD_SL_LEVEL_BITS can be renamed and considered as a common constants - vtd_iova_range_check becomes vtd_iova_sl_range_check because the range check depends on the translation type - vtd_do_iommu_translate now handles both FL and SL so we can rename slpte to pte - VTD_SL_PT_BASE_ADDR_MASK becomes VTD_PT_BASE_ADDR_MASK because the address offset within a 64bits word of a Scalable-Mode PASID Table Entry is the same for FL and SL. As a consequence, vtd_get_slpte_addr is also renamed to vtd_get_pte_addr. - vtd_is_last_slpte becomes vtd_is_last_slpte because the same bit is used for FL and SL. - vtd_slpt_level_page_mask becomes vtd_pt_level_page_mask - vtd_get_slpte becomes vtd_get_pte Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 106 ++++++++++++++++----------------- hw/i386/intel_iommu_internal.h | 10 ++-- include/hw/i386/intel_iommu.h | 2 +- 3 files changed, 60 insertions(+), 58 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index cc8e59674e..6f1364b3fd 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -259,15 +259,15 @@ static gboolean vtd_hash_remove_by_domain(gpointer key, gpointer value, } /* The shift of an addr for a certain level of paging structure */ -static inline uint32_t vtd_slpt_level_shift(uint32_t level) +static inline uint32_t vtd_pt_level_shift(uint32_t level) { assert(level != 0); - return VTD_PAGE_SHIFT_4K + (level - 1) * VTD_SL_LEVEL_BITS; + return VTD_PAGE_SHIFT_4K + (level - 1) * VTD_LEVEL_BITS; } -static inline uint64_t vtd_slpt_level_page_mask(uint32_t level) +static inline uint64_t vtd_pt_level_page_mask(uint32_t level) { - return ~((1ULL << vtd_slpt_level_shift(level)) - 1); + return ~((1ULL << vtd_pt_level_shift(level)) - 1); } static gboolean vtd_hash_remove_by_page(gpointer key, gpointer value, @@ -324,7 +324,7 @@ static void vtd_reset_caches(IntelIOMMUState *s) static uint64_t vtd_get_iotlb_gfn(hwaddr addr, uint32_t level) { - return (addr & vtd_slpt_level_page_mask(level)) >> VTD_PAGE_SHIFT_4K; + return (addr & vtd_pt_level_page_mask(level)) >> VTD_PAGE_SHIFT_4K; } /* Must be called with IOMMU lock held */ @@ -352,7 +352,7 @@ out: /* Must be with IOMMU lock held */ static void vtd_update_iotlb(IntelIOMMUState *s, uint16_t source_id, - uint16_t domain_id, hwaddr addr, uint64_t slpte, + uint16_t domain_id, hwaddr addr, uint64_t pte, uint8_t access_flags, uint32_t level, uint32_t pasid) { @@ -360,7 +360,7 @@ static void vtd_update_iotlb(IntelIOMMUState *s, uint16_t source_id, struct vtd_iotlb_key *key = g_malloc(sizeof(*key)); uint64_t gfn = vtd_get_iotlb_gfn(addr, level); - trace_vtd_iotlb_page_update(source_id, addr, slpte, domain_id); + trace_vtd_iotlb_page_update(source_id, addr, pte, domain_id); if (g_hash_table_size(s->iotlb) >= VTD_IOTLB_MAX_SIZE) { trace_vtd_iotlb_reset("iotlb exceeds size limit"); vtd_reset_iotlb_locked(s); @@ -368,9 +368,9 @@ static void vtd_update_iotlb(IntelIOMMUState *s, uint16_t source_id, entry->gfn = gfn; entry->domain_id = domain_id; - entry->slpte = slpte; + entry->pte = pte; entry->access_flags = access_flags; - entry->mask = vtd_slpt_level_page_mask(level); + entry->mask = vtd_pt_level_page_mask(level); entry->pasid = pasid; key->gfn = gfn; @@ -685,32 +685,32 @@ static inline dma_addr_t vtd_ce_get_slpt_base(VTDContextEntry *ce) return ce->lo & VTD_CONTEXT_ENTRY_SLPTPTR; } -static inline uint64_t vtd_get_slpte_addr(uint64_t slpte, uint8_t aw) +static inline uint64_t vtd_get_pte_addr(uint64_t pte, uint8_t aw) { - return slpte & VTD_SL_PT_BASE_ADDR_MASK(aw); + return pte & VTD_PT_BASE_ADDR_MASK(aw); } /* Whether the pte indicates the address of the page frame */ -static inline bool vtd_is_last_slpte(uint64_t slpte, uint32_t level) +static inline bool vtd_is_last_pte(uint64_t pte, uint32_t level) { - return level == VTD_SL_PT_LEVEL || (slpte & VTD_SL_PT_PAGE_SIZE_MASK); + return level == VTD_COMMON_PT_LEVEL || (pte & VTD_PT_PAGE_SIZE_MASK); } -/* Get the content of a spte located in @base_addr[@index] */ -static uint64_t vtd_get_slpte(dma_addr_t base_addr, uint32_t index) +/* Get the content of a pte located in @base_addr[@index] */ +static uint64_t vtd_get_pte(dma_addr_t base_addr, uint32_t index) { - uint64_t slpte; + uint64_t pte; - assert(index < VTD_SL_PT_ENTRY_NR); + assert(index < VTD_PT_ENTRY_NR); if (dma_memory_read(&address_space_memory, - base_addr + index * sizeof(slpte), - &slpte, sizeof(slpte), MEMTXATTRS_UNSPECIFIED)) { - slpte = (uint64_t)-1; - return slpte; + base_addr + index * sizeof(pte), + &pte, sizeof(pte), MEMTXATTRS_UNSPECIFIED)) { + pte = (uint64_t)-1; + return pte; } - slpte = le64_to_cpu(slpte); - return slpte; + pte = le64_to_cpu(pte); + return pte; } /* Given an iova and the level of paging structure, return the offset @@ -718,8 +718,8 @@ static uint64_t vtd_get_slpte(dma_addr_t base_addr, uint32_t index) */ static inline uint32_t vtd_iova_level_offset(uint64_t iova, uint32_t level) { - return (iova >> vtd_slpt_level_shift(level)) & - ((1ULL << VTD_SL_LEVEL_BITS) - 1); + return (iova >> vtd_pt_level_shift(level)) & + ((1ULL << VTD_LEVEL_BITS) - 1); } /* Check Capability Register to see if the @level of page-table is supported */ @@ -1016,7 +1016,7 @@ static inline uint64_t vtd_iova_limit(IntelIOMMUState *s, } /* Return true if IOVA passes range check, otherwise false. */ -static inline bool vtd_iova_range_check(IntelIOMMUState *s, +static inline bool vtd_iova_sl_range_check(IntelIOMMUState *s, uint64_t iova, VTDContextEntry *ce, uint8_t aw, uint32_t pasid) { @@ -1064,12 +1064,12 @@ static bool vtd_slpte_nonzero_rsvd(uint64_t slpte, uint32_t level) assert(level < VTD_SPTE_RSVD_LEN); /* * Zero level doesn't exist. The smallest level is VTD_SL_PT_LEVEL=1 and - * checked by vtd_is_last_slpte(). + * checked by vtd_is_last_pte(). */ assert(level); if ((level == VTD_SL_PD_LEVEL || level == VTD_SL_PDP_LEVEL) && - (slpte & VTD_SL_PT_PAGE_SIZE_MASK)) { + (slpte & VTD_PT_PAGE_SIZE_MASK)) { /* large page */ rsvd_mask = vtd_spte_rsvd_large[level]; } else { @@ -1095,7 +1095,7 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDContextEntry *ce, uint64_t access_right_check; uint64_t xlat, size; - if (!vtd_iova_range_check(s, iova, ce, aw_bits, pasid)) { + if (!vtd_iova_sl_range_check(s, iova, ce, aw_bits, pasid)) { error_report_once("%s: detected IOVA overflow (iova=0x%" PRIx64 "," "pasid=0x%" PRIx32 ")", __func__, iova, pasid); return -VTD_FR_ADDR_BEYOND_MGAW; @@ -1106,7 +1106,7 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDContextEntry *ce, while (true) { offset = vtd_iova_level_offset(iova, level); - slpte = vtd_get_slpte(addr, offset); + slpte = vtd_get_pte(addr, offset); if (slpte == (uint64_t)-1) { error_report_once("%s: detected read error on DMAR slpte " @@ -1137,17 +1137,17 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDContextEntry *ce, return -VTD_FR_PAGING_ENTRY_RSVD; } - if (vtd_is_last_slpte(slpte, level)) { + if (vtd_is_last_pte(slpte, level)) { *slptep = slpte; *slpte_level = level; break; } - addr = vtd_get_slpte_addr(slpte, aw_bits); + addr = vtd_get_pte_addr(slpte, aw_bits); level--; } - xlat = vtd_get_slpte_addr(*slptep, aw_bits); - size = ~vtd_slpt_level_page_mask(level) + 1; + xlat = vtd_get_pte_addr(*slptep, aw_bits); + size = ~vtd_pt_level_page_mask(level) + 1; /* * From VT-d spec 3.14: Untranslated requests and translation @@ -1298,14 +1298,14 @@ static int vtd_page_walk_level(dma_addr_t addr, uint64_t start, trace_vtd_page_walk_level(addr, level, start, end); - subpage_size = 1ULL << vtd_slpt_level_shift(level); - subpage_mask = vtd_slpt_level_page_mask(level); + subpage_size = 1ULL << vtd_pt_level_shift(level); + subpage_mask = vtd_pt_level_page_mask(level); while (iova < end) { iova_next = (iova & subpage_mask) + subpage_size; offset = vtd_iova_level_offset(iova, level); - slpte = vtd_get_slpte(addr, offset); + slpte = vtd_get_pte(addr, offset); if (slpte == (uint64_t)-1) { trace_vtd_page_walk_skip_read(iova, iova_next); @@ -1328,12 +1328,12 @@ static int vtd_page_walk_level(dma_addr_t addr, uint64_t start, */ entry_valid = read_cur | write_cur; - if (!vtd_is_last_slpte(slpte, level) && entry_valid) { + if (!vtd_is_last_pte(slpte, level) && entry_valid) { /* * This is a valid PDE (or even bigger than PDE). We need * to walk one further level. */ - ret = vtd_page_walk_level(vtd_get_slpte_addr(slpte, info->aw), + ret = vtd_page_walk_level(vtd_get_pte_addr(slpte, info->aw), iova, MIN(iova_next, end), level - 1, read_cur, write_cur, info); } else { @@ -1350,7 +1350,7 @@ static int vtd_page_walk_level(dma_addr_t addr, uint64_t start, event.entry.perm = IOMMU_ACCESS_FLAG(read_cur, write_cur); event.entry.addr_mask = ~subpage_mask; /* NOTE: this is only meaningful if entry_valid == true */ - event.entry.translated_addr = vtd_get_slpte_addr(slpte, info->aw); + event.entry.translated_addr = vtd_get_pte_addr(slpte, info->aw); event.type = event.entry.perm ? IOMMU_NOTIFIER_MAP : IOMMU_NOTIFIER_UNMAP; ret = vtd_page_walk_one(&event, info); @@ -1384,11 +1384,11 @@ static int vtd_page_walk(IntelIOMMUState *s, VTDContextEntry *ce, dma_addr_t addr = vtd_get_iova_pgtbl_base(s, ce, pasid); uint32_t level = vtd_get_iova_level(s, ce, pasid); - if (!vtd_iova_range_check(s, start, ce, info->aw, pasid)) { + if (!vtd_iova_sl_range_check(s, start, ce, info->aw, pasid)) { return -VTD_FR_ADDR_BEYOND_MGAW; } - if (!vtd_iova_range_check(s, end, ce, info->aw, pasid)) { + if (!vtd_iova_sl_range_check(s, end, ce, info->aw, pasid)) { /* Fix end so that it reaches the maximum */ end = vtd_iova_limit(s, ce, info->aw, pasid); } @@ -1869,7 +1869,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, VTDContextEntry ce; uint8_t bus_num = pci_bus_num(bus); VTDContextCacheEntry *cc_entry; - uint64_t slpte, page_mask; + uint64_t pte, page_mask; uint32_t level, pasid = vtd_as->pasid; uint16_t source_id = PCI_BUILD_BDF(bus_num, devfn); int ret_fr; @@ -1890,13 +1890,13 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, cc_entry = &vtd_as->context_cache_entry; - /* Try to fetch slpte form IOTLB, we don't need RID2PASID logic */ + /* Try to fetch pte form IOTLB, we don't need RID2PASID logic */ if (!rid2pasid) { iotlb_entry = vtd_lookup_iotlb(s, source_id, pasid, addr); if (iotlb_entry) { - trace_vtd_iotlb_page_hit(source_id, addr, iotlb_entry->slpte, + trace_vtd_iotlb_page_hit(source_id, addr, iotlb_entry->pte, iotlb_entry->domain_id); - slpte = iotlb_entry->slpte; + pte = iotlb_entry->pte; access_flags = iotlb_entry->access_flags; page_mask = iotlb_entry->mask; goto out; @@ -1968,20 +1968,20 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, return true; } - /* Try to fetch slpte form IOTLB for RID2PASID slow path */ + /* Try to fetch pte form IOTLB for RID2PASID slow path */ if (rid2pasid) { iotlb_entry = vtd_lookup_iotlb(s, source_id, pasid, addr); if (iotlb_entry) { - trace_vtd_iotlb_page_hit(source_id, addr, iotlb_entry->slpte, + trace_vtd_iotlb_page_hit(source_id, addr, iotlb_entry->pte, iotlb_entry->domain_id); - slpte = iotlb_entry->slpte; + pte = iotlb_entry->pte; access_flags = iotlb_entry->access_flags; page_mask = iotlb_entry->mask; goto out; } } - ret_fr = vtd_iova_to_slpte(s, &ce, addr, is_write, &slpte, &level, + ret_fr = vtd_iova_to_slpte(s, &ce, addr, is_write, &pte, &level, &reads, &writes, s->aw_bits, pasid); if (ret_fr) { vtd_report_fault(s, -ret_fr, is_fpd_set, source_id, @@ -1989,14 +1989,14 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, goto error; } - page_mask = vtd_slpt_level_page_mask(level); + page_mask = vtd_pt_level_page_mask(level); access_flags = IOMMU_ACCESS_FLAG(reads, writes); vtd_update_iotlb(s, source_id, vtd_get_domain_id(s, &ce, pasid), - addr, slpte, access_flags, level, pasid); + addr, pte, access_flags, level, pasid); out: vtd_iommu_unlock(s); entry->iova = addr & page_mask; - entry->translated_addr = vtd_get_slpte_addr(slpte, s->aw_bits) & page_mask; + entry->translated_addr = vtd_get_pte_addr(pte, s->aw_bits) & page_mask; entry->addr_mask = ~page_mask; entry->perm = access_flags; return true; diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index cbc4030031..8d27b1c15b 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -518,22 +518,24 @@ typedef struct VTDRootEntry VTDRootEntry; #define VTD_SM_PASID_ENTRY_SLPTPTR (~0xfffULL) /* Paging Structure common */ -#define VTD_SL_PT_PAGE_SIZE_MASK (1ULL << 7) +#define VTD_SM_PASID_ENTRY_PTPTR (~0xfffULL) +#define VTD_PT_PAGE_SIZE_MASK (1ULL << 7) +#define VTD_PT_ENTRY_NR 512 +#define VTD_PT_BASE_ADDR_MASK(aw) (~(VTD_PAGE_SIZE - 1) & VTD_HAW_MASK(aw)) +#define VTD_COMMON_PT_LEVEL 1 /* Bits to decide the offset for each level */ -#define VTD_SL_LEVEL_BITS 9 +#define VTD_LEVEL_BITS 9 /* Second Level Paging Structure */ #define VTD_SL_PML4_LEVEL 4 #define VTD_SL_PDP_LEVEL 3 #define VTD_SL_PD_LEVEL 2 #define VTD_SL_PT_LEVEL 1 -#define VTD_SL_PT_ENTRY_NR 512 /* Masks for Second Level Paging Entry */ #define VTD_SL_RW_MASK 3ULL #define VTD_SL_R 1ULL #define VTD_SL_W (1ULL << 1) -#define VTD_SL_PT_BASE_ADDR_MASK(aw) (~(VTD_PAGE_SIZE - 1) & VTD_HAW_MASK(aw)) #define VTD_SL_IGN_COM 0xbff0000000000000ULL #define VTD_SL_TM (1ULL << 62) diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index 7fa0a695c8..b9a01556ec 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -152,7 +152,7 @@ struct VTDIOTLBEntry { uint64_t gfn; uint16_t domain_id; uint32_t pasid; - uint64_t slpte; + uint64_t pte; uint64_t mask; uint8_t access_flags; }; From patchwork Mon Apr 22 15:52:53 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: 13638652 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 5285BC4345F for ; Mon, 22 Apr 2024 15:54:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvya-0007EK-1e; Mon, 22 Apr 2024 11:53:04 -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 1ryvyY-0007Du-MK for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:02 -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 1ryvyX-0007c1-2n for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801181; x=1745337181; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ESjUTwshCUuctme6QRudtAHCmYhhHel8S50dn9oAu2A=; b=VCkuZO+mMM6DpI3hant1BUtz4V2IRrVirxXWQkCoA1o0iVe92vr7BvyD 7Y32IsGrWOopSRqz9rCJXKerHaB6M6AzWvaaSeyd4cAhAuKaGeTl8DZe8 D3zqsZJBiLxZsgPZHgK7dNhg08KnQ2ckST+TFmj9w2fhixEIFvCa1imah 4Ify0/w08rCMjaLPtGD2TEpHsH44QqDmXRdKuwC9duha+vmnIhhUOV0hH CE8oJimgVt53poLSUpfc3vt9O0EmwbLgYZQ5+0hyWwPjFRTjYr8/n8gAO mW0JnIFxYwTTt6mO2o26+snAlsOK6qhu249pylZG5VqeUvhrpWKjpUM2A Q==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027670" X-MGA-submission: MDGupIHUeyu/bMr96QwLX/Qq1J7CwjAm8VM5sVDdy8jG8FdFk5aJ86MsbbdHMq267N266hbt8emzoJ6c9TD1hlX3eYRrdD3+gQJ+53Ea2a/RjAG5wS8h3IaYptPrRlUzNLbwjjLk6fgxxY+0QJfXGeReso7EVskhzGgKU4bWxT8RSA== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:56 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lerSqTJmQpxT6BhilYqwkF3HXG0LqcLQisVXXzgLIP1/BNhQgW26OdXvIri+KdT/XY0gOaGgFZ4AqhacFwNwLI1Xu6D2KMdnvdzKFmhh3bWxIBYyW0G0DEnqoMdRTimgk5ABqMnK9+WwfqvshZkGaUeEqBgwb2Gx74XrX58/GHCGjPgMvw3XYbGk9UYr/ngLdUn6xggIs2FpZLBDFI5Rt1x87caqHRjWlig1Eb5SVpvE5dZLZ3csCBFLh5UEpqKaK3F7DS+jNOWQnLvEV/OyklUolJPH9Rz7az8kjuvH724+TypEQlaRKAqo/vWYC3aLw4ukaGU/egta7nf6E5CItA== 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=ESjUTwshCUuctme6QRudtAHCmYhhHel8S50dn9oAu2A=; b=RKrZXAF5UePnD1fqsNZFoAAAAM7fu0uiRFH53HguxjPr3UqlS8VZ+FBwmU8Fvwf3+2YbOOxuOWYIx1hOA6WVDO9Lou8rEcqXo/fUyqbFT24UOArU7HogF3ZTRWq70YRgAzO05eHHmEvar1eo0zFSMQRbdf7Nf/PcMacuvLbPnvGksbDS2LprEm1XY5RBtFJIB52WEKwiXz2WDS3SG/viPG2LOXC2OeXrU7vlRUZP2SSwxj4OvRCrLuJo2J0UWQ5hPVquCsnKQ+nAagNrGMYI79mi3iTC7fUQEmF+MxeY7q1BBWj0TKCCNVSPOJwihA7mf7RVImfy8dOJWSWi25Kpbw== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:53 +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.7472.044; Mon, 22 Apr 2024 15:52:53 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 3/7] intel_iommu: make types match Thread-Topic: [PATCH intel_iommu 3/7] intel_iommu: make types match Thread-Index: AQHalM0i32KNWd9K4kWnjKS4kUptSg== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-4-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: ba6e9a88-ea34-4ece-b493-08dc62e44549 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?sgKNf3oH3PXH2jjSbMo3uI2XxopF+v3?= =?utf-8?q?6nYcp+D72RXXtKqqv3aJngBSGvI0Ns14eS/WjiycdkwWn94mxzkEtJUzB7NIJ/59m?= =?utf-8?q?uaXuvo93dIbifXHJGRBmLxetMgMS1rkDT55pMxZV5boK/6qc1dlBlbMQ/c3FKpJhm?= =?utf-8?q?+FT7LwLxVbyjt6LOE/4vGQtvWI+jAPvkCmp5OAUYnQ+b7tM/R1pSIIeFhVIBvUqeq?= =?utf-8?q?7p0a0eWq8aeDMEoSvIg8r3m2H0iNSzs0SpR/iieEEIo7mp6ixnpspscBHMb1e5/YV?= =?utf-8?q?c7oo6NU2hZ0i4mTiSwzPoZYFiKgj9pkb7arqYPfkMX2YKrxY00zsxTfULLxHIld3f?= =?utf-8?q?/3zKUedwcXys1ejgsNA07sMYsufKWD06bjvpWpqTWNYsijyZAkAh6w9C6xkIzPBfd?= =?utf-8?q?3lKApD26geYIoU+DsxGGohwP5VTifoc7/dt3i0/jsmcfv/F3vpXplPXwM5yLPFw04?= =?utf-8?q?fS81xKW6OL0tttU1+qu/4/n3VemVIel9zXD6zri/1GbChVZBdIjNj4LHRSuW3dvf+?= =?utf-8?q?dJn2NZ/xe+YAjf+WJGoCrHO7t81OoGI9aB9BePTlsHvmul0QKVjoCFD7xDEcku7v3?= =?utf-8?q?bNlNkphVPNsPE+HjatHnH0CUZ52at56psnMcGMdXxJ61JTQylvo8NC8BiG7+/LW5d?= =?utf-8?q?vreJWg0zEDJbYQJXge5tLU7V8chFeVrXhexlBQp8/0A3tyd4RA4ZKON/Sr79XTCXQ?= =?utf-8?q?EUoJecnTmIURgBP5L2WSgp064o6ZC5FerQdvTBVEJ+iSzv59A2O6oKSHTjyASxxY0?= =?utf-8?q?kmMEjJoMb1TrBHhEZTf3K+yCAO9ZFVFsWgAbTvkL9MdirAc5E8R2zKiChGA+kOB6T?= =?utf-8?q?nfdihQDACjgSXHn755zFFQgOdx3i4iye0awkriOY4iP6Z9XHwkPDBposAyg4dzWt6?= =?utf-8?q?rTEOgHqhTYyK0MTReObfC2nhd3gwXV993R4d77+fqZ27je0D48bo52Yydi646JkZZ?= =?utf-8?q?HQQL7ygQmR+8gAYvfO4YtI5oZwhnnE9feiy/gjuqC0ulBS0fLFESsWokD1n2fi5CN?= =?utf-8?q?w0rPWnk1ZkewQwYg9ndiayWI7y1suF2q8MGrA8TtdckYnWAW+7yv4qyZBowNIPuwd?= =?utf-8?q?sV1+7x0q034KsEicg5LE3oIlZtbxPTgnYho85S/H7TCzkj2pJ3IpVpE9wUlbMpy4H?= =?utf-8?q?iHzcIc7Wq0vuRJLT3VRxwhACdo4RtKyWGuyvBdr2fT77PN+lP6lcCVooF96QQN4Yb?= =?utf-8?q?TgiJdRxYTXE67YKlV0o8q45YURkgNkXreKoEltLlSk5xzaKNCo9YCqe4ul2FJgEbz?= =?utf-8?q?PqO7d68GwSUHDZaMgYgHOhsFlaTj7rFBUZA=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?AYl7uVl/czn9TAtY/IFB8Bfby/F5?= =?utf-8?q?p9+0H7tcHfB3LPO+H34JX6i7pjmwTaYnAEwHtRPzmivY2xsBqGsMKOYzXxDE+2SBX?= =?utf-8?q?HYn68eczLnoKHvQ+e/NSg8m8Zsn2tKzPVjAKiDMwIvSH4LyUh5kLSHw0rdDHqZXce?= =?utf-8?q?i5cOFvxyN4HoHBCKAXSKtMebrU//Zq8f9ejn2BSaJKGbn87m11IHmH7Lwm5la3/kI?= =?utf-8?q?eM09o0jNNfiMLjtueGsdMdrXQzBoPg0I2LdA95PecffWNdhKPxjNHNX/hdwMeftoL?= =?utf-8?q?fuoNvrElA5wK+6hvE+f/LLoau8VgkwydXFrV4jn9Jck/GxfnCFnmStjTfcE5X7NFU?= =?utf-8?q?NBujJUba3wDqtV4wepWI+EJKQdG6E//Q79/ltZec4K6Siw1cez0YNVsCS8k1ZWFjj?= =?utf-8?q?NPLmU4xRmluqadzbaXuBDJpGY3KZi27NesZ7z1zN5j60doFyJ945xSbWHcrRts6Gc?= =?utf-8?q?BqFy9R4xxKlZ2EZVeeAHT9x7ZDk/XqUWFXqSGxkD64cVa68P2Wco0W9iNExOQ6Hfo?= =?utf-8?q?jAB0cETbKr1Qv8OVvcO+LVkNsYi9aK4ZjmZzzZZU+caXEMaDGuoMh0EHx/g8CON7m?= =?utf-8?q?P3YHZ0moie9pVE/6DTfkQkiaG/YZMb1fRXYQVsXu0dqnxLMYyfiXYmrKHVYmYWrbT?= =?utf-8?q?wat9iZIlZooC9ucV+4TW2vF/Pj2KXzxUrBSq6n88LevhJ42CIbfJb5cx+IDyVaMNh?= =?utf-8?q?9aZ7waJnrFuj+ho/CKlKQHFaaYvWSIUv7pawlo8hImn4P+YwOoCJjONJVMiAtNjTO?= =?utf-8?q?OXMleyEZPezwqoFFBcCMX7QxvSwstYeMXXrOB6tiFQ/JuIjwT1oGXqlvlRsSuKcdz?= =?utf-8?q?OOWTuiW46fUbujZPVj9QJqd0JWZDuJCIwIcOpp9u1QNnO+I0AQyOxQBHx7O2y/7F7?= =?utf-8?q?+R1eEeFG/3mQbVvq8PtFe/Sh51ekTRpK1sDW//FSu4hc8o+szZ7cS+61ZagVdINLW?= =?utf-8?q?QypioBPzX0kbDpSrcwiDiXpxskTAVTuj0x2xhgnocRyKpVIWodMK1TJye6PAJjsVe?= =?utf-8?q?yFIhQ5P+x2mSckQQHUvtwkguJsft4PJdsXRbeZJQJjZaKUXQ4+yYDpCF0/Uu1+yBZ?= =?utf-8?q?x5WCzcpOD0WxIWd8dDp+AH1tMmvMUzzctVaeMV0nE8HrZIQS4XfclDvKDojf2ri7i?= =?utf-8?q?bQxDX7pMopl7R2T5Kk95k12oSp2LX2iqJSoHisBLsTSUZlflCxjuJloEwZPsYZhq3?= =?utf-8?q?YwCjD7KYwLdSRidNQkAXpRe+0Dg2hjTzVYqEfbSQbpk0Gb3qHK7iy++0lrrKC0rYe?= =?utf-8?q?U0zUe+ORFgqjBtMl04N4FMGqF6pn3jZr8KpIkPS5r7Z9Z9jl1cFFl0eHGx1gniJii?= =?utf-8?q?RAJpg9Z7mfTfDtQ2F8hTrvqVvuNMUo7hx+PCPivvveHvW8iqe+FpDZ9q7wJzGmyb7?= =?utf-8?q?7C+fcRNpNExemfM1ihNQzjkyQqZq5XQTcAWo/ZUYB4HT9rLC/pNVwPYUj9z2TwpXf?= =?utf-8?q?WQTMEGs5Pq69hAHT6Lpp457SxIPgP8yFovagHHfslCXNPRvx1PeQGbygJ8rJrJmIi?= =?utf-8?q?3cezAwWROaRAPVaK/MxiBDT71JKTdh8GLrhoVv8bD3gV+bUcUiCnRQE=3D?= Content-ID: <8ECFF188561B0743B8442DC143DDADF2@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: ba6e9a88-ea34-4ece-b493-08dc62e44549 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.1092 (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: 34W9htQZnmFrDEpnzJ+P2F9uJaU2k05e/WUKWQbJ0Osk335O0QBOLWbYKKbdRrzn8gURaGpyjrujOnAaT8LuPORGBuDrWLB8sZMeEawGyAtOqOs8x9QqB1ZhVlYI+q0g X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The 'level' field in vtd_iotlb_key is an uint8_t. We don't need to store level as an int in vtd_lookup_iotlb Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 6f1364b3fd..ba545590b1 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -333,7 +333,7 @@ static VTDIOTLBEntry *vtd_lookup_iotlb(IntelIOMMUState *s, uint16_t source_id, { struct vtd_iotlb_key key; VTDIOTLBEntry *entry; - int level; + uint8_t level; for (level = VTD_SL_PT_LEVEL; level < VTD_SL_PML4_LEVEL; level++) { key.gfn = vtd_get_iotlb_gfn(addr, level); From patchwork Mon Apr 22 15:52:53 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: 13638653 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 517ECC4345F for ; Mon, 22 Apr 2024 15:54:27 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvyg-0007Gc-4U; Mon, 22 Apr 2024 11:53:10 -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 1ryvyc-0007Eo-KR for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:07 -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 1ryvyZ-0007c1-14 for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801183; x=1745337183; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=A//6ZkMyDQVH+O5DOpFjHEE8sA2/YPKnd/qwbDTuIZ4=; b=mjlOAiZRzeemq/D7wicXmj1Vi6KIWI9SRULYvXy6dhcClUWbCyd1uXRs Xb+eKEiMcUw/G4BpbL0ltlLprxH0AwHCwxUvmjY5E5zcInu4euKIdAZVA 0VBd7ACxsgpdHQ/4rUzEwLyxQ2fKYWlWRiFmVfNUAWIWFmjc1WKE18M4m vy+xFwDcxqXJBTTwNrFPjtHpUAx0qxMZMq8iC5IvwqcmVVPc8eVLDivnP /tOLQ/1wI43G7RNKctUL3/nODZEKW1o7oPMpx/rHHcczT32vsjrOZtYrA IZRJkKh6loRJqP5bCY7nXXPFrNp9ahlNOSL2MTXuJcbUUcJnb4w1ZuXab w==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027673" X-MGA-submission: MDE2w0TDNpiD8qfN4OSreQ0o9Xf9QP4shRuEVXhdcX4Fw2ZFgB2lpunDlB3Ij+w+jYsM7/LpwVl+vtoHMSIvwDfu26Gf5iMLUYMSKzwV7JIqVIC/AwLcwdAmpr1BmM/fmzC9Rq5/psCTkhCY0xHwQwvKOM6in8BGhaMG1DL4mgFarg== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:57 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ogqn2IWFzIdVt27toFb8pGSjqflmcjztDm4JKpX0NrKVQl1lPqwmxt9cgES1xl05Y18fxxtOtVn3H6uLck0dHDgB6HyywjzBPMqWuTX9QcK6cOJJg6jySF7greKbiS+bFIDIffkxyB+AE3uY3ol6aXomTAfey2eMDETFoOTIzjf/UOxdw5f2Difd5lPKP7Vg6qYyf/kL//5HStcJYP2WkpjBOvmv1jWV8p/HS/y6uxkXSLjNTRAGKKXorvX1+/p6qO4URMKnwYyycdKTgrpzdNx+h/VHziB8n0NvNIO6EsHj3ke/ZGPl7Sj4IvkFfpdahHJA9joaGtIazL3LOWZW2g== 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=A//6ZkMyDQVH+O5DOpFjHEE8sA2/YPKnd/qwbDTuIZ4=; b=M7fSYPNAo9I+shPTIX/mZS7IrZINK1qjF3wsKed/f3wylIi8eOw7Gv4lRXqZPvG1vAjtofmMtKrjw5/RwwDK8vC33+k8hQmhk9+0NnlqlXUhZHUVTA8zPkdXJaoFlkeMKNdhBWhv5AqNOQ4oswMUEbnknf0OTVvXvkbn/p7KM6Rfta2+iu6wPF2w8l3cNeWsObNLUxqkPhQa6Wzwb0YUcTze/wW7xl5Ez6E5n070CqiaIpwgm1g7jS9Lkyki4FI56OnL7UIPfD5f6mJaQw6hrePZghpEmAL4cQlCIV0pYZFESiCA+5J8epPbWx7uO45/a5hdr+y+/ilO6U1VpRKJ1g== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:54 +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.7472.044; Mon, 22 Apr 2024 15:52:54 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 4/7] intel_iommu: add support for first-stage translation Thread-Topic: [PATCH intel_iommu 4/7] intel_iommu: add support for first-stage translation Thread-Index: AQHalM0il2RzFQqe1USu5Fe1IhjH8A== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-5-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: 7cd75ea8-5305-411a-4d10-08dc62e44618 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?73jeBNIk+7g42++w2G+qxAF+ZC+tH/Z?= =?utf-8?q?B8Q2SzLQ9dvaXxnXvOyYDKM+Sk91cyJ9WmV51XBc8uB+dqTKEPOwjN6g7DUETrEkl?= =?utf-8?q?h4pKAvDnwgewRwv3ti36sHlnehs+PxEVOh2AVQFzIUorw9wF5qXXDLVKYUTTug6Tk?= =?utf-8?q?5CVK2is8z9Tceq2XCydmKrutbyYYokUXTH/vYNsOuxraa7gAGlQfVFPEAMtxnVAGa?= =?utf-8?q?oJseunft78BM3HGrc4naxyIx6Z/ENpujOlguZarYb4/iQaS16lDsPZA/l4Gt9YVfo?= =?utf-8?q?SpSZ1QxVwVwigCYCySnViAIs47IWtbvCMdV+sVTZImnAp95EZOQsOgHCW9iXBDCsJ?= =?utf-8?q?rapbxkR/QVK2jNjtrctf49IlKzc0v6ml7D42EGdUe3fNa6VM+Jgp0RGO/MWyY9G+i?= =?utf-8?q?z3yyS0nsZ5AU5bgv6ZWE79XEEadO+ifaWyf5iEOyZo+6M6xE7ghCXxZ4bCw/59zLz?= =?utf-8?q?2AKioO13TFZtQEP4RNdAr7+qbwr+ex6ctmHBpf9JVYCJeHmdr/NLgI+puNhIdo2rM?= =?utf-8?q?KJO1kbKAvPkQNLn1u/YepuUax04UfdTpBc8Sq6NxSufIHbt+tPueEulrzj1Pd8tA9?= =?utf-8?q?np4X8ypyMUGDxnOo99hLTV5FiLrTkSOrjEq6hs6xVKvUQWpwNbpShtwFe1aZduLZe?= =?utf-8?q?O/Pxu+YLsojPHRPj9/6nYcATs2Sd/w8jpDbrrmdwns9SJ6D+kCSQKI1WDcGepgKL8?= =?utf-8?q?vwPbHX+cmWJ7AjSRDoAtJ8TwKEtyte74cjo9cLMhyA/wMb/8As3lnBQG4gMSjPrp9?= =?utf-8?q?Hmx4jqQit+g1DlDzShdMoyTJdxMmxeQ7eVTLH0FOTvJREXie2BbQLuPOSQ/30rucS?= =?utf-8?q?1cvR8QtbWhTvGNl5hSvRZKrT+pJBBvMHplOeEx8AdSdgUMiVBtE4tmTlKiPhO2FEn?= =?utf-8?q?QDt2otVilkihtaCfbObqQ3ere2DJHzsLj6iY8VG5eOIsJd1dM2mUw1uaCmDzkXEPh?= =?utf-8?q?onclT2XKsyU0KbHiIEuz7GxSEnFMp03MINKmVePth7mfanYglZhB1woT38Yzio1Bj?= =?utf-8?q?xpwpiZKDvp8Oh3FCDM9YR44Rhz4GtUNoT1vzYo1ocUHrLNPabHpgz02GMeX2C23Yp?= =?utf-8?q?z/b1RPksKNPa/bw+KBIuoWEJz0bgW0jnjyf7cAP+NrUNzIvpaa1nQtFr1y5QZO78C?= =?utf-8?q?k1wNXcGnVe0wKQaLSL2uwL6EHgF+I2aGjfPii4bQeI7PYZDk3vnSnfBuU/m/supn+?= =?utf-8?q?ySNxXteKlnWcg3zFjSYlU4+5nTJi2O3jrHgPbzm0brLrbf6rVmMxiNH0WuIDWcuYR?= =?utf-8?q?qbwRl2bH4ReLu?= 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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?2XOQpoKG1q9igqz8tJwM2Mf1nPsE?= =?utf-8?q?xrely2m1r1aVvW5MkTWmxJ2FY1Z+/KO9PiwRv3ZyFjMlaPaHPKPMIonNTGAWOMP8+?= =?utf-8?q?rKwehdlOkuvysmzMFAZwpGCDcXuxabLiAqdEYgB9IeActig4Yypiugk9ZyKa+35Ta?= =?utf-8?q?4YgVs746wb+bFmZy9gJvuAe7VPUjQuDF2FsnkV36BoObPnjyQEI8SJirrXvFjoG3W?= =?utf-8?q?0bvtdif7BbOPpidhus2zmgZvmAEI/HzC37QRQRJCbp+spnvFBL7a8hyExbr3FuL/e?= =?utf-8?q?kAXQ3Id/6G96ntJywTi4TO3jtEOoEAJqaG8LQqzmP03QwiL8257+O/rrxM1OpQc6K?= =?utf-8?q?lVyvhVsbqrRbl3cQTjZEfXycOaeSl253SLbGDzUN54G40V0gKMrlrbCDZpVD7tjtQ?= =?utf-8?q?dxmxeS4hbRB4jGbqiy7pZaqxxkbrWX+UWku3D9MAggCJ+/zweWXi7s3NOmflq2gBM?= =?utf-8?q?fgC3k6rV8Jx9btPA+1ThUF6IOlW4lzMOnXNk7UlzEOLMUKWs3ze2TSGmgdeILXAmH?= =?utf-8?q?MpLbH4diYjJxAQlwVnfUA8TJuad2oi9KisCgSDFknQPXbY2AeYrfnpdNrHYqMosEf?= =?utf-8?q?ykoQm/02X+7tLHLGf5BYg8ViRTJj5aGyYulOXivX2Db3fDZ9ZuTgjpBXG+azyH3tL?= =?utf-8?q?OiRhLhem0yZKI429QA7ZwGDPwQTvnS3Nmf14Umx422fGX4QTNsyrWYUjbMHu2xQkd?= =?utf-8?q?YMNdoVT4CAM3RTm7Mj9hjl1OQhTSBMAOMd+eEB0zHRROZZHyZJJCOpK6D8d37A8mT?= =?utf-8?q?GBLUMw7TjK8QWsmbGJVR3WXvTHsmcTKpdipsFvba+WuPcz9hIjv+BUVMyYtrXqxR3?= =?utf-8?q?1A3O915NolG7X5malrhySUFBqK8z1xXGoTtmMHjBfAOCvdKnUredlUiDnCAV+g2Dl?= =?utf-8?q?UgZO3k2+6CFlkbtn5JOh+84XgUEWkn343rxEv2FnhSZghf2eFRND32tF036Hxrypc?= =?utf-8?q?LG8MO9GpuG8mDCQ6eg1VjMqnz/Y3EEpIwLnNdV/r2qGbtF0D0CYKUJGqylb6zqcau?= =?utf-8?q?VfU067A1/09HL21PWZEtX0ZvY/rWZsVbZmE5Rf1oLfWj+u7XtJmH0ClnMKQa0Aji7?= =?utf-8?q?DEr9Q/qNpiTmjzHDAkrSk2L4ex/1Pz8cudFvUl3LCKYoHmAXvkhbAidsC3tS2x5pK?= =?utf-8?q?sP2HLdoSjQq0wsrIW72Rsac5WF5mzKjA983Tyiegdgn0nPt6ZqOODCokD9Efzskxr?= =?utf-8?q?6pR9IyOIeo/sgQRfE4xY6j/2jeNJUdiA0SR3mkzqfTpKPd4iuut7BmcNb4Ii9SNzg?= =?utf-8?q?KjC1N7bnE9w4HZWJgR6znd/TRMnYlEHWWjBo8WZyFHwnjCxsvK9k71W7MUPYDPTy1?= =?utf-8?q?+3FuMt9CFkfL76uvbtg8YZV81pSqyNjKsmpG1VF1qsn4Oqcg0XVVUCuml/XFlY6gB?= =?utf-8?q?eZTEuF7uhODOp/Z93aQXWD98oog/sq2vzkUlWmJ+wR/zjWuDj7FVCRICPj5a1huVY?= =?utf-8?q?5Y2u8Wj77pLjwZq8sOXy/IA12Heh72hI8Eh5hsVsWxzN5utpBS/FllUdMu5l1JHKl?= =?utf-8?q?FL8BvJEZ4khb/nHvjTcybDFXgUBMwd0oQNXU90moq4/6CGn/1Cynmm4=3D?= Content-ID: <717C8F90C9DBAB4DAE6921D2483745CC@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: 7cd75ea8-5305-411a-4d10-08dc62e44618 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.3583 (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: TSFiVvwbIrYVfzSeAJRYfPdEdOU9YmACt0vlr1t8CtqCsM6Szrt5+BUSC7R6JrObkhJSXJjBXUCnUiScYOyIB4ZksV9Grjq4uLJ+UR+7OH7GKkZ/M7/nQ59fBRTPF79r X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org This translation mode will only be made available in scalable mode Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 364 ++++++++++++++++++++++++++++----- hw/i386/intel_iommu_internal.h | 51 ++++- 2 files changed, 362 insertions(+), 53 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index ba545590b1..3b9f120dec 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -713,6 +713,21 @@ static uint64_t vtd_get_pte(dma_addr_t base_addr, uint32_t index) return pte; } +static MemTxResult vtd_set_flag_in_pte(dma_addr_t base_addr, uint32_t index, + uint64_t pte, uint64_t flag) +{ + assert(index < VTD_PT_ENTRY_NR); + 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 an iova and the level of paging structure, return the offset * of current level. */ @@ -730,11 +745,17 @@ static inline bool vtd_is_level_supported(IntelIOMMUState *s, uint32_t level) } /* Return true if check passed, otherwise false */ -static inline bool vtd_pe_type_check(X86IOMMUState *x86_iommu, +static inline bool vtd_pe_type_check(IntelIOMMUState *s, VTDPASIDEntry *pe) { + X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s); + switch (VTD_PE_GET_TYPE(pe)) { case VTD_SM_PASID_ENTRY_FLT: + if (!(s->ecap & VTD_ECAP_FLTS)) { + return false; + } + break; case VTD_SM_PASID_ENTRY_SLT: case VTD_SM_PASID_ENTRY_NESTED: break; @@ -784,6 +805,11 @@ static inline bool vtd_pe_present(VTDPASIDEntry *pe) return pe->val[0] & VTD_PASID_ENTRY_P; } +static inline bool vtd_fl_pte_present(uint64_t pte) +{ + return pte & VTD_FL_PTE_P; +} + static int vtd_get_pe_in_pasid_leaf_table(IntelIOMMUState *s, uint32_t pasid, dma_addr_t addr, @@ -791,7 +817,6 @@ static int vtd_get_pe_in_pasid_leaf_table(IntelIOMMUState *s, { uint32_t index; dma_addr_t entry_size; - X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s); index = VTD_PASID_TABLE_INDEX(pasid); entry_size = VTD_PASID_ENTRY_SIZE; @@ -805,7 +830,7 @@ static int vtd_get_pe_in_pasid_leaf_table(IntelIOMMUState *s, } /* Do translation type check */ - if (!vtd_pe_type_check(x86_iommu, pe)) { + if (!vtd_pe_type_check(s, pe)) { return -VTD_FR_PASID_TABLE_INV; } @@ -1027,6 +1052,34 @@ static inline bool vtd_iova_sl_range_check(IntelIOMMUState *s, return !(iova & ~(vtd_iova_limit(s, ce, aw, pasid) - 1)); } +/* Return true if IOVA is canonical, otherwise false. */ +static bool vtd_iova_fl_check_canonical(IntelIOMMUState *s, + uint64_t iova, VTDContextEntry *ce, + uint8_t aw, uint32_t pasid) +{ + uint64_t iova_limit = vtd_iova_limit(s, ce, aw, pasid); + uint64_t upper_bits_mask = ~(iova_limit - 1); + uint64_t upper_bits = iova & upper_bits_mask; + bool msb = ((iova & (iova_limit >> 1)) != 0); + return !( + (!msb && (upper_bits != 0)) || + (msb && (upper_bits != upper_bits_mask)) + ); +} + +/* Return the page table base address corresponding to the translation type. */ +static dma_addr_t vtd_pe_get_pgtbl_base(VTDPASIDEntry *pe) +{ + uint16_t pgtt = VTD_PE_GET_TYPE(pe); + if (pgtt == VTD_SM_PASID_ENTRY_FLT) { + return pe->val[2] & VTD_SM_PASID_ENTRY_PTPTR; + } else if (pgtt == VTD_SM_PASID_ENTRY_SLT) { + return pe->val[0] & VTD_SM_PASID_ENTRY_PTPTR; + } + + return 0; /* Not supported */ +} + static dma_addr_t vtd_get_iova_pgtbl_base(IntelIOMMUState *s, VTDContextEntry *ce, uint32_t pasid) @@ -1035,7 +1088,7 @@ static dma_addr_t vtd_get_iova_pgtbl_base(IntelIOMMUState *s, if (s->root_scalable) { vtd_ce_get_rid2pasid_entry(s, ce, &pe, pasid); - return pe.val[0] & VTD_SM_PASID_ENTRY_SLPTPTR; + return vtd_pe_get_pgtbl_base(&pe); } return vtd_ce_get_slpt_base(ce); @@ -1053,6 +1106,10 @@ static dma_addr_t vtd_get_iova_pgtbl_base(IntelIOMMUState *s, static uint64_t vtd_spte_rsvd[VTD_SPTE_RSVD_LEN]; static uint64_t vtd_spte_rsvd_large[VTD_SPTE_RSVD_LEN]; +#define VTD_FPTE_RSVD_LEN 5 +static uint64_t vtd_fpte_rsvd[VTD_FPTE_RSVD_LEN]; +static uint64_t vtd_fpte_rsvd_large[VTD_FPTE_RSVD_LEN]; + static bool vtd_slpte_nonzero_rsvd(uint64_t slpte, uint32_t level) { uint64_t rsvd_mask; @@ -1079,21 +1136,140 @@ static bool vtd_slpte_nonzero_rsvd(uint64_t slpte, uint32_t level) return slpte & rsvd_mask; } -/* Given the @iova, get relevant @slptep. @slpte_level will be the last level - * of the translation, can be used for deciding the size of large page. - */ -static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDContextEntry *ce, - uint64_t iova, bool is_write, - uint64_t *slptep, uint32_t *slpte_level, - bool *reads, bool *writes, uint8_t aw_bits, - uint32_t pasid) +static bool vtd_flpte_nonzero_rsvd(uint64_t flpte, uint32_t level) +{ + uint64_t rsvd_mask; + assert(level < VTD_FPTE_RSVD_LEN); + assert(level); + + if ((level == VTD_FL_PD_LEVEL || level == VTD_FL_PDP_LEVEL) && + (flpte & VTD_PT_PAGE_SIZE_MASK)) { + /* large page */ + rsvd_mask = vtd_fpte_rsvd_large[level]; + } else { + rsvd_mask = vtd_fpte_rsvd[level]; + } + + return flpte & rsvd_mask; +} + +static int vtd_iova_to_pte_check_read_error(IntelIOMMUState *s, + VTDContextEntry *ce, uint64_t iova, + uint64_t pte, uint32_t pasid, + uint32_t level, uint16_t pgtt) +{ + if (pte == (uint64_t)-1) { + error_report_once("%s: detected read error on DMAR pte " + "(iova=0x%" PRIx64 ", pasid=0x%" PRIx32 ")", + __func__, iova, pasid); + if (level == vtd_get_iova_level(s, ce, pasid)) { + /* Invalid programming of context-entry */ + if (s->root_scalable) { + return pgtt == VTD_SM_PASID_ENTRY_FLT ? + -VTD_FR_FIRST_FSPE_ACCESS : + -VTD_FR_FIRST_SSPE_ACCESS; + } else { + return -VTD_FR_CONTEXT_ENTRY_INV; + } + } else { + if (s->root_scalable) { + return pgtt == VTD_SM_PASID_ENTRY_FLT ? + -VTD_FR_FSPE_ACCESS : + -VTD_FR_SSPE_ACCESS; + } else { + return -VTD_FR_PAGING_ENTRY_INV; + } + } + } + + return 0; +} + +static inline bool vtd_addr_in_interrup_range(hwaddr addr, uint64_t size) +{ + return !((addr > VTD_INTERRUPT_ADDR_LAST) || + (addr + size - 1 < VTD_INTERRUPT_ADDR_FIRST)); +} + +static int vtd_iova_to_pte_fl(IntelIOMMUState *s, VTDContextEntry *ce, + uint64_t iova, bool is_write, uint64_t *ptep, + uint32_t *pte_level, bool *reads, bool *writes, + uint8_t aw_bits, uint32_t pasid, dma_addr_t addr) +{ + uint32_t offset; + uint64_t pte; + uint64_t access_right_check = is_write ? VTD_FL_W : 0; + int ret; + + if (!vtd_iova_fl_check_canonical(s, iova, ce, aw_bits, pasid)) { + error_report_once("%s: detected non canonical IOVA (iova=0x%" PRIx64 "," + "pasid=0x%" PRIx32 ")", __func__, iova, pasid); + return -VTD_FR_FS_NON_CANONICAL; + } + + while (true) { + offset = vtd_iova_level_offset(iova, *pte_level); + pte = vtd_get_pte(addr, offset); + + ret = vtd_iova_to_pte_check_read_error(s, ce, iova, pte, + pasid, *pte_level, + VTD_SM_PASID_ENTRY_FLT); + if (ret != 0) { + return ret; + } + + if (!vtd_fl_pte_present(pte)) { + return -VTD_FR_FSPE_NOT_PRESENT; + } + + *reads = true; + *writes = (*writes) && (pte & VTD_FL_W); + + if (vtd_set_flag_in_pte(addr, offset, pte, VTD_FL_PTE_A) != MEMTX_OK) { + return -VTD_FR_FS_BIT_UPDATE_FAILED; + } + + if ((pte & access_right_check) != access_right_check) { + error_report_once("%s: detected pte permission error " + "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", " + "pte=0x%" PRIx64 ", write=%d, pasid=0x%" + PRIx32 ")", __func__, iova, *pte_level, + pte, is_write, pasid); + return is_write ? -VTD_FR_SM_WRITE : -VTD_FR_SM_READ; + } + if (vtd_flpte_nonzero_rsvd(pte, *pte_level)) { + error_report_once("%s: detected flpte reserved non-zero " + "iova=0x%" PRIx64 ", level=0x%" PRIx32 + "pte=0x%" PRIx64 ", pasid=0x%" PRIX32 ")", + __func__, iova, *pte_level, pte, pasid); + return -VTD_FR_PAGING_ENTRY_RSVD; + } + + if (vtd_is_last_pte(pte, *pte_level)) { + *ptep = pte; + break; + } + addr = vtd_get_pte_addr(pte, aw_bits); + (*pte_level)--; + } + + if (is_write && + (vtd_set_flag_in_pte(addr, offset, pte, VTD_FL_PTE_D) != MEMTX_OK)) { + return -VTD_FR_FS_BIT_UPDATE_FAILED; + } + + return 0; +} + +static int vtd_iova_to_pte_sl(IntelIOMMUState *s, VTDContextEntry *ce, + uint64_t iova, bool is_write, uint64_t *slptep, + uint32_t *pte_level, bool *reads, bool *writes, + uint8_t aw_bits, uint32_t pasid, dma_addr_t addr) { - 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 slpte; - uint64_t access_right_check; - uint64_t xlat, size; + uint64_t access_right_check = is_write ? VTD_SL_W : VTD_SL_R; + int ret; if (!vtd_iova_sl_range_check(s, iova, ce, aw_bits, pasid)) { error_report_once("%s: detected IOVA overflow (iova=0x%" PRIx64 "," @@ -1101,72 +1277,128 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDContextEntry *ce, return -VTD_FR_ADDR_BEYOND_MGAW; } - /* FIXME: what is the Atomics request here? */ - access_right_check = is_write ? VTD_SL_W : VTD_SL_R; - while (true) { - offset = vtd_iova_level_offset(iova, level); + offset = vtd_iova_level_offset(iova, *pte_level); slpte = vtd_get_pte(addr, offset); - if (slpte == (uint64_t)-1) { - error_report_once("%s: detected read error on DMAR slpte " - "(iova=0x%" PRIx64 ", pasid=0x%" PRIx32 ")", - __func__, iova, pasid); - if (level == vtd_get_iova_level(s, ce, pasid)) { - /* Invalid programming of context-entry */ - return -VTD_FR_CONTEXT_ENTRY_INV; - } else { - return -VTD_FR_PAGING_ENTRY_INV; - } + ret = vtd_iova_to_pte_check_read_error(s, ce, iova, slpte, + pasid, *pte_level, + VTD_SM_PASID_ENTRY_SLT); + if (ret != 0) { + return ret; } *reads = (*reads) && (slpte & VTD_SL_R); *writes = (*writes) && (slpte & VTD_SL_W); - if (!(slpte & access_right_check)) { + if ((slpte & access_right_check) != access_right_check) { error_report_once("%s: detected slpte permission error " "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", " "slpte=0x%" PRIx64 ", write=%d, pasid=0x%" - PRIx32 ")", __func__, iova, level, + PRIx32 ")", __func__, iova, *pte_level, slpte, is_write, pasid); - return is_write ? -VTD_FR_WRITE : -VTD_FR_READ; + if (s->root_scalable) { + return is_write ? -VTD_FR_SM_WRITE : -VTD_FR_SM_READ; + } else { + return is_write ? -VTD_FR_WRITE : -VTD_FR_READ; + } } - if (vtd_slpte_nonzero_rsvd(slpte, level)) { + if (vtd_slpte_nonzero_rsvd(slpte, *pte_level)) { error_report_once("%s: detected splte reserve non-zero " "iova=0x%" PRIx64 ", level=0x%" PRIx32 "slpte=0x%" PRIx64 ", pasid=0x%" PRIX32 ")", - __func__, iova, level, slpte, pasid); + __func__, iova, *pte_level, slpte, pasid); return -VTD_FR_PAGING_ENTRY_RSVD; } - if (vtd_is_last_pte(slpte, level)) { + if (vtd_is_last_pte(slpte, *pte_level)) { *slptep = slpte; - *slpte_level = level; break; } addr = vtd_get_pte_addr(slpte, aw_bits); - level--; + (*pte_level)--; + } + + return 0; +} + +/* + * Given the @iova, get relevant @ptep. @pte_level will be the last level + * of the translation, can be used for deciding the size of large page. + */ +static int vtd_iova_to_pte(IntelIOMMUState *s, VTDContextEntry *ce, + uint64_t iova, bool is_write, + uint64_t *ptep, uint32_t *pte_level, + bool *reads, bool *writes, uint8_t aw_bits, + uint32_t pasid) +{ + dma_addr_t addr; + uint16_t pgtt; + uint64_t xlat, size; + VTDPASIDEntry pe; + int ret; + + /* FIXME: what is the Atomics request in access rights? */ + + if (s->root_scalable) { + vtd_ce_get_rid2pasid_entry(s, ce, &pe, pasid); + pgtt = VTD_PE_GET_TYPE(&pe); + *pte_level = VTD_PE_GET_LEVEL(&pe); + addr = vtd_pe_get_pgtbl_base(&pe); + switch (pgtt) { + case VTD_SM_PASID_ENTRY_FLT: + if (s->ecap & VTD_ECAP_FLTS) { + ret = vtd_iova_to_pte_fl(s, ce, iova, is_write, ptep, pte_level, + reads, writes, aw_bits, pasid, addr); + } else { + error_report_once("First-stage translation not supported : %d", + pgtt); + return -VTD_FR_INVALID_PGTT; + } + break; + case VTD_SM_PASID_ENTRY_SLT: + if (s->ecap & VTD_ECAP_SLTS) { + ret = vtd_iova_to_pte_sl(s, ce, iova, is_write, ptep, pte_level, + reads, writes, aw_bits, pasid, addr); + } else { + error_report_once("Second-stage translation not supported : %d", + pgtt); + return -VTD_FR_INVALID_PGTT; + } + break; + default: + error_report_once("Unsupported PGTT : %d", pgtt); + ret = -VTD_FR_INVALID_PGTT; + break; + } + } else { + *pte_level = vtd_ce_get_level(ce); + addr = vtd_ce_get_slpt_base(ce); + ret = vtd_iova_to_pte_sl(s, ce, iova, is_write, ptep, pte_level, + reads, writes, aw_bits, pasid, addr); } - xlat = vtd_get_pte_addr(*slptep, aw_bits); - size = ~vtd_pt_level_page_mask(level) + 1; + if (ret != 0) { + return ret; + } + + xlat = vtd_get_pte_addr(*ptep, aw_bits); + size = ~vtd_pt_level_page_mask(*pte_level) + 1; /* * From VT-d spec 3.14: Untranslated requests and translation * requests that result in an address in the interrupt range will be * blocked with condition code LGN.4 or SGN.8. */ - if ((xlat > VTD_INTERRUPT_ADDR_LAST || - xlat + size - 1 < VTD_INTERRUPT_ADDR_FIRST)) { + if (!vtd_addr_in_interrup_range(xlat, size)) { return 0; } else { error_report_once("%s: xlat address is in interrupt range " "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", " - "slpte=0x%" PRIx64 ", write=%d, " + "pte=0x%" PRIx64 ", write=%d, " "xlat=0x%" PRIx64 ", size=0x%" PRIx64 ", " "pasid=0x%" PRIx32 ")", - __func__, iova, level, slpte, is_write, + __func__, iova, *pte_level, *ptep, is_write, xlat, size, pasid); - return s->scalable_mode ? -VTD_FR_SM_INTERRUPT_ADDR : - -VTD_FR_INTERRUPT_ADDR; + return -VTD_INTERRUPT_RANGE_ERROR(s); } } @@ -1772,6 +2004,16 @@ static const bool vtd_qualified_faults[] = { [VTD_FR_CONTEXT_ENTRY_TT] = true, [VTD_FR_PASID_TABLE_INV] = false, [VTD_FR_SM_INTERRUPT_ADDR] = true, + [VTD_FR_INVALID_PGTT] = true, + [VTD_FR_FSPE_ACCESS] = true, + [VTD_FR_FSPE_NOT_PRESENT] = true, + [VTD_FR_FIRST_FSPE_ACCESS] = true, + [VTD_FR_SSPE_ACCESS] = true, + [VTD_FR_FIRST_SSPE_ACCESS] = true, + [VTD_FR_FS_NON_CANONICAL] = true, + [VTD_FR_SM_WRITE] = true, + [VTD_FR_SM_READ] = true, + [VTD_FR_FS_BIT_UPDATE_FAILED] = true, [VTD_FR_MAX] = false, }; @@ -1870,7 +2112,8 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, uint8_t bus_num = pci_bus_num(bus); VTDContextCacheEntry *cc_entry; uint64_t pte, page_mask; - uint32_t level, pasid = vtd_as->pasid; + uint32_t level = UINT32_MAX; + uint32_t pasid = vtd_as->pasid; uint16_t source_id = PCI_BUILD_BDF(bus_num, devfn); int ret_fr; bool is_fpd_set = false; @@ -1981,7 +2224,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, } } - ret_fr = vtd_iova_to_slpte(s, &ce, addr, is_write, &pte, &level, + ret_fr = vtd_iova_to_pte(s, &ce, addr, is_write, &pte, &level, &reads, &writes, s->aw_bits, pasid); if (ret_fr) { vtd_report_fault(s, -ret_fr, is_fpd_set, source_id, @@ -1990,6 +2233,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus, } page_mask = vtd_pt_level_page_mask(level); + /* Exe is always set to 0 in the spec */ access_flags = IOMMU_ACCESS_FLAG(reads, writes); vtd_update_iotlb(s, source_id, vtd_get_domain_id(s, &ce, pasid), addr, pte, access_flags, level, pasid); @@ -2005,7 +2249,12 @@ error: vtd_iommu_unlock(s); entry->iova = 0; entry->translated_addr = 0; - entry->addr_mask = 0; + /* + * Set the mask for ATS (the range must be present even when the + * translation fails : PCIe rev 5 10.2.3.5) + */ + entry->addr_mask = (level != UINT32_MAX) ? + (~vtd_pt_level_page_mask(level)) : (~VTD_PAGE_MASK_4K); entry->perm = IOMMU_NONE; return false; } @@ -3187,6 +3436,8 @@ static IOMMUTLBEntry vtd_iommu_translate(IOMMUMemoryRegion *iommu, hwaddr addr, }; bool success; + /* IOMMUAccessFlags : IOMMU_EXEC and IOMMU_PRIV not supported */ + if (likely(s->dmar_enabled)) { success = vtd_do_iommu_translate(vtd_as, vtd_as->bus, vtd_as->devfn, addr, flag & IOMMU_WO, &iotlb); @@ -3989,6 +4240,21 @@ static void vtd_init(IntelIOMMUState *s) vtd_spte_rsvd_large[3] = VTD_SPTE_LPAGE_L3_RSVD_MASK(s->aw_bits, x86_iommu->dt_supported); + /* + * Rsvd field masks for fpte + */ + vtd_fpte_rsvd[0] = ~0ULL; + vtd_fpte_rsvd[1] = VTD_FPTE_PAGE_L1_RSVD_MASK(s->aw_bits); + vtd_fpte_rsvd[2] = VTD_FPTE_PAGE_L2_RSVD_MASK(s->aw_bits); + vtd_fpte_rsvd[3] = VTD_FPTE_PAGE_L3_RSVD_MASK(s->aw_bits); + vtd_fpte_rsvd[4] = VTD_FPTE_PAGE_L4_RSVD_MASK(s->aw_bits); + + vtd_fpte_rsvd_large[0] = ~0ULL; + vtd_fpte_rsvd_large[1] = ~0ULL; + vtd_fpte_rsvd_large[2] = VTD_FPTE_PAGE_L2_FS2MP_RSVD_MASK(s->aw_bits); + vtd_fpte_rsvd_large[3] = VTD_FPTE_PAGE_L3_FS1GP_RSVD_MASK(s->aw_bits); + vtd_fpte_rsvd_large[4] = ~0ULL; + if (s->scalable_mode || s->snoop_control) { vtd_spte_rsvd[1] &= ~VTD_SPTE_SNP; vtd_spte_rsvd_large[2] &= ~VTD_SPTE_SNP; diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index 8d27b1c15b..ed61979934 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -195,6 +195,7 @@ #define VTD_ECAP_PASID (1ULL << 40) #define VTD_ECAP_SMTS (1ULL << 43) #define VTD_ECAP_SLTS (1ULL << 46) +#define VTD_ECAP_FLTS (1ULL << 47) /* CAP_REG */ /* (offset >> 4) << 24 */ @@ -215,6 +216,7 @@ #define VTD_CAP_CM (1ULL << 7) #define VTD_PASID_ID_SHIFT 20 #define VTD_PASID_ID_MASK ((1ULL << VTD_PASID_ID_SHIFT) - 1) +#define VTD_CAP_FS1GP (1ULL << 56) /* Supported Adjusted Guest Address Widths */ #define VTD_CAP_SAGAW_SHIFT 8 @@ -270,6 +272,10 @@ #define VTD_FRCD_PP(val) (((val) & 0x1ULL) << 31) #define VTD_FRCD_IR_IDX(val) (((val) & 0xffffULL) << 48) +#define VTD_INTERRUPT_RANGE_ERROR(s) ((s)->scalable_mode ? \ + VTD_FR_SM_INTERRUPT_ADDR : \ + VTD_FR_INTERRUPT_ADDR) + /* DMA Remapping Fault Conditions */ typedef enum VTDFaultReason { VTD_FR_RESERVED = 0, /* Reserved for Advanced Fault logging */ @@ -312,9 +318,21 @@ typedef enum VTDFaultReason { VTD_FR_IR_SID_ERR = 0x26, /* Invalid Source-ID */ VTD_FR_PASID_TABLE_INV = 0x58, /*Invalid PASID table entry */ + VTD_FR_INVALID_PGTT = 0x5b, /* SPT.4.2 Invalid PGTT */ + + VTD_FR_FSPE_ACCESS = 0x70, /* SFS.1 */ + VTD_FR_FSPE_NOT_PRESENT = 0x71, /* SFS.2 : Present (P) field is 0.*/ + VTD_FR_FIRST_FSPE_ACCESS = 0x73, /* SFS.4 */ + VTD_FR_SSPE_ACCESS = 0x78, /* SSS.1 */ + VTD_FR_FIRST_SSPE_ACCESS = 0x7b, /* SSS.4 */ + VTD_FR_FS_NON_CANONICAL = 0x80, /* SNG.1 : Address for FS not canonical.*/ + + VTD_FR_SM_WRITE = 0x85, /* SGN.6 */ + VTD_FR_SM_READ = 0x86, /* SGN.7 */ /* Output address in the interrupt address range for scalable mode */ - VTD_FR_SM_INTERRUPT_ADDR = 0x87, + VTD_FR_SM_INTERRUPT_ADDR = 0x87, /* SGN.8 */ + VTD_FR_FS_BIT_UPDATE_FAILED = 0x91, /* SFS.10 */ VTD_FR_MAX, /* Guard */ } VTDFaultReason; @@ -431,6 +449,23 @@ typedef union VTDInvDesc VTDInvDesc; (0x3ffff800ULL | ~(VTD_HAW_MASK(aw) | VTD_SL_IGN_COM | VTD_SL_TM)) : \ (0x3ffff800ULL | ~(VTD_HAW_MASK(aw) | VTD_SL_IGN_COM)) +#define VTD_FS_UPPER_IGNORED 0xfff0000000000000ULL +#define VTD_FPTE_PAGE_L1_RSVD_MASK(aw) (~(VTD_HAW_MASK(aw)) & \ + (~VTD_FS_UPPER_IGNORED)) +#define VTD_FPTE_PAGE_L2_RSVD_MASK(aw) (~(VTD_HAW_MASK(aw)) & \ + (~VTD_FS_UPPER_IGNORED)) +#define VTD_FPTE_PAGE_L3_RSVD_MASK(aw) (~(VTD_HAW_MASK(aw)) & \ + (~VTD_FS_UPPER_IGNORED)) +#define VTD_FPTE_PAGE_L3_FS1GP_RSVD_MASK(aw) ((0x3fffe000ULL | \ + ~(VTD_HAW_MASK(aw))) \ + & (~VTD_FS_UPPER_IGNORED)) +#define VTD_FPTE_PAGE_L2_FS2MP_RSVD_MASK(aw) ((0x1fe000ULL | \ + ~(VTD_HAW_MASK(aw))) \ + & (~VTD_FS_UPPER_IGNORED)) +#define VTD_FPTE_PAGE_L4_RSVD_MASK(aw) ((0x80ULL | \ + ~(VTD_HAW_MASK(aw))) \ + & (~VTD_FS_UPPER_IGNORED)) + /* Information about page-selective IOTLB invalidate */ struct VTDIOTLBPageInvInfo { uint16_t domain_id; @@ -514,9 +549,6 @@ typedef struct VTDRootEntry VTDRootEntry; #define VTD_SM_PASID_ENTRY_AW 7ULL /* Adjusted guest-address-width */ #define VTD_SM_PASID_ENTRY_DID(val) ((val) & VTD_DOMAIN_ID_MASK) -/* Second Level Page Translation Pointer*/ -#define VTD_SM_PASID_ENTRY_SLPTPTR (~0xfffULL) - /* Paging Structure common */ #define VTD_SM_PASID_ENTRY_PTPTR (~0xfffULL) #define VTD_PT_PAGE_SIZE_MASK (1ULL << 7) @@ -532,6 +564,14 @@ typedef struct VTDRootEntry VTDRootEntry; #define VTD_SL_PD_LEVEL 2 #define VTD_SL_PT_LEVEL 1 +/* First Level Paging Structure */ +#define VTD_FL_PDP_LEVEL 3 +#define VTD_FL_PD_LEVEL 2 +#define VTD_FL_PTE_P 0x1 +#define VTD_FL_PTE_A 0x20 +#define VTD_FL_PTE_D 0x40 +#define VTD_FL_PTE_EA 0x400 + /* Masks for Second Level Paging Entry */ #define VTD_SL_RW_MASK 3ULL #define VTD_SL_R 1ULL @@ -539,4 +579,7 @@ typedef struct VTDRootEntry VTDRootEntry; #define VTD_SL_IGN_COM 0xbff0000000000000ULL #define VTD_SL_TM (1ULL << 62) +/* Masks for First Level Paging Entry */ +#define VTD_FL_W (1ULL << 1) + #endif From patchwork Mon Apr 22 15:52:53 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: 13638648 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 58C30C4345F for ; Mon, 22 Apr 2024 15: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 1ryvye-0007FW-Bm; Mon, 22 Apr 2024 11:53:08 -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 1ryvyZ-0007EJ-V9 for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:03 -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 1ryvyX-0007bi-3q for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801181; x=1745337181; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=fNY3Ia8OsIWRUUDly0kC7nl47E5WuYX0I5f9Ly0Fijw=; b=GEeDt+JzpEPh0eqkvaKAc8yx7CG9SGGp5GsDzPSjTRRYyRKTQhqGxSOu jZckAneg28qtL01zOYtdIW/Ti+Wb2mpxmrozrJ38Ki8QSbQjagrg+a/b6 WGY19Ex1xoE29rcPNDywn+7pn2bTybr5oHrZ0Tx4kwtUrWAxekmu7pRmY Dja52SPcGjSEkdNw3nig310t6QNdSDb8tXwTceIjKIprxBTgR1bchaoEr RCP4pOljP1q5Siw1IdL7wFKmefPgiAriow3SBbGl2E8+PmMttm5twd4rh YUcPXaHJqrJREaiRAhp+7iluuB6VC9GmnU6Wdbgx0moIJotcVjjDKvZym w==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027671" X-MGA-submission: MDEyVJbVEVGLSCMCQN1xJzQf8LahFlZ5Ssgp8KSl6XPAJzXvLLTZ1Newm9/1ywHMhrJhwYUXZyi11EPBKArxjtGrkAkZPQ6RI7arHU2bWUJcoY2294jWG4xleCEmeGRcwr0ApRytwodaZtqYXIe3jBIfagaM8Vg6gM8yUDeeSnJpbg== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:57 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OuXyHfCJay5w4U9Qb7d1bM7IGgeo9gzP+N9JX5CS/vwCPKE5dD+CgoxAvvvczmsTWIJaoYtOsY8ElknZwD4DV5Jv8qHPmgwRWEqbLcwr0BQZoeRarhxBd9KNBMv5itpyj5VzJu9HkrOHDIufzAwnSGRYXB9vzvBXONUP+GVQx5pYpTQoPLJnyD3k0P2euS/tYB5GFMbNJJKorZmK4umCOcpPx+kbu8U+08sjXNBHca+t2bXPorHT0rVfLRioRqr7svP6ZKHaFTnteNUHwr8dDLSDfmrv4uDDumfswJ3AZZW2jQxjfrENsVs7YUKcQAKFS2uqzhUV/AUAwEUC2kIfsg== 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=fNY3Ia8OsIWRUUDly0kC7nl47E5WuYX0I5f9Ly0Fijw=; b=ZORMXz2EwxozIRujVj1qq6cxFQyCOh9XPFjMre4EzDUVfDFTk+NJQX94OaHnGP4DUq/3NoNnfU6TsM9DUAAFHURx9kWW4tnIwkgALHcSZrfwO9EcZIkupddGuQBfmT14P27wlo18eR9nsAZgB4+FV+9q75hyLi2OwGTYs2gZp+5QYf89DX7/ArOgsofS5CDMPIMq7WEJuF+6ESWt4EGo3EwybaFc4jQdaxj5HtbBPzq2PbDZigMO1udlS1gU5N9a0IiGCM6RL0bRiUHe4/GqpPMwMz+LPvIQYn64eVJvqlCe3j1k6+eWUCH/2Er8MAKAR+k+38LqpC+bmwl8lu23HA== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:55 +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.7472.044; Mon, 22 Apr 2024 15:52:55 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 5/7] intel_iommu: extract device IOTLB invalidation logic Thread-Topic: [PATCH intel_iommu 5/7] intel_iommu: extract device IOTLB invalidation logic Thread-Index: AQHalM0ih2akMhZuME+ObdSEe3SmSg== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-6-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: 13074d7d-bbc4-4444-d600-08dc62e44656 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?AUbjiXum9aJA8Pvzc5KAb9R4pNkS/fg?= =?utf-8?q?JjD+4sU2pUso23u3iI2lVaLS3IFqPeie5S+OHpgDFdBhlOUdfhMDvdSaNRIAWiMs3?= =?utf-8?q?5QfqeYH6wGRw0StCUU7BNvwAXllyToJxnuCm/lf2BfF7NYzXVUA+UV3Lmv8om1xHa?= =?utf-8?q?22ie+8PvBmL8GrTttuWG3NipZPl7Li1Aeo6Lez3M9L7Qul9XOGl3thEEmpOBKaLEQ?= =?utf-8?q?3pLj84TdtfjB7wWd1Tzpn+kDF9O4kZSpjtNPX/qgXMOofeReC258TSu41BN8swXzp?= =?utf-8?q?F1pptz8OhQIeARYOseKso3dQh4wClKxSQm9uf36PuNmgu7ZsAlJ6gxvVf/ZWAuukJ?= =?utf-8?q?iEErlSLBidQ9+o3m9ip6kN8uNqgOIvbPH0894RywqoR0eCAfmWzcPFJbBrWmOB5ID?= =?utf-8?q?FWdJUDkhvjKnexIpb2t54gLWlRPqsVueceUiiaT0EjpP45JbS3DSpHPDx1nI7m0YC?= =?utf-8?q?xYxirBbieWpGfO8tDufmyIKcYYpwkJHOU7n4dJb2kaKLomCe7gyeSjv2v8xy73d5T?= =?utf-8?q?yj+Xo1XI5NRo/OmiMjkzCJJG0FDRJCKdooyjQ5D0aus5z9FZEJtnlgWcbkf7AnAHK?= =?utf-8?q?Fxsb98rX6BgmGKVbfFFc69R6Fva8f031op37gz7v86o/Pd4Nd51KsY3WEgFR/+/Ur?= =?utf-8?q?UJUUwTPyzbEpznWW/y0mP+yCOrRnEj+S4KqDA7LeR15oyEecBKD5EboAALTHFKmMj?= =?utf-8?q?sGF7Ou1p5pecJZZEFdjwP1QtKYyn7OUMh0vVTh1ICQZ0MOqTTrpQ+HTgvGuhpjzlQ?= =?utf-8?q?RDkmgpCge6v5/WbGmujlUMwlUDc/0NxNxqtvAXLQa/Zf/50VatPuuxtVRkueCCmnC?= =?utf-8?q?gm3QhODPBFoJh99FEZUyoT0nrLrnGEDteLeE79TwoM1p9TAR/tP70WIx6ZDxDZV9R?= =?utf-8?q?6PGIrHbXylPhcHBYOK+nR1NmCmvrnzyrWc9DvBMpsOLA2AOQJ/EW3Z9dll6wXND1P?= =?utf-8?q?PYKrkSvZhKUqOfOvuNWe5yY5+FNhdUzjz1k9xtxwGTcoIDdefSCriwyZB2PEfhG3W?= =?utf-8?q?5Lt8PogEVkbfm1TWVktKQ+Od1hmVgosA193Mss8hWFc9BsvUAqOljHVlB70YfURAu?= =?utf-8?q?F3M9rNaA3BlEuNXd8gTQegEJGkfyjYb2p60YfJ/FHIn2SPOpEPosZVrhTW9raSbXr?= =?utf-8?q?VQe7sJqJgZwyBKnRlWJAC3GSoHu4bdNI8SuYyKnYgt1D8Yn8RAno6ttoQYF3U3h4u?= =?utf-8?q?P9Skq1OF5eB2X9GZJdKsrMkpaGogcAIm6tjsTtRPsZguHB7B32c7IfkPVJoAt3vct?= =?utf-8?q?Gm3e+oWFZk/bBv/FaWL/dGmT+NpfoLPBvRw=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?aaOFdmKkmhBbas7h7cnRhkDlyYT9?= =?utf-8?q?tGmYumrkpbysUaOZDWh28RzqB9vBIuL06BLFM6VEY1RmparwCm32mjeVWxH32UEQy?= =?utf-8?q?eA7lFkf7jH4Ggj+OiDV7IeiXUxfLEM15/y2dZUC+UjvaaFkz/I25iwWKViqJVc5E4?= =?utf-8?q?lTbUXYHuh6qfoxzDTCXolNjQ3JRsPUdQcFCpfEOO12760fudDZvMvliBLWVHSwtcV?= =?utf-8?q?wgqwnfKkH8dVL7Qx4Px7iu5o+3fZ+m7tC471YtTzfoz4wG+DB/2e5h6qyd6aekqwY?= =?utf-8?q?tliH5FFB9Xi/157iFSL7uhMA6qjMabICPMGV2QzjhBD1vxbY/i4CgCiuf1prxh3uD?= =?utf-8?q?/+Qu0MYevToGnCfUJ3LfmBIoqmQmOuMvd2WnSAB6V94NWOuGB1DMz1+pr7kvTvyIg?= =?utf-8?q?AKLFjr7r4aJ5yNBRNjjXiUz7RpMCS+zPBOGfQomSXfaIGEfb8T9ryyU+2KsmqJdkK?= =?utf-8?q?IZvoGXK8En4wcN/lxTjoTwnXFr3LS3ZBXQZZT0pba6LbrAeYhn+bSpnrUhRoBm/7Z?= =?utf-8?q?cD03MeT9LnhDgnwJ8FyahYjCM1iefMH2u7//QYmQY/p36lDDFFBAbrvMoco8TMnEm?= =?utf-8?q?BTEzMytPWcifbw3KJTFmsmH2ynU9mv5YVqv3upUmpoEh6K9O/qp5EO8qZ3/gJtqYf?= =?utf-8?q?u7nbhemCuCw1zKqDsjC+9AZ0igpMxsNy+Uj1YeU0XTd7RkLH5cCVF5aFZYhCt1aX+?= =?utf-8?q?ErW8+Wac6sV6HivZz23IIx36VLvp0iC+SuDGsX74JKwi0Skal32Im4lXVv0rE4weI?= =?utf-8?q?tpsoA7CU3JDPtrqy9zwtjSS+vWGxI7fAYvEuDlJx7llSToV1Pba5XA7krVEF48uRz?= =?utf-8?q?euwAo2siQhc6M4EqItEFk9LRuxi0xeEHRuaCjYTw8l0wzBLO3tyYRM9pF5Wx9WYBS?= =?utf-8?q?5eiKiB80G7aDF9ODhWw6Ccw3m6/UXw0UnorTxA+cH0PpGXMx7ob4830uiIIYRCMwq?= =?utf-8?q?SP/9gGwZKdBd3a/SDexViymFkvhfz+OOSu829jtzNO18OzshEy/tZgE2TNthM5tM6?= =?utf-8?q?xDjS3oByV5gi4aGDUqEmgFZgZmrX5gTCjUumbWAeZt+wnu46fpK7nWf1cqDNc+7D8?= =?utf-8?q?VTUgq5sGnGGaTninTvG5KGNQ2LbkFrUdV+OY6K7YBVhfEQFWBEBqGD9270LM1DIl8?= =?utf-8?q?4+F2TTnsNChaqDFUJGO6Og54+ikwBNDIgfQS1IT/Yydm4q6b1O3I6AN+xE8k3UF93?= =?utf-8?q?6iGL1oXFGARs5TPROARvbEE+LfO3M64D5Tupu2hc3LqgyORgqB4p8+498o6tKCie5?= =?utf-8?q?E+omoJv4C7T/bMDlmW5iTR3EFNVxF2DWPCRMUvBS7/CxepS2Tx8DeMp5LqhXY65ps?= =?utf-8?q?Z5kUDQH5gZO7kwKLYfYAnw2DHsiJg1eocIyyoNtyRmRjf34Zh1eCSK15pseOM434b?= =?utf-8?q?eeErA/7h+LP9UvT4vLB9ckbROv5TeXE+V74OFdYbhalfciYDJUDXuGWr6C5B0/Bmo?= =?utf-8?q?bNuzRBOjB/aOqZRFNOPyrTq+F4rGEIRmowtGUvm34W7/k/F7XmJWoc8RgA6dvk7RA?= =?utf-8?q?LEqS1taxOwNFo6YkzrZzguKVrmyjzkYTOiKh2oWX1SHCb2JRW6PoAFE=3D?= Content-ID: <2C9CF632458ECB47AE4B78F9EBB91465@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: 13074d7d-bbc4-4444-d600-08dc62e44656 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.5768 (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: LpAhdEf799w8Mvfayu0mFSMeLpxS/Tu1sqa4WK0nTjUmSnTQ+/6e2vwOqdiSWKnFadLai1ZfvInv5Z4THlYasMalZX/wSMu7D7tB7GV/wv1AWe24/BkGHuTezl5HWHKm X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org This piece of code can be shared by both IOTLB invalidation and PASID-based IOTLB invalidation Signed-off-by: Clément Mathieu--Drif Reviewed-by: Philippe Mathieu-Daudé --- hw/i386/intel_iommu.c | 57 +++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 3b9f120dec..aaac61bf6a 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2890,13 +2890,42 @@ static bool vtd_process_inv_iec_desc(IntelIOMMUState *s, return true; } +static void do_invalidate_device_tlb(VTDAddressSpace *vtd_dev_as, + bool size, hwaddr addr) +{ + /* + * According to ATS spec table 2.4: + * S = 0, bits 15:12 = xxxx range size: 4K + * S = 1, bits 15:12 = xxx0 range size: 8K + * S = 1, bits 15:12 = xx01 range size: 16K + * S = 1, bits 15:12 = x011 range size: 32K + * S = 1, bits 15:12 = 0111 range size: 64K + * ... + */ + + IOMMUTLBEvent event; + uint64_t sz; + + if (size) { + sz = (VTD_PAGE_SIZE * 2) << cto64(addr >> VTD_PAGE_SHIFT); + addr &= ~(sz - 1); + } else { + sz = VTD_PAGE_SIZE; + } + + event.type = IOMMU_NOTIFIER_DEVIOTLB_UNMAP; + event.entry.target_as = &vtd_dev_as->as; + event.entry.addr_mask = sz - 1; + event.entry.iova = addr; + event.entry.perm = IOMMU_NONE; + event.entry.translated_addr = 0; + memory_region_notify_iommu(&vtd_dev_as->iommu, 0, event); +} static bool vtd_process_device_iotlb_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) { VTDAddressSpace *vtd_dev_as; - IOMMUTLBEvent event; hwaddr addr; - uint64_t sz; uint16_t sid; bool size; @@ -2912,6 +2941,7 @@ static bool vtd_process_device_iotlb_desc(IntelIOMMUState *s, return false; } + /* * Using sid is OK since the guest should have finished the * initialization of both the bus and device. @@ -2921,28 +2951,7 @@ static bool vtd_process_device_iotlb_desc(IntelIOMMUState *s, goto done; } - /* According to ATS spec table 2.4: - * S = 0, bits 15:12 = xxxx range size: 4K - * S = 1, bits 15:12 = xxx0 range size: 8K - * S = 1, bits 15:12 = xx01 range size: 16K - * S = 1, bits 15:12 = x011 range size: 32K - * S = 1, bits 15:12 = 0111 range size: 64K - * ... - */ - if (size) { - sz = (VTD_PAGE_SIZE * 2) << cto64(addr >> VTD_PAGE_SHIFT); - addr &= ~(sz - 1); - } else { - sz = VTD_PAGE_SIZE; - } - - event.type = IOMMU_NOTIFIER_DEVIOTLB_UNMAP; - event.entry.target_as = &vtd_dev_as->as; - event.entry.addr_mask = sz - 1; - event.entry.iova = addr; - event.entry.perm = IOMMU_NONE; - event.entry.translated_addr = 0; - memory_region_notify_iommu(&vtd_dev_as->iommu, 0, event); + do_invalidate_device_tlb(vtd_dev_as, size, addr); done: return true; From patchwork Mon Apr 22 15:52:53 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: 13638647 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 010EDC4345F for ; Mon, 22 Apr 2024 15:53:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvyi-0007Gm-Oc; Mon, 22 Apr 2024 11:53:12 -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 1ryvyc-0007Em-KQ for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:07 -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 1ryvyZ-0007bS-Fx for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801183; x=1745337183; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=liB5/3/LBFtQuwFWwuBS9Ju+8ITpXVCiihZJfH7mZeY=; b=qhZUrunvONVtrffB2As2wKE9TBDGBp1IgCcTR2zPKl3NDJIeQ3mN7S8R Oev/3LVtmtJ2NDJnj35Jh62yYOecf0QcZcAHCXkzsob8S8LKBJDLDlIOG ZKwVpQQ3gi0gqqwDx088jiNVtCaVk241+TjDJduW+83JXQsrLelUdg/qD YZJIEuD/vZRLeZfX43pqJGtX3lugOB5vGAgkgTgOlZQ0YWe+V2aAnfgJS vZlRhSx5gr6l1hYWphH4JybhVcL7DA5i1KXLk7hampZsqx02n+aUzJqNo 59LMeVpnMVzQHgdt1Lr9nA9rLI0IBbY7ZR5UqQnrNpzjwXuPqUKrBUlFK w==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027675" X-MGA-submission: MDEmgtisbYvx7d4zZunQvzwQeiYVh8l7g9V+2iRKt2d//kZdUMwyXtL+Gf0NFhMMGqu21VHc6IIu71I665/j78F2EF/4zHwfS8I3YGiSHq5vRnYRa63j8Ssh4VDC/mvyG68C/l2F41V+iDbXMVpcIQiHTTAA5Ev0GthkgUVAp5awPA== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:57 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=arrz6NMmFcqWSBZgRz+pSt9tv5bq6E443SDYjuAShXfR2Ns3YhiLV3ZFhZhAoZ/FQ3jjbMZmRaoj2H6JGmhjHjIaOOsIMPN5SGaVTHVcPbcQtvG4wnuBEBrQIqs/mwvRxMFLqCmmQU981dskc4EB3wEIgXUS1jU2+aqSxEViL6rdD72RKtEwtYUjM2k64HZ2+6obbTXuc1PdJ6bMIX1sR5fvU7iP1B6GLek6kXcv55GiBwFVmcvfiwi+RmbFFShKfc2Y5s6USmuTssXkhg2Y1kwI0A3UNSRrcSeJMP/EFOr8tTsqjWwInXuRwo92Y1MmgYb99CJo0d0gbtObzfB5MQ== 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=liB5/3/LBFtQuwFWwuBS9Ju+8ITpXVCiihZJfH7mZeY=; b=OueahUFXNWu24s+7nDZ+69DugkMuyVcxsua2lNPF/GbhXpSHlXzr0Z65lSiBIGLDOqWr3gKPR7SEufAwwvDNW3UeWRKxjAHJ9ZCTW3IrDdm+lxCHFh0IiN9QjTin+2iB70wUss3+j4Ljytqo0FEq/34ejyI9bkPAiqwOjQs43IXjUAeHymMtcyg4FU2x8jAVT26FWORpJYf3PReli4pcKsd2zh4sQ9+BZ7cKgYcO3Lxnf5/d03oiMUnKvqMZE28ZfFyy9qa4wnJizg2UY/q50JiI3u3cDHDNFCQUPQ4PiWAloVmRomYeBuJxOi/TlZKZapHL18nVZyoN4Rd3tPutfg== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:55 +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.7472.044; Mon, 22 Apr 2024 15:52:55 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 6/7] intel_iommu: add PASID-based IOTLB invalidation Thread-Topic: [PATCH intel_iommu 6/7] intel_iommu: add PASID-based IOTLB invalidation Thread-Index: AQHalM0jxDwfRa4+HUShrGVOuKfHWw== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-7-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: 8c73af8e-8d57-4f34-a228-08dc62e446a0 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?WSBH126z8roqa3w97lb26Iuy7LMa1i/?= =?utf-8?q?TLfWz6NI2jNRGjeNcwFU3XUdz+OTXOv/VijWfc+xAgoqg5MjDtHAobw83dGjxHYkn?= =?utf-8?q?FZ8xuSJFONJycZ0lR0Asys7jWyXz4msXJDCWgUwYTd+Ca/fOW2SG65TTfpPobmcEb?= =?utf-8?q?sLI2AOCgjT3q3mr6TIDUEjMGbp3a79I7ydDxWyQF15H9rgOddwms0lQwOy6e3wGzw?= =?utf-8?q?0F2ck3V0qW4KZSXrTfrJeYlD1FKlfoRmCymQ87ZJE5H1LeBtcdduUgMN3prsiPJTw?= =?utf-8?q?cc9mk4jIwOlyO8RIVATRuAHBLjIx0ylZAt/Z9/rwTcLUhlud+ycmd5UXNtWhs7caL?= =?utf-8?q?yQwpIr9Sucxv665/Gyw/YWCLUTqEEQS7oXW9+SbNttpFOKs1cKG7IA1jbazSNxG3T?= =?utf-8?q?IF/NE4tOErF3veDcZLrfnA2wshtLVoiWjbjZtKwu2/SNlfigNkZacKPvitFs2ptYb?= =?utf-8?q?IAj+lV0JqETH5/HSJQizrYQ0jfzLGjpq39qdAYQp57+muQM1fQjeanARJZ0eBaTPG?= =?utf-8?q?NzWp8aCFmYMeuPXW6dmiUGC73h69Vv5Is3PctnG7vepJ6ZSuLB/dIu5fZSqq/qrl6?= =?utf-8?q?EQTWlET2Baz7oYqAxP7EomTVIZb/8K7hyGheKLf1yeEuUeSskJHKOKxAQNLW1Moi0?= =?utf-8?q?dl57CU25qEh85sw2502Ol8Z/RDyQZ1cuEV0Md5ib3YQfFkNd+maydrVAft2TXPxAt?= =?utf-8?q?YQw4tCbz71M/RjtpovZeWHxYo+KQLCrR5K+kvS7abxKP5FIX6lpS2ySLKGUrnW3xx?= =?utf-8?q?oAN6HD5p+UBJ4cRfV3t/hLg9hm4USKpBuTU1+APmt50NZGGDi7oVTWGQluaFu5cS8?= =?utf-8?q?aFTwub5yK1Oy41tLU9Wou0tm++sbXSnjpU++JkD4V+MGARxqRpep6Y7kv77sRYIBg?= =?utf-8?q?uLb+KcA/vHTIkL/pf9EGO6D73bRPKm+t+nds/z8PRJ36qy0E/Uly5boUm8uIAlIXc?= =?utf-8?q?fTEJWCEUcyKl8zz1TOtZS3PL5alv0BuZypqzVY//qA+3fn1eO2ZDj+soPebFMEaWG?= =?utf-8?q?X5eHBdoOve9Z7LS7I9jBriS9YPdy/0dfLD6irlsIAksNBBnc8ECY271bkSfddiY2x?= =?utf-8?q?n3JfH8Dm3T3bkOdjvCOTUYuQh06Hzl83s76X6merwVu9eAW9Aqy0HWJZsYTnFb8bu?= =?utf-8?q?yNlDnWBbZd2dyHgouJxehAC2DYTJOEOjoRGejtfyyItRraqtjQIpldIRO3M0vGP4g?= =?utf-8?q?RorB7xq1v7sUsT9tMhOJT5ozRoBoJSR1k3/8QOCTz0tQ0icpfJK0+0atGHp1Po7mQ?= =?utf-8?q?KDY0KgsDdoCcHBikpF4/b49/HASiYLm+2Jw=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?nh57FuGImG0YOzc9qlLF5gMhKQcN?= =?utf-8?q?mSFfDRWkLpJo5JJiJ51vZSeYVMEqPxGhQeCbeF4oKgHj30ebIagDNswciof1ndx90?= =?utf-8?q?B+Ex8u8+pWYUKQ8vjcmH/lWijKry160n16aiNEZYPKVprtRvFkmdC5XcJ9kXrRUI9?= =?utf-8?q?Wr3HGoD1Xf2eYNiFOg1HNInkn891C38vh9uA/1KElbXdgE4EY309pZrvxdMbtHbt1?= =?utf-8?q?rG4eRI6N5hOi34LZafTSOWP0iyZ17s17jJowmx5m5nPbLRChTG47jcRlRccRJUEju?= =?utf-8?q?vs0lWwrJaIANVCuTyon6hnd6sO9q2n/ktjK6zky04zpDTidZyT37NX3lWhxNBj3Yq?= =?utf-8?q?Tgx+eSOXQ16w9Pzn/zr5nDP5R/PFTuNQeusLTSpMaofDu4KHdPRA/W8X937/bw7l1?= =?utf-8?q?yarMgQkzOJZXrPGixiqy/6wGfgXNjSL/xPPySNe9eiOWOtupy4ky821Z1h2xyTjYH?= =?utf-8?q?zg4RLBht939UAfS1yMCarWfaxo9qHLvMkeCs1FDX2UL94We5Feecve7ETpHXsSX5Y?= =?utf-8?q?6fJGMLr1/aeWn0SaV7d5rctIypsSUBGRN/upaNqU9Kp6yLQM9ziZCodZspDdY998B?= =?utf-8?q?RKQOSzabR4ZGW4omlaDvhNkiEVRKLK7TkoRL0NvuoZkN0wGvPoiPi/4yY5mflB5h7?= =?utf-8?q?edO0QthfYNGPeSGn+NKDfUbMGsM8PS6OetDoLJ1IrhtXqg3ivKCGjX1bw3YjL0fqI?= =?utf-8?q?QqNrdyfl4jRJovK8IfusbwZOrZC76ceInD7Yh9YfHfC0ZzA+kxVsUznbvXh7yvEYN?= =?utf-8?q?iJWAm5fm5Ox3uqsC0ZEo/KsrRS/RbpI+sRT73qHosc9v7wbCiHPDHGl1lXJExuAvY?= =?utf-8?q?rYjjd5bg/e2fbwOpevkJdwVNMBttQ/eZV0Z2yVoIhyuZAm4rrPIUrv4dJ5a7k+wCQ?= =?utf-8?q?GqtBW3scbHBZmQad+Gi79u9g35ttC/SA15PJrABMr/XasLc55lddUUDSYYKemTeNR?= =?utf-8?q?YRloKQ210T78t1FsV2MQ4bPtkuR2PVyUxuOIGNRVToR1jUWEtIOwU6VwT4zLzGD2D?= =?utf-8?q?v4EZbJXUYNbFPHV5EURD7nsiYfT20Ln+i5X3d8WMq5Eyl0gOWvR8PlUG4AWpAGDPv?= =?utf-8?q?2q1b0trjCrU/Y8Ym3bYkFHgc451oJwtrdFBxOXU+9XHpcNYyXLonBAMIYHeY/Mzdr?= =?utf-8?q?62nn1yKsM9h4EzPhlKkPcOL2B7WXFwaTrbEORAwiirBNo703XbUsEl/iW8bcbPCOZ?= =?utf-8?q?lWhgRrztvoUrmfGDioYo7OcBwxU4Bbndgh5vLgkgeeZfR2MpARUMeWifvIUguogNY?= =?utf-8?q?ZtERqvlhWqLSWkTGGwOPON4/CHgKk7mxC0g65yh2zyLWORcce7vza3Qy5MqZ5FPCT?= =?utf-8?q?JRPmllTPJplpWRNxVRAbu4g62yo5O9vHwqugBHnhAoIQdH9HWdKTMgN19u1P33U4B?= =?utf-8?q?4wEQdG8GMawsTOKkXbnXSW959Bt+LOdihmqF7qNcD8EBXmyQxkmq2bjU+1FGGPt3x?= =?utf-8?q?HMeWMxkj5fCJSsI4TjsL6OtID56hMmlOHx4uLGBY4cBGonusf+Yjyym0b5clw6O5l?= =?utf-8?q?0YUC3Y6l57TPDctVCFOH6NouvdSnCnq1kkQbgyBqo7Kx6uTcxbIPQTY=3D?= Content-ID: <1D0AF3F45FD2584CB9B3FF76BA129135@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: 8c73af8e-8d57-4f34-a228-08dc62e446a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.7869 (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: GiZKjh03M7TB2IfANiuOZa+n/m6Ju+bn484FcHuX631oHfUplszFa+y3EvZRSfS45xAl/KXkAybI3QY3/9T9nm2iRqEyca/VNZDRlW/deLZJ29lg7/I/GOYd2K006EGA X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+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 | 130 ++++++++++++++++++++++++++++++--- hw/i386/intel_iommu_internal.h | 51 +++++++------ 2 files changed, 150 insertions(+), 31 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index aaac61bf6a..4b54a45107 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -277,9 +277,22 @@ static gboolean vtd_hash_remove_by_page(gpointer key, gpointer value, VTDIOTLBPageInvInfo *info = (VTDIOTLBPageInvInfo *)user_data; uint64_t gfn = (info->addr >> VTD_PAGE_SHIFT_4K) & info->mask; uint64_t gfn_tlb = (info->addr & entry->mask) >> VTD_PAGE_SHIFT_4K; - return (entry->domain_id == info->domain_id) && - (((entry->gfn & info->mask) == gfn) || - (entry->gfn == gfn_tlb)); + return ( + (entry->domain_id == info->domain_id) && + (info->pasid == entry->pasid) + ) && ( + ((entry->gfn & info->mask) == gfn) || + (entry->gfn == gfn_tlb) + ); +} + +static gboolean vtd_hash_remove_by_pasid(gpointer key, gpointer value, + gpointer user_data) +{ + VTDIOTLBEntry *entry = (VTDIOTLBEntry *)value; + VTDIOTLBPasidEntryInvInfo *info = (VTDIOTLBPasidEntryInvInfo *)user_data; + return ((entry->domain_id == info->domain_id) && + (info->pasid == entry->pasid)); } /* Reset all the gen of VTDAddressSpace to zero and set the gen of @@ -1287,8 +1300,10 @@ static int vtd_iova_to_pte_sl(IntelIOMMUState *s, VTDContextEntry *ce, if (ret != 0) { return ret; } + *reads = (*reads) && (slpte & VTD_SL_R); *writes = (*writes) && (slpte & VTD_SL_W); + if ((slpte & access_right_check) != access_right_check) { error_report_once("%s: detected slpte permission error " "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", " @@ -2484,23 +2499,61 @@ static void vtd_iotlb_page_invalidate_notify(IntelIOMMUState *s, } } +static VTDIOTLBPageInvInfo vtd_build_tlb_page_inv_info(uint16_t domain_id, + hwaddr addr, uint8_t am, + uint32_t pasid) +{ + assert(am <= VTD_MAMV); + VTDIOTLBPageInvInfo info = { + .domain_id = domain_id, + .addr = addr, + .mask = ~((1ULL << am) - 1), + .pasid = pasid + }; + return info; +} + static void vtd_iotlb_page_invalidate(IntelIOMMUState *s, uint16_t domain_id, hwaddr addr, uint8_t am) { - VTDIOTLBPageInvInfo info; + VTDIOTLBPageInvInfo info = vtd_build_tlb_page_inv_info(domain_id, addr, + am, PCI_NO_PASID); trace_vtd_inv_desc_iotlb_pages(domain_id, addr, am); - assert(am <= VTD_MAMV); - info.domain_id = domain_id; - info.addr = addr; - info.mask = ~((1 << am) - 1); vtd_iommu_lock(s); g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_page, &info); vtd_iommu_unlock(s); + vtd_iotlb_page_invalidate_notify(s, domain_id, addr, am, PCI_NO_PASID); } +static void vtd_pasid_based_iotlb_page_invalidate(IntelIOMMUState *s, + uint16_t domain_id, + hwaddr addr, + uint8_t am, uint32_t pasid) +{ + VTDIOTLBPageInvInfo info = vtd_build_tlb_page_inv_info(domain_id, addr, + am, pasid); + vtd_iommu_lock(s); + g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_page, &info); + vtd_iommu_unlock(s); +} + +static void vtd_pasid_based_iotlb_invalidate(IntelIOMMUState *s, + uint16_t domain_id, + uint32_t pasid) +{ + assert(pasid != PCI_NO_PASID); + VTDIOTLBPasidEntryInvInfo info = { + .domain_id = domain_id, + .pasid = pasid + }; + vtd_iommu_lock(s); + g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_pasid, &info); + vtd_iommu_unlock(s); +} + /* Flush IOTLB * Returns the IOTLB Actual Invalidation Granularity. * @val: the content of the IOTLB_REG @@ -2759,7 +2812,7 @@ static bool vtd_get_inv_desc(IntelIOMMUState *s, static bool vtd_process_wait_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) { if ((inv_desc->hi & VTD_INV_DESC_WAIT_RSVD_HI) || - (inv_desc->lo & VTD_INV_DESC_WAIT_RSVD_LO)) { + (inv_desc->lo & VTD_INV_DESC_WAIT_RSVD_LO(s->ecap))) { error_report_once("%s: invalid wait desc: hi=%"PRIx64", lo=%"PRIx64 " (reserved nonzero)", __func__, inv_desc->hi, inv_desc->lo); @@ -2785,6 +2838,11 @@ static bool vtd_process_wait_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) } else if (inv_desc->lo & VTD_INV_DESC_WAIT_IF) { /* Interrupt flag */ vtd_generate_completion_event(s); + } else if (inv_desc->lo & VTD_INV_DESC_WAIT_FN) { + /* + * SW = 0, IF = 0, FN = 1 + * Nothing to do as we process the events sequentially + */ } else { error_report_once("%s: invalid wait desc: hi=%"PRIx64", lo=%"PRIx64 " (unknown type)", __func__, inv_desc->hi, @@ -2957,6 +3015,54 @@ done: return true; } +static bool vtd_process_piotlb_desc(IntelIOMMUState *s, + VTDInvDesc *inv_desc) +{ + uint32_t pasid; + uint16_t domain_id; + hwaddr addr; + uint8_t am; + + if ((inv_desc->lo & VTD_INV_DESC_IOTLB_PASID_RSVD_LO) || + (inv_desc->hi & VTD_INV_DESC_IOTLB_PASID_RSVD_HI)) { + error_report_once("%s: invalid piotlb inv desc: hi=0x%"PRIx64 + ", lo=0x%"PRIx64" (reserved bits unzero)", + __func__, inv_desc->hi, inv_desc->lo); + return false; + } + + domain_id = VTD_INV_DESC_IOTLB_DID(inv_desc->lo); + pasid = VTD_INV_DESC_IOTLB_PASID(inv_desc->lo); + addr = VTD_INV_DESC_IOTLB_ADDR(inv_desc->hi); + am = VTD_INV_DESC_IOTLB_AM(inv_desc->hi); + + switch (inv_desc->lo & VTD_INV_DESC_IOTLB_G) { + case VTD_INV_DESC_IOTLB_PASID_PASID: + vtd_pasid_based_iotlb_invalidate(s, domain_id, pasid); + break; + + case VTD_INV_DESC_IOTLB_PASID_PAGE: + if (am > VTD_MAMV) { + error_report_once("%s: invalid piotlb inv desc: hi=0x%"PRIx64 + ", lo=0x%"PRIx64" (am=%u > VTD_MAMV=%u)", + __func__, inv_desc->hi, inv_desc->lo, + am, (unsigned)VTD_MAMV); + return false; + } + vtd_pasid_based_iotlb_page_invalidate(s, domain_id, addr, am, pasid); + break; + + default: + error_report_once("%s: invalid piotlb inv desc: hi=0x%"PRIx64 + ", lo=0x%"PRIx64" (type mismatch: 0x%llx)", + __func__, inv_desc->hi, inv_desc->lo, + inv_desc->lo & VTD_INV_DESC_IOTLB_G); + return false; + } + + return true; +} + static bool vtd_process_inv_desc(IntelIOMMUState *s) { VTDInvDesc inv_desc; @@ -2988,7 +3094,7 @@ static bool vtd_process_inv_desc(IntelIOMMUState *s) break; /* - * TODO: the entity of below two cases will be implemented in future series. + * TODO: the entity of below case will be implemented in future series. * To make guest (which integrates scalable mode support patch set in * iommu driver) work, just return true is enough so far. */ @@ -2996,6 +3102,10 @@ static bool vtd_process_inv_desc(IntelIOMMUState *s) break; case VTD_INV_DESC_PIOTLB: + trace_vtd_inv_desc("piotlb", inv_desc.hi, inv_desc.lo); + if (!vtd_process_piotlb_desc(s, &inv_desc)) { + return false; + } break; case VTD_INV_DESC_WAIT: diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index ed61979934..4f734ce67b 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -193,6 +193,7 @@ #define VTD_ECAP_MHMV (15ULL << 20) #define VTD_ECAP_SRS (1ULL << 31) #define VTD_ECAP_PASID (1ULL << 40) +#define VTD_ECAP_PDS (1ULL << 42) #define VTD_ECAP_SMTS (1ULL << 43) #define VTD_ECAP_SLTS (1ULL << 46) #define VTD_ECAP_FLTS (1ULL << 47) @@ -386,12 +387,13 @@ typedef union VTDInvDesc VTDInvDesc; #define VTD_INV_DESC_NONE 0 /* Not an Invalidate Descriptor */ /* Masks for Invalidation Wait Descriptor*/ -#define VTD_INV_DESC_WAIT_SW (1ULL << 5) -#define VTD_INV_DESC_WAIT_IF (1ULL << 4) -#define VTD_INV_DESC_WAIT_FN (1ULL << 6) -#define VTD_INV_DESC_WAIT_DATA_SHIFT 32 -#define VTD_INV_DESC_WAIT_RSVD_LO 0Xffffff80ULL -#define VTD_INV_DESC_WAIT_RSVD_HI 3ULL +#define VTD_INV_DESC_WAIT_SW (1ULL << 5) +#define VTD_INV_DESC_WAIT_IF (1ULL << 4) +#define VTD_INV_DESC_WAIT_FN (1ULL << 6) +#define VTD_INV_DESC_WAIT_DATA_SHIFT 32 +#define VTD_INV_DESC_WAIT_RSVD_LO(ecap) (0xffffff00ULL | \ + ((ecap & VTD_ECAP_PDS) ? 0 : (1 << 7))) +#define VTD_INV_DESC_WAIT_RSVD_HI 3ULL /* Masks for Context-cache Invalidation Descriptor */ #define VTD_INV_DESC_CC_G (3ULL << 4) @@ -404,20 +406,20 @@ typedef union VTDInvDesc VTDInvDesc; #define VTD_INV_DESC_CC_RSVD 0xfffc00000000ffc0ULL /* Masks for IOTLB Invalidate Descriptor */ -#define VTD_INV_DESC_IOTLB_G (3ULL << 4) -#define VTD_INV_DESC_IOTLB_GLOBAL (1ULL << 4) -#define VTD_INV_DESC_IOTLB_DOMAIN (2ULL << 4) -#define VTD_INV_DESC_IOTLB_PAGE (3ULL << 4) -#define VTD_INV_DESC_IOTLB_DID(val) (((val) >> 16) & VTD_DOMAIN_ID_MASK) -#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL) -#define VTD_INV_DESC_IOTLB_AM(val) ((val) & 0x3fULL) -#define VTD_INV_DESC_IOTLB_RSVD_LO 0xffffffff0000ff00ULL -#define VTD_INV_DESC_IOTLB_RSVD_HI 0xf80ULL -#define VTD_INV_DESC_IOTLB_PASID_PASID (2ULL << 4) -#define VTD_INV_DESC_IOTLB_PASID_PAGE (3ULL << 4) -#define VTD_INV_DESC_IOTLB_PASID(val) (((val) >> 32) & VTD_PASID_ID_MASK) -#define VTD_INV_DESC_IOTLB_PASID_RSVD_LO 0xfff00000000001c0ULL -#define VTD_INV_DESC_IOTLB_PASID_RSVD_HI 0xf80ULL +#define VTD_INV_DESC_IOTLB_G (3ULL << 4) +#define VTD_INV_DESC_IOTLB_GLOBAL (1ULL << 4) +#define VTD_INV_DESC_IOTLB_DOMAIN (2ULL << 4) +#define VTD_INV_DESC_IOTLB_PAGE (3ULL << 4) +#define VTD_INV_DESC_IOTLB_DID(val) (((val) >> 16) & VTD_DOMAIN_ID_MASK) +#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL) +#define VTD_INV_DESC_IOTLB_AM(val) ((val) & 0x3fULL) +#define VTD_INV_DESC_IOTLB_RSVD_LO 0xffffffff0000ff00ULL +#define VTD_INV_DESC_IOTLB_RSVD_HI 0xf80ULL +#define VTD_INV_DESC_IOTLB_PASID_PASID (2ULL << 4) +#define VTD_INV_DESC_IOTLB_PASID_PAGE (3ULL << 4) +#define VTD_INV_DESC_IOTLB_PASID(val) (((val) >> 32) & VTD_PASID_ID_MASK) +#define VTD_INV_DESC_IOTLB_PASID_RSVD_LO 0xfff000000000ffc0ULL +#define VTD_INV_DESC_IOTLB_PASID_RSVD_HI 0xf80ULL /* Mask for Device IOTLB Invalidate Descriptor */ #define VTD_INV_DESC_DEVICE_IOTLB_ADDR(val) ((val) & 0xfffffffffffff000ULL) @@ -471,10 +473,17 @@ struct VTDIOTLBPageInvInfo { uint16_t domain_id; uint32_t pasid; uint64_t addr; - uint8_t mask; + uint64_t mask; }; typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo; +/* Information about PASID-selective IOTLB invalidate */ +struct VTDIOTLBPasidEntryInvInfo { + uint16_t domain_id; + uint32_t pasid; +}; +typedef struct VTDIOTLBPasidEntryInvInfo VTDIOTLBPasidEntryInvInfo; + /* Pagesize of VTD paging structures, including root and context tables */ #define VTD_PAGE_SHIFT 12 #define VTD_PAGE_SIZE (1ULL << VTD_PAGE_SHIFT) From patchwork Mon Apr 22 15:52:53 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: 13638649 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 C33F2C4345F for ; Mon, 22 Apr 2024 15:54:05 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvyg-0007GU-2p; Mon, 22 Apr 2024 11:53:10 -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 1ryvyc-0007En-KK for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:07 -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 1ryvya-0007bi-A8 for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801184; x=1745337184; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=+LHzGGTePn0RaqptDHEDrSl1w04MX+QIm9g9KSw5pQc=; b=KmnyE0vNI6+c/bn568bZgrNIUcG9g0L5PsbQwEdTi0aR+Ff6w9Xb02NJ LYdhRRpmd1lIuCKI5DzdnenJOQDCurVrvh/RrcGoJJ8jb5UyBoNX/4Jvx qweGOSUPAOxbrnIIn1bkdOm46jpn525fko1S+6ww5lBHFqxfnI72L5rON L68VYtXujDRKhhJbQRcguOdjY6pOmKXdhkosapmPwe309RAASM6sPEVDx jSBdyxt3q74j6vyJunCIDaTM2z2HgK0NgfnCNamPvdscencx3eNYgsp0s ZU+LJommxAJJcz8Q+da8jklKcdUrH6LlRa/PWnO6cjDlfxAKnQ68h5hnM w==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027676" X-MGA-submission: MDF9dV70uxgRkGjiilNgkvw3ImfiopoTwfS/FUtF847X224Ro7b4qpqXqEDKjGqUJWYM/EFfm7j3EG0N5R8imFoDdqVSIWLN+o5JefLoShLPJ9fErWw4bdqCVAJhDxd4N5IQLSdV+u9/QFvIQmyBVSwSTnJkOmrACO9S9tK2LQGvyw== Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:57 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MsZgWHNybD8GTzbjdZcT9/G4Iq/m7dZxj4LIfaaeDp+/tjaw8yB7bK4kGBamBl9DjJ6ofrw+fgK1UxFCIle87qYCYRJMZl92Vt4X46wVyE8/RQip6x04ZgnFzKdsLuqDFK8zMFcqhDPYrd2aJvFp0R2H88fWqu/hduZWMj4TSWbnYNBYdqWSoNUwTr6DCpZRhzYoXJZn39uMqAO3I57tSDj+1TNPR6ulRHwJBQGTLeIEfFx3PYDZl8x1z8sOwLzfk/i6fKLSBqc7iBzyQNkGt9gZ9ZAx4p6Cur8Tt7l4HRl4NXq1e13aqRg1n/7jibKaIr8eIP0Q/KZCSahrNHw1Kw== 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=+LHzGGTePn0RaqptDHEDrSl1w04MX+QIm9g9KSw5pQc=; b=JFzXi9BQhTQ+NYxALULqdpTHYafUtf+N/INn0sneQHi8Ko6NCij52TUvWbqcg/E40W0x4KNm68EfTdipS9Htab1LSmkYIzBVvfW9Vw35ZampKSMbJSre0j+Ryy45uG3R9plWK/AR05udVbVCKELTRWSFexBmg/8Ur2HWb2J6XmTXu4wHb3dZIyXZ37hTbl8M9ZO+BThKnxMluKDprmiTenln7V3vP+n60Q7EWI0mP/PB87tB17wzXl10zu+I1Yw47L2Xr79FgtHcgnJj9mkNOaJ7MfCzKws5xB1xMe+yECNcPB5M1Db/CVRD4QI69ur2LtrZ7d/fNXq5o+xN7UH+hA== 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 DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:56 +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.7472.044; Mon, 22 Apr 2024 15:52:56 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 7/7] intel_iommu: add a CLI option to enable FLTS Thread-Topic: [PATCH intel_iommu 7/7] intel_iommu: add a CLI option to enable FLTS Thread-Index: AQHalM0jTHnuMRmV0kmlngTXDZeiHg== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-8-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: baf614a6-9162-4e33-b458-08dc62e446de x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?q?SXoNpf0vQETr+xHWnxaeytmUWvl4PRc?= =?utf-8?q?7EHmErHeonhxggtwWRY1Rj+msnSiD5iulRncTEhjeroDbErj8UEQhC8AvcXWlVDKK?= =?utf-8?q?P7Sfus+5j+AlSuVpMmIaGVlOO8neiEI4xxY1RIS1CMBkcmY0Adg8YLgfupZWoxLjM?= =?utf-8?q?OU/hBGKK2Z/UzsWiS7oC/1zt3ftF7op5ChJgs2ByWyFJVxR/OYIv1s94JZTVMrIbD?= =?utf-8?q?iD3RRUA01OdvNmDmoXdFgf9jHfuEOV6za2bLHFJbQxDdj8CzpbS/Fv8d6dQFKdr6P?= =?utf-8?q?vayppQSvDGJkcdTZA1cVKsihtQhCrYZFOjpPOElz3VfbHIRi/WSDYiScl3FOaLeFT?= =?utf-8?q?IA+0//Ar2WjXw5tkeCS8AG0asZXBL+R1JjTp+Soov99cJRnU6G0AhXL3J0pVX4EAj?= =?utf-8?q?shYEoHUcIaY6agwLtMXt+B1qA5hRl1Lnu7ruh42WA5V0N9giyCHoPtmSrJzRltKbo?= =?utf-8?q?qYBi8LqzxxGRHpXPM1LRbWcmw0rmtLd6YA7gvLGkj8s5gje1bYbhKxBakXh1gN1Iz?= =?utf-8?q?01egOqboUGzFg1ZwkTPzRRHd6+GBU0E22qgxDTscd14X7cj8PlHwPe0QnxNx3X8bE?= =?utf-8?q?+CcrxvK5kuTLL24QffaLj0EVHAfRw2r43f6nNxQL68JSRdPN/ED+xpporyb7wj0Fj?= =?utf-8?q?uv+HvmYigqbuOkJ6NeVFP1K8S9xL3nfXf4SPvmHv4dxMaTUMOQqvl7CP1xjNDuWwd?= =?utf-8?q?SOunybGFXL7wvmbFM0olz6dneO4G5+SeFRDW/ZWR8gD2c91DNfatRi6K+0PhjlPfT?= =?utf-8?q?BSEn+xpUV9gHdvFC5iCRecvJh9GSM/wgj+Izoy/yryHbvKSb8QWxVTgEnnpiAC2Vt?= =?utf-8?q?cxzSvzkp7LJPouYLdEW7OcaR9o+rNpjwQmgTNjvMQ+/8xhahy/DAizVr+7TjnIBA6?= =?utf-8?q?S/KZtbcDJIuYJ/wt8yIOArXreX0XpOylN3kuP4v1UOgdLZeWYMrrfXvyadDQcGqRk?= =?utf-8?q?mDpAdURGbF3sJ0KeLwv/uL5l90u1K0W0dC1vjusHtJCT+SWS+1E+87MiBljUT7z+q?= =?utf-8?q?vzNAE2M1HSmWZEmoeuAnVJbZZUvrQuRx5Tyu4CJFV/kCx4B0NlCqH6/EzkD/aUMGA?= =?utf-8?q?JU58djPkh1BqdaWhWZjlO3pQuL3uRmF+LP9uw1zaJ6sRZ9EtxeiLUC8sJXFdUsImP?= =?utf-8?q?m8Y20INFPW/btSUxK/9LzX8hntkcKhuh+rMnuUnQcXbPqgAxTi+kuz5VhW3TNT8Z3?= =?utf-8?q?KsQeQx+CW855xyWCeJkTn78puzs/zJY8Gc4upAWqFSGTgDlbeisyZgg2bUflB82xF?= =?utf-8?q?gWUFi4/D5wQZoTJORYul1kwSbAWFtboLZFA=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)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?RHMfE8tAsKIH28HuSr+klsTAQzE2?= =?utf-8?q?Ymk9YPacDkVHyWPA+rTS7hV7gkXRyPVlsaqzlI6cF5TTDXzfQh1wDPOMLRYQJFw1M?= =?utf-8?q?68L/IYNLvMcQmo8zWycHrz7H7n/oF2zAJ/WywLDEOtNDJcgMPIvQeF0751hwHKCX0?= =?utf-8?q?2OtdH/zBW8MK8S5sHpZX3hUg0L9LHwrFQEQsoQWMDDM1f6BnNvbCqH5pkmL6ZbTIU?= =?utf-8?q?kFMwqPRyxRYi7HaJijnzx29U4EEcXEPcahII7TnLyLd1fNmVn9Ehn9+/AzzrpwbrX?= =?utf-8?q?vFPmJGFnGdsOLn/FZ5LDEUjS4gtMnRwoh2hUT06Vxl/ptMFr+mR+lw0aOYQZ3/pVO?= =?utf-8?q?7p5BBVWbflDSrH3BU4t0mWz+32Aj6hc/W6GYj3GdKCNdM0KF8sxBStbcVVaj9C2Li?= =?utf-8?q?eYv7CgxOdSliduXRoHjkvyLveb9EKuEjTKESrItNOeaVKFo1de1Pcv6boC89I81WB?= =?utf-8?q?jr7PX+39AwvUneNyl6E0vqpIbBwMzK0iVFMRUeMsdqMC3XfF8MRE0SbipAuHJ11fE?= =?utf-8?q?DuOwwLoFtAGM9fvytg5IVOws2WVFLSs/2wvt3UzLhf0R+/XJhnGMxqZexiMPT2IIh?= =?utf-8?q?r/tYz9Mb3E6qdCBM8j/CGXeHRDoV3agzjhSj7KVDOpG7pc+CHmlt8iDxWIV05FhGj?= =?utf-8?q?gdTjuNMJwveivxS9mHA2kHrM5VR9AkRjk6rMteWnxk96+BwWnB+R8FgX7W1pR4MCX?= =?utf-8?q?xzarYFE9+8A0UFqIu8DylekbBxIlXB5W83cz/Mg3vZ2Dml4hlbsqaq2otnkuvTy+R?= =?utf-8?q?2CqkN2PA5ZQekSIb3sYcaPON+enXsZG93K+fETQv2a509ASE7l1psm9e553N/bh8l?= =?utf-8?q?aqzQHzBBACzH/UOSPC0CtA2Xo0hnOfTKJgOD9+3ry4rLYyi6jFbIf54rpKxSSE9il?= =?utf-8?q?E+YzK6o528vPABJP3MWtXXE3nPZpt5SIQGGlCSnL/4ye/SogLfcQYB/EDZAEL081D?= =?utf-8?q?Lf7lacLK2vSCLuSdJApCUhIXhoVxsLHrhPq2Z8AXlEn9/PXD5DRC0ORyRozBCJb5c?= =?utf-8?q?0pHr1jVugf/0HEr+oW32WIKahumdImwDKUqYZeR4GBiMf1cYBFqG/psYyYHBERkcD?= =?utf-8?q?Ka5lfBXwVWcp/Vrq2tA7+7knUjDKbgxtkCWseS033h7/cAYBpdgcDopHpWQVNTko3?= =?utf-8?q?YIy2xCN/VEKWsCi56g2fcIe93vgIRjUPmaquRkt0u5TlsGSwBtbKp6YvK4Ln8aPNb?= =?utf-8?q?EXJdMjfRI+VeZFwcVyqjx/I88SkN9Vi1fCh4IlyhRuJx1bKz+nNIlvWFXRUHEcE85?= =?utf-8?q?PREnvVaTOPJSfUR//pJXZ1TuCUx2xUKbE9LlXHGKH2fxMB4g8gQ3jyhy11oZXxoU5?= =?utf-8?q?VcEIlwV1cZxBacJjCjHygf89V6yAKSm3t4rEsJjcuSQH6wr1EodWp55Slq+QSu06V?= =?utf-8?q?qplKnsJa6ta2q9zb5YreBnDvfNcE3pC8mQEtSw9rvZk8k7aHhOYdUcnihXF0Edo/E?= =?utf-8?q?hjNr5PS2RfLs3mJaIDb1QyxI+sjpojq+RzyhQgjAS7+nx/sarG5SrsOblyMQu5Uau?= =?utf-8?q?bO9gKx9fYLUY1eZDWNM65J0gzJ2AJdioYY7Sp8zAqNxPl3UaXHtwemc=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: baf614a6-9162-4e33-b458-08dc62e446de X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.9903 (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: jNFH02bBBIs0P2Jhc8nUZotgs4Xn6HPW7LHFwyza29EUxH0aKhIXpyhHnAK6Kfr/1lV5eztAtRGCpM5efh7MdKXU2BkYkU6PAI8w43lecvQaO2+Vj+lC72Gn0iQWaB1n X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 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+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 | 6 ++++++ include/hw/i386/intel_iommu.h | 1 + 2 files changed, 7 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 4b54a45107..c35ccc3a98 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -3704,6 +3704,7 @@ static Property vtd_properties[] = { DEFINE_PROP_BOOL("x-scalable-mode", IntelIOMMUState, scalable_mode, FALSE), DEFINE_PROP_BOOL("snoop-control", IntelIOMMUState, snoop_control, false), DEFINE_PROP_BOOL("x-pasid-mode", IntelIOMMUState, pasid, false), + DEFINE_PROP_BOOL("flts", IntelIOMMUState, flts, false), DEFINE_PROP_BOOL("dma-drain", IntelIOMMUState, dma_drain, true), DEFINE_PROP_BOOL("dma-translation", IntelIOMMUState, dma_translation, true), DEFINE_PROP_END_OF_LIST(), @@ -4413,6 +4414,11 @@ static void vtd_init(IntelIOMMUState *s) s->ecap |= VTD_ECAP_PASID; } + if (s->flts) { + s->ecap |= VTD_ECAP_FLTS; + s->cap |= VTD_CAP_FS1GP; + } + vtd_reset_caches(s); /* Define registers with default values and bit semantics */ diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index b9a01556ec..6ecc8bb8a9 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -263,6 +263,7 @@ struct IntelIOMMUState { bool caching_mode; /* RO - is cap CM enabled? */ bool scalable_mode; /* RO - is Scalable Mode supported? */ bool snoop_control; /* RO - is SNP filed supported? */ + bool flts; /* RO - is FS translation supported? */ dma_addr_t root; /* Current root table pointer */ bool root_scalable; /* Type of root table (scalable or not) */