From patchwork Wed May 15 07:14:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: CLEMENT MATHIEU--DRIF X-Patchwork-Id: 13664780 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 4CDE0C25B75 for ; Wed, 15 May 2024 07:19:06 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s78qa-0004be-EC; Wed, 15 May 2024 03:14:44 -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 1s78qK-0004Y2-Rf for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:29 -0400 Received: from smarthost1.eviden.com ([80.78.11.82]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s78qB-0000oS-Vm for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1715757260; x=1747293260; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=DF5SAdKmOTa81i1Lq2VmreQVuK6SYI6Kvt/QgV8+aZ0=; b=DHSKGvy6qDHnw4cUZ9X0C96Y4Hm2ZS9xyKhIfHPSpqzogft/8Ad1H88i cAJjocMw3t6X9ryLGSOtyYWW6Y2c24F73+fMF7lf9RXIdz44FaLWFtdDr AlEa/jJQ4375ofIp9N2Be9UtgVC9w4+jxLg+KgsH2rPanagvstpFSl4oS GgCTt8GYe8jtA01jl8uOhc1LPuSBIl89KmLaFxOoCdA6rNDEk+CvcLPZ/ 0lwsFC3jlj4z8d7QNuDz/MVdcYq47GVVv7d9izkMgctE/e5zlSJUDLqMY vQHZmZapfH1qbvX40jQi2OQgxrw+qO75+0gjmnN+WeX2nEH7GAcJTUdhK w==; X-IronPort-AV: E=Sophos;i="6.08,161,1712613600"; d="scan'208";a="12580198" X-MGA-submission: MDHt+GikQvihNGNDiRqe7P9GNAmc04/nzB3BlwVlPSEegY3m9i/MUGF3X7xRy8HYXrpikdPlyHd+TYBuJSAa+yq1ih0jfVs+5lN0tLu9XTH885HqUs85TINKsmQPpbmOQ0idpyEqPg8uE+EJnDsidACIp6gcZ7tmgaKKsdhRQQ0hbQ== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost1.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 May 2024 09:14:18 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a5FYm9PHVu0ViGJJhnT76xQ6ZqR+X/r9geAQ2vWl5zaIu9+em2BeY3KFjTp76dIk8lLBUEHLwNnSYxiu47qSYDReF3GR1HEt8j2cSL7kTZy9TLXJVSPDJrNoJzvBYrg6EEtJcf1ZfJj30WvDJI8HgJZS9NOB8mfqkNV5XWOZ3l81oYjCBtPN9e6deBctFcSYgx6a4TuS3ogCL6fhw8uAcVw0bwfOs+Rdu5z7Affy6onANURtgWLX4griiFJfoO65tCLjU0CQPGigcHQ9+iDcsqeV2kzRmxRPeVKJT8zpsFrLBYV+Jls8RMPUKqFYrXC8ljNGMCXIuMcm5HjG+jDWAg== 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=DF5SAdKmOTa81i1Lq2VmreQVuK6SYI6Kvt/QgV8+aZ0=; b=HyWdUGW9yMoCk3hrYFSng2VyIf+mcPc6xdF/f5oQ1FJF/onekk6CCsXTK7DccLja1zhs8pT6+OL2HtEcVjDZcE7gUsnEwevbzPIEEEww/4pXy8o+OMszOlsi7BH+lyqLBDjX6vswByKtHv+gHef/bmGwSSbC3oXzPzVvgTm6Mi3dZGK2R6ygBufr99cXBSPutl0Ua41mYmqQFbqgZAdiOOEFTj0rcReGVaiHTPV7Dzk1sdASTJMkur5vEUT3u/TnMlyY8Wj3AkOQysWCZRok/1311jsecZp3Ubsg0B5EJ+V9TbSwgcNGF7RozOATKboesAJHbrXgBsYa5Jv73Pt33g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AS5PR07MB9896.eurprd07.prod.outlook.com (2603:10a6:20b:676::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Wed, 15 May 2024 07:14:15 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%5]) with mapi id 15.20.7544.056; Wed, 15 May 2024 07:14:15 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , CLEMENT MATHIEU--DRIF , =?utf-8?q?Philipp?= =?utf-8?q?e_Mathieu-Daud=C3=A9?= Subject: [PATCH ats_vtd v2 06/25] intel_iommu: extract device IOTLB invalidation logic Thread-Topic: [PATCH ats_vtd v2 06/25] intel_iommu: extract device IOTLB invalidation logic Thread-Index: AQHappd+ypinSPAnNEWGRCEtiSZMgA== Date: Wed, 15 May 2024 07:14:15 +0000 Message-ID: <20240515071057.33990-7-clement.mathieu--drif@eviden.com> References: <20240515071057.33990-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240515071057.33990-1-clement.mathieu--drif@eviden.com> Accept-Language: en-GB, fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM8PR07MB7602:EE_|AS5PR07MB9896:EE_ x-ms-office365-filtering-correlation-id: 4aac8f47-67a7-4ac3-98d8-08dc74aea114 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|376005|366007|1800799015|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?4nKvFTpRvy80xqFbk5SYwXLwlkfjg5N?= =?utf-8?q?zkjll9XWGQE4yfys+4x/VyUbGRUzXUNKOJlPLzWTxa53nkeDsY/wtJuqFS0pYLw76?= =?utf-8?q?M7h/099GOx6shqqbw825xnKgwHTAxCQHQvRGK4ji2y86gPHb4qsQnBvlDcM3Uq5ZV?= =?utf-8?q?+jeUeQIQW7Jj7J8Sulgp/1AJs70SWk/6G9sMwJSqs3JjE1rTMcXHaqRuIc144KoJ8?= =?utf-8?q?mQIMY44tty5hWRh7u+Iqlemv0RF5vjclPvz/aE8sRvVw7/mCdp0Y0ZyX0muZFoYTS?= =?utf-8?q?6/iXEZgRBHJaru16hZIzahpBXDwU1QxybkY/tOg72uKhLl3pC8BONwvT50Ow5WeS6?= =?utf-8?q?U39c2OByH9m1E7wbglECUbnk2jT7EIf/86tCNL7qy7ZCtkokhqey1dGp1YpgPkTNY?= =?utf-8?q?MDMeojv4tQlj1rgrjPm2p4gKnCVTDtqY9QnMYO6z9Xw7aWo2YcyJpp4bazFeaPzLH?= =?utf-8?q?SR3q4UsIUWiqELugNDdZ6VrFFfzrb2Az4NRzsAV+nqlyy7PXXIXsf48lsByT1zA5e?= =?utf-8?q?L9uyIANKI3JEDfBqAlC5Olr7pAG/szxbno4fn+l7N0UZoVN/ANQq6W9v5o8dA3e1O?= =?utf-8?q?uN8Q33wqNsBQiONSH9d95hO2S1A9vG4aGvMGE2GUIdkmgKhNxB6f7LqSF0AJA/jvq?= =?utf-8?q?kmWluHsMI4ovVHkVyZG2G2QzC2r2q+7uXCVzGdQEyT0JcxE7FHi5bua472Pxt5csg?= =?utf-8?q?naBLRKFx6gYEdZcIyIN38wSr2vsfVflNF6Eu2/pgpnV4bFQTNz6tdVEWERVX9r2aC?= =?utf-8?q?qSfxnS54vX+2BuqgTAy3O34UAzN2Edmu2P6ejCVzkuQqhdBTgtheRjEvmzw6DRoJQ?= =?utf-8?q?HFOZ/nHgD2+cIfU+/AS9GHvux8nplsr1RbBJsK5CYynwdtUeMNTIeLf0D9LmG2ADy?= =?utf-8?q?eI9pCZjGFb+h6RWocrr1mbFACDBeJ7Lz9MKTuq3MSsIkOwYf5NjBU/Qs6SgWIvEtr?= =?utf-8?q?m3sY2ZCLU5DCqmO3Vn1dptom16STYnm5HS0sgqma30d5x94W6bF04E02kIEGWV2kr?= =?utf-8?q?IVRD9relnJqsLWLPH7U/3lb/50cWyrK1MD8zmTLjZo2ztoVboafeYH3+4Vk2720b3?= =?utf-8?q?pbmjhNsuNnjWmq+NjwqeWKIEw7csowhC+j49ae9HBQKnVYYbQVzo2TvbyF0Mmomg5?= =?utf-8?q?lN5161x2xkVe31x0yqXQalYzW2nGoZlpYpS3k0ht9aBP58wwP/YBb02Fb/zhEY6WZ?= =?utf-8?q?UAa/Ny7TCsmvySIz3F5Dth627SuocizneKUkHVv+IpJLOt7ozlJLqzaLyLBfDsys6?= =?utf-8?q?OWPgMw9GavhSjxS02EGGeuop3WM+XwEWU6Q=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7602.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(366007)(1800799015)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?7LxWIMLKe60U85NAB1TMaeBew8Ea?= =?utf-8?q?BRMeN8QdyV1OqZqB84sbri90K50u75xKU9wyVJTCq96zGiaedceIyUi5GKXAos/JB?= =?utf-8?q?YxtqwZ8HMDRqjqvralvok0lj8z8a1l4XrKFU7qcp2ZULaLqakYxzVs1kNiQsaPFyv?= =?utf-8?q?qw8MACgBqWEmz5R+3AV+O93GiFsGLCgg7lGqFQAYa3wLKOUulzPXmRATNwTRsNvd4?= =?utf-8?q?wW84vlV123aoeOPxSWspLPk/NAX7mnaAe0p0Ur6M0NBnSkxnF7UsQ+lp2KIaspsJW?= =?utf-8?q?Va18jS3ERnAyyx0cL9kpM/0Wx+1p1sHkYsGWDrBieJv4FuISLDwdE+1TEXz3n75hp?= =?utf-8?q?pGcBusIZhQl6QzXQNMxDYgNIQlAtZJ1rcPnmcFgmhzetPrwsp3XPNorrYkLMWcFne?= =?utf-8?q?bdSy3xAbpM48LjAcN8YSAStCY8QEoP/tzWsL4zQYjBNA0bZoF19lh8isyWntzNscy?= =?utf-8?q?fURklDo8BLRftKhAvhBNe6Qbc5INYk3ba7NvwnMyeujGh3tdaaezJydMDu718nW+r?= =?utf-8?q?b9ITqZ82JkQggRPkHmR3hsBAyrsawX1f3H2uA2QMUYu4ttlPgmuBv++Lu3fO38YLQ?= =?utf-8?q?1I1/fak+Cf5CIouzHwXZu71JxjKfVH7mxNP685fHDevaXOW77zRiWP3VmQ6bzd3Ua?= =?utf-8?q?foyULZYL9BM3CDR30IEpPgiRjaQyBW6y5LnQ/Wohno2a24wQqWFWGVL1ef82H49G1?= =?utf-8?q?DY/unPwOAvTObZOAlD8HBpPMXP+cCqsaUONRDHX08BfCapb4cQSx6JrpxMUa8o3df?= =?utf-8?q?3KYcDiZmakzgBtQtCE1tQq6mBwerTAL9vxqPHBXPqswTILqmdQpqKflq0NKTu4ysN?= =?utf-8?q?ZafzbEyrr1CBdCsWA4Rckv7jqpBNpLuieQo7Pks1Qu2brteoJ3euDdkBjzSUYBo+y?= =?utf-8?q?MAEnRh8F3jYEuMsy9Oj4L9PMZ7dggRHcpE4F3wz4qTUPMe5l3uX1Y8a4RIG0RDXxi?= =?utf-8?q?1cca+VvV+GbvwuhE/3/KrxlKKyQeGaaOQtalwB126w+u+BOpm1nRkKlu9TuEkot+C?= =?utf-8?q?ixlhauirsBFa5kUUPdRLxsvuUa59oCUWZkNxyADdVYIbLRowoBPiCAAUbZ1rGRQrM?= =?utf-8?q?kSt3LheivTxaqW8KALOHYx8ncrGyVVl6lJrrlOnhT6q8k6SAHlRSoiJbjZHp6j1lM?= =?utf-8?q?oxzEQPgQ395i/ShIL+BoOaWZyAs1nOC/LBYlFnQb4ZsfLbwgBEyE2USwi7bjhMCWv?= =?utf-8?q?mi7LqQBgGoAQe0m9U4OQ7sKrMm2NVBQS1OEYbqepHyks3/ItGxvBM8EPLHCGN0Luo?= =?utf-8?q?gBjJG4tMwdr3pq5lOZyAxVp64l4y456SHoLQzyR0uwx9kix4cdSoJ6DX0U3Ba/iAQ?= =?utf-8?q?m0FR/D51uFiz9t2ILwUwQkTsSsGpNoUvB7XNUOjPyCcySyjKs++F7hJue04x5S/wP?= =?utf-8?q?jx+aYYQZGBnwX6d1UxC3ZDVkAg6rLxLzXY8zeCmSh/vQrjo/sDv+ilUsCg3Zp5tAH?= =?utf-8?q?3hFkNAz5Ilg9tMaZlj/oZtOiP1md6fC3tSHc7+UR8t7ERz4KgfMkTzbzWflYto0ed?= =?utf-8?q?znSqskfNhu8jD7cvQDRE3LbhAmQnkHj/LMLYxkzDZ0WE//ZFQjeFr3w=3D?= Content-ID: <715FCAB949C26347B4CC5AD1170AF369@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: 4aac8f47-67a7-4ac3-98d8-08dc74aea114 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 May 2024 07:14:15.5207 (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: /Pg/G4dDC69kvgKxr4GONU2oTVXFhZ3snYRb2YQ4bsFfaO+E1mij68JE6DsZFGfCoHTYd/hBy6+u1O50zz9nTfPoZftbuHS7JYD0wegRCZ3zsdKZ/SYgD+y3u15eTfUx X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR07MB9896 Received-SPF: pass client-ip=80.78.11.82; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost1.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 Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Clément Mathieu--Drif --- 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 7a4dd738a3..dbdf13470d 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -4292,6 +4292,38 @@ 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_piotlb_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) { @@ -4307,9 +4339,7 @@ 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; @@ -4334,28 +4364,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;