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;