From patchwork Wed May 15 07:14:13 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: 13664740 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 B50E0C25B75 for ; Wed, 15 May 2024 07:16:09 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s78qG-0004WD-GE; Wed, 15 May 2024 03:14:24 -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 1s78qD-0004Vk-PX for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:23 -0400 Received: from smarthost3.eviden.com ([80.78.11.84]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s78qA-0000oJ-Qb for qemu-devel@nongnu.org; Wed, 15 May 2024 03:14:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1715757258; x=1747293258; h=from:to:cc:subject:date:message-id:content-id: content-transfer-encoding:mime-version; bh=8lPi7Zz9eqYvxEulJPp2J82yOe13m3FXOzxMPp9NeoI=; b=Sm1wXUV50RAyr8bQ2J7OlG8fyqb9CVQ7tK416PvuSuHjAvrPgCQDYMEW HjYeYXc8ZV/ByGHfNpDtkRdT9YEl4Mx8AOWVya4SlKsrfkT5BKyj3WeK6 uPCgmVpUCaStF3SALWCGqSRD9v55agm8UiCZKDpkaPJI3eRUgp+vMuWLv DhGgSY3tYgGdW8L5ksqSW1yt5Ib8u7Uz5jtYdeXQMB5hCqD6SYmQ5+gk9 InciOMC3XzeOlLtv5DKty7Xlcg1SVD0jmSg8IMlmy5yIJvyfQ+3237alU p85sAJ8dnoqJ0LOqFhV+0gwH2w36tNnIknDW88V1zNQuCWb0vcTIWaLDb Q==; X-IronPort-AV: E=Sophos;i="6.08,161,1712613600"; d="scan'208";a="12581792" X-MGA-submission: MDFBM0nTZpxeQ4gqaxdP8IcduaQm59a6CFt79HL8TWaF29QtAId/LC+FBvm+wN4M3nzGXU9xARpbmYEyHRF7ObQqz1fdU88gytaooy8ZNvqlALjlI0VYpPl74rsBH1MJdW1kO0qB0yL8m+9Pf/dOb9W1EGR2ytStierUlQlLN4rN+w== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 May 2024 09:14:16 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UHF/XECgzHqntbkKtGJ6j4z9BtOPmjT+LQeRqg0eEhiUvKF7psPKv8N42t3Q9R9kX30Dnx2clU+jvxFM+AZyG4VnCSRZIxRIwabWjn1GVlWvZsZhzLEoAOoAO9CEkGKckrja03GBYLeBUj9+LwB3ulLSVWqEwMT9rY7zFkmLBCwmPGD+Bz/yxa74WYfnU6D2X3AgSMIj7iA9sbDaeuSU2/bapQYn4/aDvFjNnbEmphvBNTDqg3eEbp1hENI0yqZasKjDGbfadNf8F1/fUAQ8V9jlQ7bqzJCkK2a4aZEnGvTPqAuBtraXoqUv1MMISGWk1S1NPQnbgE2WUoV3HHPuZQ== 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=8lPi7Zz9eqYvxEulJPp2J82yOe13m3FXOzxMPp9NeoI=; b=hKvfwX6VFrlrEjyztLF82pnH6LGri1kUyFFQeKVX/hrEqtyeQX+Yf88IkjMAoaHqBFnl3Vo/gPFMIz9m8imdK2JF+aAUW8QGzqbDNHcLeohzT1IeYwVMbeq8LKZotzU6/qHPF6b64ZcMBi0y0/sfi+oCanE8MXQNbUmo0MbCMyLr2Pg/vthPUXiPMxvq9fScPbYvqxUAYcWYsyapBGAYMYYkoV1hhZ7jistlZ4ZPw1FaP4LST9M0XRlpWMRFHcex4gU+VaQB1ZXblvQm0ZaQiggQyUDk1TAygAZV0io58EYDciTDJ8u61RXFunyaU9IdEbVaWc2SwQdl1WkYJbAdxw== 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:13 +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:13 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH ats_vtd v2 00/25] ATS support for VT-d Thread-Topic: [PATCH ats_vtd v2 00/25] ATS support for VT-d Thread-Index: AQHappd932DmfjK6V0eT722xTxdApQ== Date: Wed, 15 May 2024 07:14:13 +0000 Message-ID: <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: 733a7c1a-1ece-492b-097e-08dc74aea000 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?2eL6fWS0XqQqUBpTVGAVen971eej4va?= =?utf-8?q?n5lTOJ5xXMGx3VH4qNalaStJjmeqY0p5iNCWlUCdKoGBJvfMStLda61jXQYZJ+Gib?= =?utf-8?q?KxekyMXJ9heNymF+mjr5LuF+w9hpFRNBM8wVjUAQRiUCkgWdGQvlk9LdACSd/GgIc?= =?utf-8?q?OSe1z8lee5wCDi+XdLlwHd3BPvOPtfUVSMMUyBl1WkgmpMfYq49g924FyEsvKzQa0?= =?utf-8?q?gyk/u6+lvViJWlEGBHGX8qPGFZ4BpFbcpMVe5Mn9wiAZq2UE4y/lIJwf2P0kPocqz?= =?utf-8?q?ppKBkd0kqvwJO8DodVvjw+e+SFbr1OZgGtYq/Oq3uoERB8Hb6p6ucOu7/pax2vMuG?= =?utf-8?q?e/74ckVRhAiQRmOpBCQsIx6kACZcORVNiKYaz9sB6FtQ75ckfORtKUOW89OLigD+o?= =?utf-8?q?nHFNc+czdvNvQ91XeDe6k+pkTHQGvUzPjua/uizM1MtE+wLyW9/Jfn+wLIOgBuxoV?= =?utf-8?q?/dC/99JvPSfOWd3KlHUUr/numK/EDM8Pq0hEePTNjpC9aMEormynj0SqSVK1qxs4m?= =?utf-8?q?nQnV0lfVH3lB4n1UwCCDCVC20PDlK0jEddF+EL8q1YrDhZJozrRY9U2T0fkonGsjX?= =?utf-8?q?P5hDTJ4iE7atc4JYLyrf4lKiQHY9XWnG/NkuY5gl5GcmyYcaGjgLG4ne4/hDQIVHj?= =?utf-8?q?lS/Yrak6RrfbR/6y9hu4zvoYmttuAljWOPTW+Ci87y208qbHNHJLVbnGho1udgfi6?= =?utf-8?q?yNOmQyaQFPTK/yOXFgcbbTS5Q5atJaQ0uLEg4cqiFmcWstFabA1SwUAf3XncsdmGZ?= =?utf-8?q?+eMHdcCnFJOniDcV6UYuicaFIb/oXZDo8kmHtZzPDJ3IBKEYJ0fw238yVBULJzajG?= =?utf-8?q?/X6XWEGEZxXSk50LtNoY63mHZWB8yaD6x/K1dlUD3vulDNQpByjvEaGQKGVaffO2l?= =?utf-8?q?SE+lpuiKPubcPX8ERZahJuXUfXEZ7RFMtl7usyG0B0p+0ucBT1MuQ7t7sFYLqcJkS?= =?utf-8?q?88wK997d18fVosJ86JUrvoeqZXLxKyK65qfyZi6UT/hMuDTdy1R2yu+/UXTqCA7/1?= =?utf-8?q?XyCW2177U+c4c70DSzVy/lcwPGG+R/Xal/QOWK4oaBUpWDJNn1PrRfFQiXwUad9JR?= =?utf-8?q?jR5CLZOmnF+kwSQx1PbPi/VzO7YafpZhVHHLW2QHFLJpj/rhpgh9kzRx8ngns2XVA?= =?utf-8?q?UuU2J4qplmdgO412HMEG8Ebt8Itw3kLtkFYGW1jyB+HU1TPU/FSBc2NVAU1Ivp0i6?= =?utf-8?q?EraTW7L0PcfcVM6nJUSSNngU/TW6l/Pij6XQ=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?0im2muG4TlO5JXEKjXyRRJjmwnE6?= =?utf-8?q?tlf64Qy5isalB7dpgRnxEQI8YC1/Fy3HOVjcbdJeXsU/5Mc0VYV2iqvZ8ouaBzk5m?= =?utf-8?q?Atl5I0i+m0+1cDjCTkSXfF8uM9aRj8CdXTeo4FFLTZ0BqM7woVuhgoRUkOTyW5dsW?= =?utf-8?q?kAhopYQ7MRJ0K//EHzzuX/29IqKrVvi2nLfwM7ZXGimX4invfy/x4C2YVAugdYasr?= =?utf-8?q?m+ut12eTEmiEPug0XvHAEcON8l8c1+xUojtwUauiz/yFw2khH8Mbf1veaLCu041et?= =?utf-8?q?3b/Cczvv/LThEIxlpMiqjcpOzomh8Do97cHAse+YLBATz16VLzTimztmnS9WBfZf9?= =?utf-8?q?hCiWiv48XndQDdgZZuzPbEjouYARgAXGsKXSUFaMJsF2YY4Qhw0xSjnBa1yd9iQtD?= =?utf-8?q?rmhyOoqlUnavtpRSND8Ki5i40oE9KYl388b0CmCEyaF1jDxpedT31Mc0Hj469UsRV?= =?utf-8?q?4J5ekiYty/+9X0l/qFNWZFonI0SHmtcnMr8BUUwwL4h9uFtvvpkl6jeKt5QM4Z3M9?= =?utf-8?q?6XBVmK4dPTmyiaAmF+13WMcxCV0dRYZRdhYLbPY0yVaZCO9+5cWV684wcieYsU8Zg?= =?utf-8?q?L6/s0okdCGjF+kCDeRSTjf0VHr2ex5Ea7bvHhgancda9ipvhob0EHwk9BqwERFmyc?= =?utf-8?q?xBBpVEKznjVlro0Wv01OxOMd5bSs56lVqjse51FLReQbuJ08kT0zs8dIDvzTOectJ?= =?utf-8?q?d+VgqHmrHMuYiWebxZ2zQpRIs8d4TjZqeQ4ife9i5UjXg0hA/ZoJ843dw+D8o8gdc?= =?utf-8?q?zGE1BOVrhX+wcWuZCN7UbTOn7YsTerK+b4Oq1EeW5NWr81a4n0jFVbaEQoPgaQlB6?= =?utf-8?q?4qmpwAp2Xj7M+jdbMnkls+z53IWP0UNkoBqJKxGzDIHkD+M1mmxasYyZY0sITkN0y?= =?utf-8?q?jCLx1Z4kfuIDQhP0ePQTHoos+LYNwhH6ExBLo0ToC56j9yZsO9/AB7y9yfCnpBoQl?= =?utf-8?q?xicveRFVZGDp0mm9ltKWTE+1/WRwr8G6/CUAvnEMuJHkNetjXzhLa6A21Mq+6Zau8?= =?utf-8?q?tlQajMZD5nT2WFK6WfHzaUzJdB3KRmRLv3/F39lEz1ZXK2TSsevPkmRmmmDZLmBpz?= =?utf-8?q?U92mm99Qw2xQlrAvAxK97YRY09sJDluaEAhRsD6z24Mam3jX8iUKFmqac5Az0veSI?= =?utf-8?q?rm9bQJqsY8uBaQ4fKMtMO7n+8w2SEvOyxpT+Pyk8p8IHUqZnirG2jBAO3YXAw2paP?= =?utf-8?q?a0ylfPnKcUHkD+K3BQ+P6Wzo8+D7Tew21RcyTo9pc8AyF//mWcs9qpx1QV73s8Bn4?= =?utf-8?q?8EAugllyZoCW/sHWe/cL6XW1+ob8apYmX/DMwGk6xZd3nFeQ3W4JHB4EOT7esjy47?= =?utf-8?q?yDbfq9Um+F5ejZ4o0FkO6flU59GXNW/PBSiDomtfsihx5PYpd6tk2hBqrEWNHiwyd?= =?utf-8?q?bhUK9o0Wqn1T0iE82d4PAayo4h8xG/tvdrssiZCtO6A6gUyVV6rGZWJ4FQrwZvChP?= =?utf-8?q?lB/fbfHhRvimp1Bqu2zP6I4AyHqdrFAo0aA2c2zOMIlG0I36F5DJIed6a7Z0b8uuG?= =?utf-8?q?Zj1EFU5cajkDB00DflGGuPYKjbLH0cI3whl2jrnFOacewaX7aaiNaLE=3D?= Content-ID: <27E6B47C62E2EB4ABA1201F9905AB885@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: 733a7c1a-1ece-492b-097e-08dc74aea000 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 May 2024 07:14:13.6948 (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: gkkK/QWb1vLXFnb4jL1ZsSOhofuuF0aAHxyTeXYGBXIIRmCIYaVXwGHQmQ4pVBJWIz12TmqucE/Uc5FJS3DAFuoHVvHO7+h30TctqAirTaMDk7/mTdEqgr3aYO8s0PN+ X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR07MB9896 Received-SPF: pass client-ip=80.78.11.84; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost3.eviden.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org This series belongs to a list of series that add SVM support for VT-d. As a starting point, we use the series called 'intel_iommu: Enable stage-1 translation' (rfc2) by Zhenzhong Duan and Yi Liu. Here we focus on the implementation of ATS support in the IOMMU and on a PCI-level API for ATS to be used by virtual devices. This work is based on the VT-d specification version 4.1 (March 2023). Here is a link to a GitHub repository where you can find the following elements : - Qemu with all the patches for SVM - ATS - PRI - Device IOTLB invalidations - Requests with already translated addresses - A demo device - A simple driver for the demo device - A userspace program (for testing and demonstration purposes) https://github.com/BullSequana/Qemu-in-guest-SVM-demo v2 - handle huge pages better by detecting the page table level at which the translation errors occur - Changes after review by ZhenZhong Duan : - Set the access bit after checking permissions - helper for PASID and ATS : make the commit message more accurate ('present' replaced with 'enabled') - pcie_pasid_init: add PCI_PASID_CAP_WIDTH_SHIFT and use it instead of PCI_EXT_CAP_PASID_SIZEOF for shifting the pasid width when preparing the capability register - pci: do not check pci_bus_bypass_iommu after calling pci_device_get_iommu_bus_devfn - do not alter formatting of IOMMUTLBEntry declaration - vtd_iova_fl_check_canonical : directly use s->aw_bits instead of aw for the sake of clarity Clément Mathieu--Drif (25): intel_iommu: fix FRCD construction macro. intel_iommu: make types match intel_iommu: check if the input address is canonical intel_iommu: set accessed and dirty bits during first stage translation intel_iommu: return page walk level even when the translation fails intel_iommu: extract device IOTLB invalidation logic intel_iommu: do not consider wait_desc as an invalid descriptor memory: add permissions in IOMMUAccessFlags pcie: add helper to declare PASID capability for a pcie device pcie: helper functions to check if PASID and ATS are enabled intel_iommu: declare supported PASID size intel_iommu: add an internal API to find an address space with PASID intel_iommu: add support for PASID-based device IOTLB invalidation pci: cache the bus mastering status in the device pci: add IOMMU operations to get address spaces and memory regions with PASID pci: add a pci-level initialization function for iommu notifiers intel_iommu: implement the get_address_space_pasid iommu operation intel_iommu: implement the get_memory_region_pasid iommu operation memory: Allow to store the PASID in IOMMUTLBEntry intel_iommu: fill the PASID field when creating an instance of IOMMUTLBEntry atc: generic ATC that can be used by PCIe devices that support SVM memory: add an API for ATS support pci: add a pci-level API for ATS intel_iommu: set the address mask even when a translation fails intel_iommu: add support for ATS hw/i386/intel_iommu.c | 324 +++++++++++--- hw/i386/intel_iommu_internal.h | 21 +- hw/pci/pci.c | 125 +++++- hw/pci/pcie.c | 42 ++ include/exec/memory.h | 50 ++- include/hw/i386/intel_iommu.h | 2 +- include/hw/pci/pci.h | 99 +++++ include/hw/pci/pci_device.h | 1 + include/hw/pci/pcie.h | 9 +- include/hw/pci/pcie_regs.h | 3 + include/standard-headers/linux/pci_regs.h | 1 + system/memory.c | 20 + tests/unit/meson.build | 1 + tests/unit/test-atc.c | 502 ++++++++++++++++++++++ util/atc.c | 211 +++++++++ util/atc.h | 117 +++++ util/meson.build | 1 + 17 files changed, 1453 insertions(+), 76 deletions(-) create mode 100644 tests/unit/test-atc.c create mode 100644 util/atc.c create mode 100644 util/atc.h